diff options
-rw-r--r-- | lib/VMCore/iOperators.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/lib/VMCore/iOperators.cpp b/lib/VMCore/iOperators.cpp index 20e60cf874..5aa9714eb9 100644 --- a/lib/VMCore/iOperators.cpp +++ b/lib/VMCore/iOperators.cpp @@ -133,21 +133,13 @@ const Value *BinaryOperator::getNotArgument(const BinaryOperator *Bop) { // order dependant (SetLT f.e.) the opcode is changed. // bool BinaryOperator::swapOperands() { - if (SetCondInst *SCI = dyn_cast<SetCondInst>(this)) { + if (isCommutative()) + ; // If the instruction is commutative, it is safe to swap the operands + else if (SetCondInst *SCI = dyn_cast<SetCondInst>(this)) iType = SCI->getSwappedCondition(); - std::swap(Operands[0], Operands[1]); - return false; - } + else + return true; // Can't commute operands - switch (getOpcode()) { - // Instructions that don't need opcode modification - case Add: case Mul: - case And: case Xor: - case Or: - // Error on the side of caution - default: - return true; - } std::swap(Operands[0], Operands[1]); return false; } |