[llvm] r333463 - [X86] Rename the operands in the recently introduced MOVSS+FMA patterns so that the operand names in the output pattern are always in 1, 2, 3 order since those are the operand names in the instruction.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Tue May 29 13:46:26 PDT 2018


Author: ctopper
Date: Tue May 29 13:46:26 2018
New Revision: 333463

URL: http://llvm.org/viewvc/llvm-project?rev=333463&view=rev
Log:
[X86] Rename the operands in the recently introduced MOVSS+FMA patterns so that the operand names in the output pattern are always in 1, 2, 3 order since those are the operand names in the instruction.

The order should be controlled in the input pattern.

Modified:
    llvm/trunk/lib/Target/X86/X86InstrAVX512.td
    llvm/trunk/lib/Target/X86/X86InstrFMA.td
    llvm/trunk/test/CodeGen/X86/fma-scalar-combine.ll

Modified: llvm/trunk/lib/Target/X86/X86InstrAVX512.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrAVX512.td?rev=333463&r1=333462&r2=333463&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrAVX512.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrAVX512.td Tue May 29 13:46:26 2018
@@ -6699,40 +6699,40 @@ defm VFNMSUB : avx512_fma3s<0xAF, 0xBF,
 
 multiclass avx512_scalar_fma_patterns<SDNode Op, string Prefix, string Suffix, SDNode Move,
                                       ValueType VT, ValueType EltVT, PatLeaf ZeroFP> {
-  let Predicates = [HasFMA, HasAVX512] in {
-    def : Pat<(VT (Move (VT VR128:$src2), (VT (scalar_to_vector
-                (Op (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+  let Predicates = [HasAVX512] in {
+    def : Pat<(VT (Move (VT VR128:$src1), (VT (scalar_to_vector
+                (Op (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
                     (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))))))),
               (!cast<I>(Prefix#"213"#Suffix#"Zr_Int")
-               VR128:$src2, VR128:$src1, VR128:$src3)>;
+               VR128:$src1, VR128:$src2, VR128:$src3)>;
 
-    def : Pat<(VT (Move (VT VR128:$src2), (VT (scalar_to_vector
+    def : Pat<(VT (Move (VT VR128:$src1), (VT (scalar_to_vector
                (X86selects VK1WM:$mask,
-                (Op (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                (Op (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
                     (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))),
-                (EltVT (extractelt (VT VR128:$src2), (iPTR 0)))))))),
+                (EltVT (extractelt (VT VR128:$src1), (iPTR 0)))))))),
               (!cast<I>(Prefix#"213"#Suffix#"Zr_Intk")
-               VR128:$src2, VK1WM:$mask, VR128:$src1, VR128:$src3)>;
+               VR128:$src1, VK1WM:$mask, VR128:$src2, VR128:$src3)>;
 
-    def : Pat<(VT (Move (VT VR128:$src3), (VT (scalar_to_vector
+    def : Pat<(VT (Move (VT VR128:$src1), (VT (scalar_to_vector
                (X86selects VK1WM:$mask,
-                (Op (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))),
-                (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))))))),
+                (Op (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src3), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src1), (iPTR 0)))),
+                (EltVT (extractelt (VT VR128:$src1), (iPTR 0)))))))),
               (!cast<I>(Prefix#"231"#Suffix#"Zr_Intk")
-               VR128:$src3, VK1WM:$mask, VR128:$src2, VR128:$src1)>;
+               VR128:$src1, VK1WM:$mask, VR128:$src2, VR128:$src3)>;
 
-    def : Pat<(VT (Move (VT VR128:$src2), (VT (scalar_to_vector
+    def : Pat<(VT (Move (VT VR128:$src1), (VT (scalar_to_vector
                (X86selects VK1WM:$mask,
-                (Op (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                (Op (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
                     (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))),
                 (EltVT ZeroFP)))))),
               (!cast<I>(Prefix#"213"#Suffix#"Zr_Intkz")
-               VR128:$src2, VK1WM:$mask, VR128:$src1, VR128:$src3)>;
+               VR128:$src1, VK1WM:$mask, VR128:$src2, VR128:$src3)>;
   }
 }
 

Modified: llvm/trunk/lib/Target/X86/X86InstrFMA.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrFMA.td?rev=333463&r1=333462&r2=333463&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrFMA.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrFMA.td Tue May 29 13:46:26 2018
@@ -367,12 +367,12 @@ defm VFNMSUB : fma3s<0x9F, 0xAF, 0xBF, "
 multiclass scalar_fma_patterns<SDNode Op, string Prefix, string Suffix, SDNode Move,
                                ValueType VT, ValueType EltVT> {
   let Predicates = [HasFMA, NoAVX512] in {
-    def : Pat<(VT (Move (VT VR128:$src2), (VT (scalar_to_vector
-                (Op (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
-                    (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+    def : Pat<(VT (Move (VT VR128:$src1), (VT (scalar_to_vector
+                (Op (EltVT (extractelt (VT VR128:$src2), (iPTR 0))),
+                    (EltVT (extractelt (VT VR128:$src1), (iPTR 0))),
                     (EltVT (extractelt (VT VR128:$src3), (iPTR 0)))))))),
               (!cast<I>(Prefix#"213"#Suffix#"r_Int")
-               VR128:$src2, VR128:$src1, VR128:$src3)>;
+               VR128:$src1, VR128:$src2, VR128:$src3)>;
   }
 }
 

Modified: llvm/trunk/test/CodeGen/X86/fma-scalar-combine.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fma-scalar-combine.ll?rev=333463&r1=333462&r2=333463&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/fma-scalar-combine.ll (original)
+++ llvm/trunk/test/CodeGen/X86/fma-scalar-combine.ll Tue May 29 13:46:26 2018
@@ -93,8 +93,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fmadd_32:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfmadd231ss %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb9,0xd1]
-; CHECK-NEXT:    # xmm2 = (xmm0 * xmm1) + xmm2
+; CHECK-NEXT:    vfmadd231ss %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xb9,0xd0]
+; CHECK-NEXT:    # xmm2 = (xmm1 * xmm0) + xmm2
 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -118,8 +118,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fmadd_64:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfmadd231sd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb9,0xd1]
-; CHECK-NEXT:    # xmm2 = (xmm0 * xmm1) + xmm2
+; CHECK-NEXT:    vfmadd231sd %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xb9,0xd0]
+; CHECK-NEXT:    # xmm2 = (xmm1 * xmm0) + xmm2
 ; CHECK-NEXT:    vmovapd %xmm2, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -227,8 +227,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fmsub_32:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfmsub231ss %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbb,0xd1]
-; CHECK-NEXT:    # xmm2 = (xmm0 * xmm1) - xmm2
+; CHECK-NEXT:    vfmsub231ss %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xbb,0xd0]
+; CHECK-NEXT:    # xmm2 = (xmm1 * xmm0) - xmm2
 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -252,8 +252,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fmsub_64:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfmsub231sd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbb,0xd1]
-; CHECK-NEXT:    # xmm2 = (xmm0 * xmm1) - xmm2
+; CHECK-NEXT:    vfmsub231sd %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xbb,0xd0]
+; CHECK-NEXT:    # xmm2 = (xmm1 * xmm0) - xmm2
 ; CHECK-NEXT:    vmovapd %xmm2, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -361,8 +361,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fnmadd_32:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfnmadd231ss %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbd,0xd1]
-; CHECK-NEXT:    # xmm2 = -(xmm0 * xmm1) + xmm2
+; CHECK-NEXT:    vfnmadd231ss %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xbd,0xd0]
+; CHECK-NEXT:    # xmm2 = -(xmm1 * xmm0) + xmm2
 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -386,8 +386,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fnmadd_64:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfnmadd231sd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbd,0xd1]
-; CHECK-NEXT:    # xmm2 = -(xmm0 * xmm1) + xmm2
+; CHECK-NEXT:    vfnmadd231sd %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xbd,0xd0]
+; CHECK-NEXT:    # xmm2 = -(xmm1 * xmm0) + xmm2
 ; CHECK-NEXT:    vmovapd %xmm2, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -499,8 +499,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fnmsub_32:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfnmsub231ss %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbf,0xd1]
-; CHECK-NEXT:    # xmm2 = -(xmm0 * xmm1) - xmm2
+; CHECK-NEXT:    vfnmsub231ss %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xbf,0xd0]
+; CHECK-NEXT:    # xmm2 = -(xmm1 * xmm0) - xmm2
 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -525,8 +525,8 @@ define <2 x double> @combine_scalar_mask
 ; CHECK-LABEL: combine_scalar_mask3_fnmsub_64:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]
-; CHECK-NEXT:    vfnmsub231sd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbf,0xd1]
-; CHECK-NEXT:    # xmm2 = -(xmm0 * xmm1) - xmm2
+; CHECK-NEXT:    vfnmsub231sd %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xbf,0xd0]
+; CHECK-NEXT:    # xmm2 = -(xmm1 * xmm0) - xmm2
 ; CHECK-NEXT:    vmovapd %xmm2, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc2]
 ; CHECK-NEXT:    retq # encoding: [0xc3]
 entry:




More information about the llvm-commits mailing list