[instCombine] Add (A ^ B) | ~(A | B) -> ~(A & B)
define i32 @src(i32 %x, i32 %y) {
%0:
%xor = xor i32 %y, %x
%or = or i32 %y, %x
%neg = xor i32 %or, 4294967295
%or1 = or i32 %xor, %neg
ret i32 %or1
}
=>
define i32 @tgt(i32 %x, i32 %y) {
%0:
%and = and i32 %x, %y
%neg = xor i32 %and, 4294967295
ret i32 %neg
}
Transformation seems to be correct!
https://alive2.llvm.org/ce/z/Cvca4a
parent
bb9ebf6b
Please register or sign in to comment