diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index 5ddf2843540..1350f05b9b1 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -25,9 +25,7 @@ void Instruction::init() Instruction::Instruction(const Type *ty, unsigned it, const std::string &Name, Instruction *InsertBefore) - : User(ty, Value::InstructionVal, Name), - Parent(0), - iType(it) { + : User(ty, Value::InstructionVal + it, Name), Parent(0) { init(); // If requested, insert this instruction into a basic block... @@ -40,9 +38,7 @@ Instruction::Instruction(const Type *ty, unsigned it, const std::string &Name, Instruction::Instruction(const Type *ty, unsigned it, const std::string &Name, BasicBlock *InsertAtEnd) - : User(ty, Value::InstructionVal, Name), - Parent(0), - iType(it) { + : User(ty, Value::InstructionVal + it, Name), Parent(0) { init(); // append this instruction into the basic block @@ -50,6 +46,10 @@ Instruction::Instruction(const Type *ty, unsigned it, const std::string &Name, InsertAtEnd->getInstList().push_back(this); } +void Instruction::setOpcode(unsigned opc) { + setValueType(Value::InstructionVal + opc); +} + void Instruction::setParent(BasicBlock *P) { if (getParent()) { if (!P) LeakDetector::addGarbageObject(this); diff --git a/lib/VMCore/iOperators.cpp b/lib/VMCore/iOperators.cpp index afbeb9707cb..c33d7973914 100644 --- a/lib/VMCore/iOperators.cpp +++ b/lib/VMCore/iOperators.cpp @@ -173,7 +173,8 @@ bool BinaryOperator::swapOperands() { if (isCommutative()) ; // If the instruction is commutative, it is safe to swap the operands else if (SetCondInst *SCI = dyn_cast(this)) - iType = SCI->getSwappedCondition(); + /// FIXME: SetCC instructions shouldn't all have different opcodes. + setOpcode(SCI->getSwappedCondition()); else return true; // Can't commute operands