diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-02-13 23:07:23 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-02-13 23:07:23 +0000 |
| commit | 8b10ab3002413ba551bb0455dc278dbb4ad99842 (patch) | |
| tree | a12aa6e4ba50cdedbb243bdea39fec68b335e1fb | |
| parent | 8081f40b50c6edf75f5d2226856106e4a3213148 (diff) | |
| download | llvm-8b10ab3002413ba551bb0455dc278dbb4ad99842.zip llvm-8b10ab3002413ba551bb0455dc278dbb4ad99842.tar.gz llvm-8b10ab3002413ba551bb0455dc278dbb4ad99842.tar.bz2 | |
Implement Instcombine/and.ll:test34
llvm-svn: 26155
| -rw-r--r-- | llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index d42e0bbd..3266ffd 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) |
