mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-18 14:31:27 +00:00
Recognize 16-bit bswaps by relaxing overconstrained pattern.
This implements Transforms/InstCombine/bswap.ll:test[34]. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29087 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e5ff22e605
commit
6423d4c64a
@ -2976,9 +2976,12 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
|
||||
if (A == Op0 || B == Op0) // A | (A & ?) --> A
|
||||
return ReplaceInstUsesWith(I, Op0);
|
||||
|
||||
// (A | B) | C and A | (B | C) -> bswap if possible.
|
||||
// (A | B) | C and A | (B | C) -> bswap if possible.
|
||||
// (A >> B) | (C << D) and (A << B) | (B >> C) -> bswap if possible.
|
||||
if (match(Op0, m_Or(m_Value(), m_Value())) ||
|
||||
match(Op1, m_Or(m_Value(), m_Value()))) {
|
||||
match(Op1, m_Or(m_Value(), m_Value())) ||
|
||||
(match(Op0, m_Shift(m_Value(), m_Value())) &&
|
||||
match(Op1, m_Shift(m_Value(), m_Value())))) {
|
||||
if (Instruction *BSwap = MatchBSwap(I))
|
||||
return BSwap;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user