[AVX-512] Give priority to EVEX encoded scalar FMA instructions when we have FMA...
authorCraig Topper <craig.topper@gmail.com>
Fri, 17 Mar 2017 06:10:37 +0000 (06:10 +0000)
committerCraig Topper <craig.topper@gmail.com>
Fri, 17 Mar 2017 06:10:37 +0000 (06:10 +0000)
We were giving priority if VLX was enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298046 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrFMA.td
test/CodeGen/X86/fma.ll

index 4b19f801dae1d0d305b24a7c9828d792822d4bbc..1941ae57f0f1f5980eff828ca29ff0183fe8b7ca 100644 (file)
@@ -191,13 +191,15 @@ multiclass fma3s_rm_int<bits<8> opc, string OpcodeStr,
 multiclass fma3s_forms<bits<8> opc132, bits<8> opc213, bits<8> opc231,
                        string OpStr, string PackTy, string Suff,
                        SDNode OpNode, RegisterClass RC,
-                       X86MemOperand x86memop> {
-  defm NAME#132#Suff : fma3s_rm<opc132, !strconcat(OpStr, "132", PackTy),
-                                x86memop, RC>;
-  defm NAME#213#Suff : fma3s_rm<opc213, !strconcat(OpStr, "213", PackTy),
-                                x86memop, RC, OpNode>;
-  defm NAME#231#Suff : fma3s_rm<opc231, !strconcat(OpStr, "231", PackTy),
-                                x86memop, RC>;
+                       X86MemOperand x86memop> { 
+  let Predicates = [HasFMA, NoAVX512] in {
+    defm NAME#132#Suff : fma3s_rm<opc132, !strconcat(OpStr, "132", PackTy),
+                                  x86memop, RC>;
+    defm NAME#213#Suff : fma3s_rm<opc213, !strconcat(OpStr, "213", PackTy),
+                                  x86memop, RC, OpNode>;
+    defm NAME#231#Suff : fma3s_rm<opc231, !strconcat(OpStr, "231", PackTy),
+                                  x86memop, RC>;
+  }
 }
 
 // The FMA 213 form is created for lowering of scalar FMA intrinscis
index 8c50677b9353780582e292ee16bd91f05d54c16b..f5002c01846aa2081cfefbe2efee6e9177d6527f 100644 (file)
@@ -46,7 +46,7 @@ define float @test_f32(float %a, float %b, float %c) #0 {
 ;
 ; AVX51264-LABEL: test_f32:
 ; AVX51264:       ## BB#0: ## %entry
-; AVX51264-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0x71,0xa9,0xc2]
+; AVX51264-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa9,0xc2]
 ; AVX51264-NEXT:    retq ## encoding: [0xc3]
 entry:
   %call = call float @llvm.fma.f32(float %a, float %b, float %c)
@@ -91,7 +91,7 @@ define double @test_f64(double %a, double %b, double %c) #0 {
 ;
 ; AVX51264-LABEL: test_f64:
 ; AVX51264:       ## BB#0: ## %entry
-; AVX51264-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 ## encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]
+; AVX51264-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]
 ; AVX51264-NEXT:    retq ## encoding: [0xc3]
 entry:
   %call = call double @llvm.fma.f64(double %a, double %b, double %c)