Changes in directory llvm/lib/VMCore:
ConstantFolding.cpp updated: 1.93.2.8 -> 1.93.2.9 Constants.cpp updated: 1.163.2.9 -> 1.163.2.10 Instructions.cpp updated: 1.42.2.6 -> 1.42.2.7 --- Log message: Round 2 of DIV updates. --- Diffs of the changes: (+73 -22) ConstantFolding.cpp | 28 ++++++++++++---------------- Constants.cpp | 34 ++++++++++++++++++++++++++++++---- Instructions.cpp | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 73 insertions(+), 22 deletions(-) Index: llvm/lib/VMCore/ConstantFolding.cpp diff -u llvm/lib/VMCore/ConstantFolding.cpp:1.93.2.8 llvm/lib/VMCore/ConstantFolding.cpp:1.93.2.9 --- llvm/lib/VMCore/ConstantFolding.cpp:1.93.2.8 Mon Oct 23 13:13:27 2006 +++ llvm/lib/VMCore/ConstantFolding.cpp Wed Oct 25 20:58:05 2006 @@ -531,30 +531,27 @@ if (V2->isAllOnesValue() && // MIN_INT / -1 (BuiltinType)V1->getZExtValue() == -(BuiltinType)V1->getZExtValue()) return 0; - BuiltinType R = - (BuiltinType)V1->getZExtValue() / (BuiltinType)V2->getZExtValue(); + BuiltinType R = BuiltinType(V1->getZExtValue() / V2->getZExtValue()); return ConstantInt::get(*Ty, R); } - static Constant *URem(const ConstantInt *V1, - const ConstantInt *V2) { - if (V2->isNullValue()) return 0; // X / 0 + static Constant *SDiv(const ConstantInt *V1, const ConstantInt *V2) { + if (V2->isNullValue()) + return 0; if (V2->isAllOnesValue() && // MIN_INT / -1 - (BuiltinType)V1->getZExtValue() == -(BuiltinType)V1->getZExtValue()) + (BuiltinType)V1->getSExtValue() == -(BuiltinType)V1->getSExtValue()) return 0; - BuiltinType R = - (BuiltinType)V1->getZExtValue() % (BuiltinType)V2->getZExtValue(); + BuiltinType R = BuiltinType(V1->getSExtValue() / V2->getSExtValue()); return ConstantInt::get(*Ty, R); } - static Constant *SDiv(const ConstantInt *V1, const ConstantInt *V2) { - if (V2->isNullValue()) - return 0; + static Constant *URem(const ConstantInt *V1, + const ConstantInt *V2) { + if (V2->isNullValue()) return 0; // X / 0 if (V2->isAllOnesValue() && // MIN_INT / -1 - (BuiltinType)V1->getSExtValue() == -(BuiltinType)V1->getSExtValue()) + (BuiltinType)V1->getZExtValue() == -(BuiltinType)V1->getZExtValue()) return 0; - BuiltinType R = - (BuiltinType)V1->getSExtValue() / (BuiltinType)V2->getSExtValue(); + BuiltinType R = BuiltinType(V1->getZExtValue() % V2->getZExtValue()); return ConstantInt::get(*Ty, R); } @@ -564,8 +561,7 @@ if (V2->isAllOnesValue() && // MIN_INT / -1 (BuiltinType)V1->getSExtValue() == -(BuiltinType)V1->getSExtValue()) return 0; - BuiltinType R = - (BuiltinType)V1->getSExtValue() % (BuiltinType)V2->getSExtValue(); + BuiltinType R = BuiltinType(V1->getSExtValue() % V2->getSExtValue()); return ConstantInt::get(*Ty, R); } Index: llvm/lib/VMCore/Constants.cpp diff -u llvm/lib/VMCore/Constants.cpp:1.163.2.9 llvm/lib/VMCore/Constants.cpp:1.163.2.10 --- llvm/lib/VMCore/Constants.cpp:1.163.2.9 Mon Oct 23 13:13:27 2006 +++ llvm/lib/VMCore/Constants.cpp Wed Oct 25 20:58:05 2006 @@ -1421,15 +1421,41 @@ Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) { #ifndef NDEBUG switch (Opcode) { - case Instruction::Add: case Instruction::Sub: - case Instruction::URem: case Instruction::SRem: case Instruction::FRem: - case Instruction::Mul: case Instruction::UDiv: - case Instruction::SDiv: case Instruction::FDiv: + case Instruction::Add: + case Instruction::Sub: + case Instruction::Mul: assert(C1->getType() == C2->getType() && "Op types should be identical!"); assert((C1->getType()->isInteger() || C1->getType()->isFloatingPoint() || isa<PackedType>(C1->getType())) && "Tried to create an arithmetic operation on a non-arithmetic type!"); break; + case Instruction::UDiv: + case Instruction::SDiv: + assert(C1->getType() == C2->getType() && "Op types should be identical!"); + assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) && + cast<PackedType>(C1->getType())->getElementType()->isInteger())) && + "Tried to create an arithmetic operation on a non-arithmetic type!"); + break; + case Instruction::FDiv: + assert(C1->getType() == C2->getType() && "Op types should be identical!"); + assert((C1->getType()->isFloatingPoint() || (isa<PackedType>(C1->getType()) + && cast<PackedType>(C1->getType())->getElementType()->isFloatingPoint())) + && "Tried to create an arithmetic operation on a non-arithmetic type!"); + break; + case Instruction::URem: + case Instruction::SRem: + assert(C1->getType() == C2->getType() && "Op types should be identical!"); + assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) && + cast<PackedType>(C1->getType())->getElementType()->isInteger())) && + "Tried to create an arithmetic operation on a non-arithmetic type!"); + break; + case Instruction::FRem: + assert(C1->getType() == C2->getType() && "Op types should be identical!"); + assert((C1->getType()->isFloatingPoint() || (isa<PackedType>(C1->getType()) + && cast<PackedType>(C1->getType())->getElementType()->isFloatingPoint())) + && "Tried to create an arithmetic operation on a non-arithmetic type!"); + break; + case Instruction::And: case Instruction::Or: case Instruction::Xor: Index: llvm/lib/VMCore/Instructions.cpp diff -u llvm/lib/VMCore/Instructions.cpp:1.42.2.6 llvm/lib/VMCore/Instructions.cpp:1.42.2.7 --- llvm/lib/VMCore/Instructions.cpp:1.42.2.6 Mon Oct 23 13:13:27 2006 +++ llvm/lib/VMCore/Instructions.cpp Wed Oct 25 20:58:05 2006 @@ -1022,14 +1022,43 @@ #ifndef NDEBUG switch (iType) { case Add: case Sub: - case URem: case SRem: case FRem: - case Mul: case UDiv: case SDiv: case FDiv: + case Mul: assert(getType() == LHS->getType() && "Arithmetic operation should return same type as operands!"); assert((getType()->isInteger() || getType()->isFloatingPoint() || isa<PackedType>(getType())) && "Tried to create an arithmetic operation on a non-arithmetic type!"); break; + case UDiv: + case SDiv: + assert(getType() == LHS->getType() && + "Arithmetic operation should return same type as operands!"); + assert((getType()->isInteger() || (isa<PackedType>(getType()) && + cast<PackedType>(getType())->getElementType()->isInteger())) && + "Incorrect operand type (not integer) for S/UDIV"); + break; + case FDiv: + assert(getType() == LHS->getType() && + "Arithmetic operation should return same type as operands!"); + assert((getType()->isFloatingPoint() || (isa<PackedType>(getType()) && + cast<PackedType>(getType())->getElementType()->isFloatingPoint())) + && "Incorrect operand type (not floating point) for FDIV"); + break; + case URem: + case SRem: + assert(getType() == LHS->getType() && + "Arithmetic operation should return same type as operands!"); + assert((getType()->isInteger() || (isa<PackedType>(getType()) && + cast<PackedType>(getType())->getElementType()->isInteger())) && + "Incorrect operand type (not integer) for S/UREM"); + break; + case FRem: + assert(getType() == LHS->getType() && + "Arithmetic operation should return same type as operands!"); + assert((getType()->isFloatingPoint() || (isa<PackedType>(getType()) && + cast<PackedType>(getType())->getElementType()->isFloatingPoint())) + && "Incorrect operand type (not floating point) for FREM"); + break; case And: case Or: case Xor: assert(getType() == LHS->getType() && _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits