[PATCH] D46031: [DAGCombiner] Masked merge: if 'B' is constant, de-canonicalize the pattern (invert the mask).
Roman Lebedev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 2 12:01:29 PDT 2018
lebedev.ri added inline comments.
================
Comment at: test/CodeGen/AArch64/unfold-masked-merge-scalar-variablemask.ll:350-355
-; CHECK-NEXT: and w8, w0, w2
-; CHECK-NEXT: orn w0, w8, w2
+; CHECK-NEXT: mvn w8, w0
+; CHECK-NEXT: bic w8, w8, w2
+; CHECK-NEXT: orr w0, w8, w0
; CHECK-NEXT: ret
%n0 = xor i32 %x, -1 ; %x
%n1 = and i32 %n0, %mask
%r = xor i32 %n1, -1
----------------
spatel wrote:
> How does this happen? Isn't that a miscompile?
Hm, at first i thought it was indeed (https://reviews.llvm.org/D45733#1077183), but now i do not think so.
https://godbolt.org/g/L4hDjW
^ so neither of our outputs is fully optimized.
But if i manually transform that assembly to C, the end result tells me that DAGCombine/arm isel is simply missing some optimizations.
I could be wrong, of course.
Repository:
rL LLVM
https://reviews.llvm.org/D46031
More information about the llvm-commits
mailing list