summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-02-13 23:07:23 +0000
committerChris Lattner <sabre@nondot.org>2006-02-13 23:07:23 +0000
commit8b10ab3002413ba551bb0455dc278dbb4ad99842 (patch)
treea12aa6e4ba50cdedbb243bdea39fec68b335e1fb /llvm/lib/Transforms
parent8081f40b50c6edf75f5d2226856106e4a3213148 (diff)
downloadbcm5719-llvm-8b10ab3002413ba551bb0455dc278dbb4ad99842.tar.gz
bcm5719-llvm-8b10ab3002413ba551bb0455dc278dbb4ad99842.zip
Implement Instcombine/and.ll:test34
llvm-svn: 26155
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index d42e0bbdf91..3266ffdae31 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -2439,6 +2439,18 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
InsertNewInstBefore(Or, I);
return BinaryOperator::createNot(Or);
}
+
+ {
+ Value *A = 0, *B = 0;
+ ConstantInt *C1 = 0, *C2 = 0;
+ if (match(Op0, m_Or(m_Value(A), m_Value(B))))
+ if (A == Op1 || B == Op1) // (A | ?) & A --> A
+ return ReplaceInstUsesWith(I, Op1);
+ if (match(Op1, m_Or(m_Value(A), m_Value(B))))
+ if (A == Op0 || B == Op0) // A & (A | ?) --> A
+ return ReplaceInstUsesWith(I, Op0);
+ }
+
if (SetCondInst *RHS = dyn_cast<SetCondInst>(Op1)) {
// (setcc1 A, B) & (setcc2 A, B) --> (setcc3 A, B)
OpenPOWER on IntegriCloud