[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