summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-04-01 22:05:01 +0000
committerChris Lattner <sabre@nondot.org>2006-04-01 22:05:01 +0000
commit6cf4914fd4735a1eab97e3f53bba66e51c627c6c (patch)
tree10d179b173eaafec747945900fdeba6237c566f9 /llvm/lib/Transforms/Scalar/InstructionCombining.cpp
parent11739f7589679f85727d0a4a35da94f32f7d3d73 (diff)
downloadbcm5719-llvm-6cf4914fd4735a1eab97e3f53bba66e51c627c6c.tar.gz
bcm5719-llvm-6cf4914fd4735a1eab97e3f53bba66e51c627c6c.zip
Fix InstCombine/2006-04-01-InfLoop.ll
llvm-svn: 27330
Diffstat (limited to 'llvm/lib/Transforms/Scalar/InstructionCombining.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index ecdb62b9757..c5c2a5e3c57 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -3008,7 +3008,8 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
} else if (Op0I->getOpcode() == Instruction::And && Op0I->hasOneUse()) {
if (Op0I->getOperand(0) == Op1) // (A&B)^A -> (B&A)^A
Op0I->swapOperands();
- if (Op0I->getOperand(1) == Op1) { // (B&A)^A == ~B & A
+ if (Op0I->getOperand(1) == Op1 && // (B&A)^A == ~B & A
+ !isa<ConstantInt>(Op1)) { // Canonical form is (B&C)^C
Instruction *N = BinaryOperator::createNot(Op0I->getOperand(0), "tmp");
InsertNewInstBefore(N, I);
return BinaryOperator::createAnd(N, Op1);
OpenPOWER on IntegriCloud