Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.439 -> 1.440 --- Log message: Fold (A^B) == A -> B == 0 and (A-B) == A -> B == 0 --- Diffs of the changes: (+26 -0) InstructionCombining.cpp | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.439 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.440 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.439 Sun Feb 26 13:57:54 2006 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Sun Feb 26 19:44:11 2006 @@ -3876,6 +3876,32 @@ if (Instruction *R = visitSetCondInstWithCastAndCast(I)) return R; } + + if (I.getOpcode() == Instruction::SetNE || + I.getOpcode() == Instruction::SetEQ) { + Value *A, *B; + if (match(Op0, m_Xor(m_Value(A), m_Value(B))) && + (A == Op1 || B == Op1)) { + // (A^B) == A -> B == 0 + Value *OtherVal = A == Op1 ? B : A; + return BinaryOperator::create(I.getOpcode(), OtherVal, + Constant::getNullValue(A->getType())); + } else if (match(Op1, m_Xor(m_Value(A), m_Value(B))) && + (A == Op0 || B == Op0)) { + // A == (A^B) -> B == 0 + Value *OtherVal = A == Op0 ? B : A; + return BinaryOperator::create(I.getOpcode(), OtherVal, + Constant::getNullValue(A->getType())); + } else if (match(Op0, m_Sub(m_Value(A), m_Value(B))) && A == Op1) { + // (A-B) == A -> B == 0 + return BinaryOperator::create(I.getOpcode(), B, + Constant::getNullValue(B->getType())); + } else if (match(Op1, m_Sub(m_Value(A), m_Value(B))) && A == Op0) { + // A == (A-B) -> B == 0 + return BinaryOperator::create(I.getOpcode(), B, + Constant::getNullValue(B->getType())); + } + } return Changed ? &I : 0; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits