summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/CodeGen/X86/avx2-fma-fneg-combine.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx2-fma-fneg-combine.ll b/llvm/test/CodeGen/X86/avx2-fma-fneg-combine.ll
index df1248b725d..9ebc3b8941b 100644
--- a/llvm/test/CodeGen/X86/avx2-fma-fneg-combine.ll
+++ b/llvm/test/CodeGen/X86/avx2-fma-fneg-combine.ll
@@ -115,3 +115,31 @@ entry:
declare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c)
+define <8 x float> @test7(float %a, <8 x float> %b, <8 x float> %c) {
+; X32-LABEL: test7:
+; X32: # %bb.0: # %entry
+; X32-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
+; X32-NEXT: vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
+; X32-NEXT: vsubps %ymm2, %ymm3, %ymm2
+; X32-NEXT: vbroadcastss %xmm2, %ymm2
+; X32-NEXT: vfmadd213ps {{.*#+}} ymm0 = (ymm2 * ymm0) + ymm1
+; X32-NEXT: retl
+;
+; X64-LABEL: test7:
+; X64: # %bb.0: # %entry
+; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
+; X64-NEXT: vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
+; X64-NEXT: vsubps %ymm0, %ymm3, %ymm0
+; X64-NEXT: vbroadcastss %xmm0, %ymm0
+; X64-NEXT: vfmadd213ps {{.*#+}} ymm0 = (ymm1 * ymm0) + ymm2
+; X64-NEXT: retq
+entry:
+ %0 = insertelement <8 x float> undef, float %a, i32 0
+ %1 = fsub <8 x float> <float -0.000000e+00, float undef, float undef, float undef, float undef, float undef, float undef, float undef>, %0
+ %2 = shufflevector <8 x float> %1, <8 x float> undef, <8 x i32> zeroinitializer
+ %3 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %2, <8 x float> %b, <8 x float> %c)
+ ret <8 x float> %3
+
+}
+
+declare <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c)
OpenPOWER on IntegriCloud