[llvm] r333822 - [X86] Add tied source operand to AVX5124FMAPS and AVX5124VNNIW instructions.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 2 09:30:39 PDT 2018


Author: ctopper
Date: Sat Jun  2 09:30:39 2018
New Revision: 333822

URL: http://llvm.org/viewvc/llvm-project?rev=333822&view=rev
Log:
[X86] Add tied source operand to AVX5124FMAPS and AVX5124VNNIW instructions.

This doesn't affect the assembly or disassembly, but is more accurate.

Modified:
    llvm/trunk/lib/Target/X86/X86InstrAVX512.td

Modified: llvm/trunk/lib/Target/X86/X86InstrAVX512.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrAVX512.td?rev=333822&r1=333821&r2=333822&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrAVX512.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrAVX512.td Sat Jun  2 09:30:39 2018
@@ -371,6 +371,17 @@ multiclass AVX512_maskable_in_asm<bits<8
                           OpcodeStr, AttSrcAsm, IntelSrcAsm, Pattern, [], [],
                           "$src0 = $dst">;
 
+multiclass AVX512_maskable_3src_in_asm<bits<8> O, Format F, X86VectorVTInfo _,
+                                       dag Outs, dag NonTiedIns,
+                                       string OpcodeStr,
+                                       string AttSrcAsm, string IntelSrcAsm,
+                                       list<dag> Pattern> :
+   AVX512_maskable_custom<O, F, Outs,
+                          !con((ins _.RC:$src1), NonTiedIns),
+                          !con((ins _.RC:$src1, _.KRCWM:$mask), NonTiedIns),
+                          !con((ins _.RC:$src1, _.KRCWM:$mask), NonTiedIns),
+                          OpcodeStr, AttSrcAsm, IntelSrcAsm, Pattern, [], [],
+                          "">;
 
 // Instruction with mask that puts result in mask register,
 // like "compare" and "vptest"
@@ -11302,25 +11313,26 @@ defm VGF2P8AFFINEQB    : GF2P8AFFINE_avx
 // AVX5124FMAPS
 //===----------------------------------------------------------------------===//
 
-let hasSideEffects = 0, mayLoad = 1, ExeDomain = SSEPackedSingle in {
-defm V4FMADDPSrm : AVX512_maskable_in_asm<0x9A, MRMSrcMem, v16f32_info,
-                    (outs VR512:$dst), (ins VR512:$src1, f128mem:$src2),
-                    "v4fmaddps", "$src2, $src1", "$src1, $src2",
+let hasSideEffects = 0, mayLoad = 1, ExeDomain = SSEPackedSingle,
+    Constraints = "$src1 = $dst" in {
+defm V4FMADDPSrm : AVX512_maskable_3src_in_asm<0x9A, MRMSrcMem, v16f32_info,
+                    (outs VR512:$dst), (ins VR512:$src2, f128mem:$src3),
+                    "v4fmaddps", "$src3, $src2", "$src2, $src3",
                     []>, EVEX_V512, EVEX_4V, T8XD, EVEX_CD8<32, CD8VQ>;
 
-defm V4FNMADDPSrm : AVX512_maskable_in_asm<0xAA, MRMSrcMem, v16f32_info,
-                     (outs VR512:$dst), (ins VR512:$src1, f128mem:$src2),
-                     "v4fnmaddps", "$src2, $src1", "$src1, $src2",
+defm V4FNMADDPSrm : AVX512_maskable_3src_in_asm<0xAA, MRMSrcMem, v16f32_info,
+                     (outs VR512:$dst), (ins VR512:$src2, f128mem:$src3),
+                     "v4fnmaddps", "$src3, $src2", "$src2, $src3",
                      []>, EVEX_V512, EVEX_4V, T8XD, EVEX_CD8<32, CD8VQ>;
 
-defm V4FMADDSSrm : AVX512_maskable_in_asm<0x9B, MRMSrcMem, f32x_info,
-                    (outs VR128X:$dst), (ins VR128X:$src1, f128mem:$src2),
-                    "v4fmaddss", "$src2, $src1", "$src1, $src2",
+defm V4FMADDSSrm : AVX512_maskable_3src_in_asm<0x9B, MRMSrcMem, f32x_info,
+                    (outs VR128X:$dst), (ins  VR128X:$src2, f128mem:$src3),
+                    "v4fmaddss", "$src3, $src2", "$src2, $src3",
                     []>, EVEX_V128, EVEX_4V, T8XD, EVEX_CD8<32, CD8VF>;
 
-defm V4FNMADDSSrm : AVX512_maskable_in_asm<0xAB, MRMSrcMem, f32x_info,
-                     (outs VR128X:$dst), (ins VR128X:$src1, f128mem:$src2),
-                     "v4fnmaddss", "$src2, $src1", "$src1, $src2",
+defm V4FNMADDSSrm : AVX512_maskable_3src_in_asm<0xAB, MRMSrcMem, f32x_info,
+                     (outs VR128X:$dst), (ins VR128X:$src2, f128mem:$src3),
+                     "v4fnmaddss", "$src3, $src2", "$src2, $src3",
                      []>, EVEX_V128, EVEX_4V, T8XD, EVEX_CD8<32, CD8VF>;
 }
 
@@ -11328,15 +11340,16 @@ defm V4FNMADDSSrm : AVX512_maskable_in_a
 // AVX5124VNNIW
 //===----------------------------------------------------------------------===//
 
-let hasSideEffects = 0, mayLoad = 1, ExeDomain = SSEPackedInt in {
-defm VP4DPWSSDrm : AVX512_maskable_in_asm<0x52, MRMSrcMem, v16i32_info,
-                    (outs VR512:$dst), (ins VR512:$src1, f128mem:$src2),
-                     "vp4dpwssd", "$src2, $src1", "$src1, $src2",
+let hasSideEffects = 0, mayLoad = 1, ExeDomain = SSEPackedInt,
+    Constraints = "$src1 = $dst" in {
+defm VP4DPWSSDrm : AVX512_maskable_3src_in_asm<0x52, MRMSrcMem, v16i32_info,
+                    (outs VR512:$dst), (ins VR512:$src2, f128mem:$src3),
+                     "vp4dpwssd", "$src3, $src2", "$src2, $src3",
                     []>, EVEX_V512, EVEX_4V, T8XD, EVEX_CD8<32, CD8VQ>;
 
-defm VP4DPWSSDSrm : AVX512_maskable_in_asm<0x53, MRMSrcMem, v16i32_info,
-                     (outs VR512:$dst), (ins VR512:$src1, f128mem:$src2),
-                     "vp4dpwssds", "$src2, $src1", "$src1, $src2",
+defm VP4DPWSSDSrm : AVX512_maskable_3src_in_asm<0x53, MRMSrcMem, v16i32_info,
+                     (outs VR512:$dst), (ins VR512:$src2, f128mem:$src3),
+                     "vp4dpwssds", "$src3, $src2", "$src2, $src3",
                      []>, EVEX_V512, EVEX_4V, T8XD, EVEX_CD8<32, CD8VQ>;
 }
 




More information about the llvm-commits mailing list