[llvm] [X86] Remove single-use checks when combining xor and vfmulc/vcfmulc. (PR #128910)
Phoebe Wang via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 27 19:13:09 PST 2025
================
@@ -83,6 +83,26 @@ entry:
ret <32 x half> %3
}
+define dso_local <32 x half> @test6(<16 x i32> %a) local_unnamed_addr #0 {
+; CHECK-LABEL: test6:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: vbroadcastss {{.*#+}} zmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]
+; CHECK-NEXT: vxorps %xmm3, %xmm3, %xmm3
+; CHECK-NEXT: vfcmulcph %zmm0, %zmm3, %zmm1
+; CHECK-NEXT: vfcmaddcph %zmm0, %zmm2, %zmm1
+; CHECK-NEXT: vmovaps %zmm1, %zmm0
+; CHECK-NEXT: retq
+entry:
+ %0 = xor <16 x i32> %a, splat (i32 -2147483648)
+ %1 = bitcast <16 x i32> %0 to <16 x float>
+ %2 = tail call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> splat (float 1.000000e+00), <16 x float> %1, <16 x float> zeroinitializer, i16 -1, i32 4)
+ %3 = bitcast <16 x float> %2 to <32 x half>
+ %4 = tail call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> zeroinitializer, <16 x float> %1, <16 x float> zeroinitializer, i16 -1, i32 4)
----------------
phoebewang wrote:
Does this code only show multi-use of `RHS`? We should either add a test for `XOR.hasOneUse()`, or leave it as is.
https://github.com/llvm/llvm-project/pull/128910
More information about the llvm-commits
mailing list