[PATCH] D24419: [InstCombine] use commutative matchers for patterns with commutative operators
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 19 11:04:44 PDT 2016
spatel added inline comments.
Comment at: lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:2350
+ if (match(Op1, m_c_Xor(m_Not(m_Value(A)), m_Value(B))) &&
+ match(Op0, m_c_And(m_Specific(A), m_Specific(B))))
return BinaryOperator::CreateXor(Builder->CreateNot(A), B);
> This isn't actually equivalent to four separate checks in the case where both operands of the xor are "not" operations. I guess that doesn't really matter much in practice for this particular case, but we need a better approach in general.
Is it possible to have both operands 'notted'? We should always be able to fold:
%negx = xor i32 %x, -1
%negy = xor i32 %y, -1
%xor = xor i32 %negx, %negy
xor i32 %x, %y
before we reach here?
More information about the llvm-commits