diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-08-14 06:41:38 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-08-14 06:41:38 +0000 |
commit | f1eda235142ed071e219bd231310e44cda08f932 (patch) | |
tree | 18d68826c03ecf73de3d016c4c43e1dfad60965c /llvm/lib/Transforms | |
parent | ad2986efcefe21e5e8f1f3e4a2974c9989b9bb87 (diff) | |
download | bcm5719-llvm-f1eda235142ed071e219bd231310e44cda08f932.tar.gz bcm5719-llvm-f1eda235142ed071e219bd231310e44cda08f932.zip |
Added InstCombine Transform for ((B | C) & A) | B -> B | (A & C)
Transform ((B | C) & A) | B --> B | (A & C)
Z3 Link: http://rise4fun.com/Z3/hP6p
Patch by Sonam Kumari!
Differential Revision: http://reviews.llvm.org/D4865
llvm-svn: 215619
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index b83d3c64150..64708c4d4f7 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -2124,6 +2124,10 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) { if (Op0->hasOneUse() || cast<BinaryOperator>(Op0)->hasOneUse()) return BinaryOperator::CreateOr(Op1, C); + // ((B | C) & A) | B -> B | (A & C) + if (match(Op0, m_And(m_Or(m_Specific(Op1), m_Value(C)), m_Value(A)))) + return BinaryOperator::CreateOr(Op1, Builder->CreateAnd(A, C)); + // (X >> Z) | (Y >> Z) -> (X|Y) >> Z for all shifts. if (BinaryOperator *SI1 = dyn_cast<BinaryOperator>(Op1)) { if (BinaryOperator *SI0 = dyn_cast<BinaryOperator>(Op0)) |