diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-01 11:05:42 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-01 11:05:42 +0000 |
commit | fc0c26f1a68ae03096cdb820a6524d8703d2fd6c (patch) | |
tree | 8de2faed21f5a3fe2472a30cd90ec14017de2e19 /llvm/lib | |
parent | d4c58400c5499fdd6d49ad366d18c8cfc3abd228 (diff) | |
download | llvm-fc0c26f1a68ae03096cdb820a6524d8703d2fd6c.zip llvm-fc0c26f1a68ae03096cdb820a6524d8703d2fd6c.tar.gz llvm-fc0c26f1a68ae03096cdb820a6524d8703d2fd6c.tar.bz2 |
[X86] Tag PSLLDQ/PSRLDQ as WriteShuffle scheduler classes instead of shifts.
Although they are encoded similar to bit shifts, the byte shifts behave like shuffles from a scheduling point of view.
llvm-svn: 331253
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 24 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 16 | ||||
-rwxr-xr-x | llvm/lib/Target/X86/X86SchedBroadwell.td | 4 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedHaswell.td | 4 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeClient.td | 4 | ||||
-rwxr-xr-x | llvm/lib/Target/X86/X86SchedSkylakeServer.td | 12 |
6 files changed, 25 insertions, 39 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 73dc780..e13258d 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -10044,6 +10044,7 @@ defm VSHUFPD: avx512_shufp<"vshufpd", avx512vl_i64_info, avx512vl_f64_info>, PD, // AVX-512 - Byte shift Left/Right //===----------------------------------------------------------------------===// +// FIXME: The SSE/AVX names are PSLLDQri etc. - should we add the i here as well? multiclass avx512_shift_packed<bits<8> opc, SDNode OpNode, Format MRMr, Format MRMm, string OpcodeStr, X86FoldableSchedWrite sched, X86VectorVTInfo _>{ @@ -10063,24 +10064,23 @@ multiclass avx512_shift_packed<bits<8> opc, SDNode OpNode, Format MRMr, multiclass avx512_shift_packed_all<bits<8> opc, SDNode OpNode, Format MRMr, Format MRMm, string OpcodeStr, - X86FoldableSchedWrite sched, Predicate prd>{ + X86SchedWriteWidths sched, Predicate prd>{ let Predicates = [prd] in - defm Z : avx512_shift_packed<opc, OpNode, MRMr, MRMm, - OpcodeStr, sched, v64i8_info>, EVEX_V512; + defm Z : avx512_shift_packed<opc, OpNode, MRMr, MRMm, OpcodeStr, + sched.ZMM, v64i8_info>, EVEX_V512; let Predicates = [prd, HasVLX] in { - defm Z256 : avx512_shift_packed<opc, OpNode, MRMr, MRMm, - OpcodeStr, sched, v32i8x_info>, EVEX_V256; - defm Z128 : avx512_shift_packed<opc, OpNode, MRMr, MRMm, - OpcodeStr, sched, v16i8x_info>, EVEX_V128; + defm Z256 : avx512_shift_packed<opc, OpNode, MRMr, MRMm, OpcodeStr, + sched.YMM, v32i8x_info>, EVEX_V256; + defm Z128 : avx512_shift_packed<opc, OpNode, MRMr, MRMm, OpcodeStr, + sched.XMM, v16i8x_info>, EVEX_V128; } } defm VPSLLDQ : avx512_shift_packed_all<0x73, X86vshldq, MRM7r, MRM7m, "vpslldq", - WriteVecShift, HasBWI>, AVX512PDIi8Base, - EVEX_4V, VEX_WIG; + SchedWriteShuffle, HasBWI>, + AVX512PDIi8Base, EVEX_4V, VEX_WIG; defm VPSRLDQ : avx512_shift_packed_all<0x73, X86vshrdq, MRM3r, MRM3m, "vpsrldq", - WriteVecShift, HasBWI>, AVX512PDIi8Base, - EVEX_4V, VEX_WIG; - + SchedWriteShuffle, HasBWI>, + AVX512PDIi8Base, EVEX_4V, VEX_WIG; multiclass avx512_psadbw_packed<bits<8> opc, SDNode OpNode, string OpcodeStr, X86FoldableSchedWrite sched, diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 8da995c..e99f806 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -3446,16 +3446,17 @@ multiclass PDI_binop_ri<bits<8> opc, Format ImmForm, string OpcodeStr, } multiclass PDI_binop_ri_all<bits<8> opc, Format ImmForm, string OpcodeStr, - SDNode OpNode, X86FoldableSchedWrite sched> { + SDNode OpNode, X86SchedWriteWidths sched> { let Predicates = [HasAVX, NoVLX_Or_NoBWI] in defm V#NAME : PDI_binop_ri<opc, ImmForm, !strconcat("v", OpcodeStr), OpNode, - VR128, v16i8, sched, 0>, VEX_4V, VEX_WIG; + VR128, v16i8, sched.XMM, 0>, VEX_4V, VEX_WIG; let Predicates = [HasAVX2, NoVLX_Or_NoBWI] in defm V#NAME#Y : PDI_binop_ri<opc, ImmForm, !strconcat("v", OpcodeStr), OpNode, - VR256, v32i8, sched, 0>, + VR256, v32i8, sched.YMM, 0>, VEX_4V, VEX_L, VEX_WIG; let Constraints = "$src1 = $dst" in - defm NAME : PDI_binop_ri<opc, ImmForm, OpcodeStr, OpNode, VR128, v16i8, sched>; + defm NAME : PDI_binop_ri<opc, ImmForm, OpcodeStr, OpNode, VR128, v16i8, + sched.XMM>; } let ExeDomain = SSEPackedInt in { @@ -3481,9 +3482,10 @@ let ExeDomain = SSEPackedInt in { defm PSRAD : PDI_binop_rmi_all<0xE2, 0x72, MRM4r, "psrad", X86vsra, X86vsrai, v4i32, v8i32, v4i32, WriteVecShift, NoVLX>; - defm PSLLDQ : PDI_binop_ri_all<0x73, MRM7r, "pslldq", X86vshldq, WriteVecShift>; - defm PSRLDQ : PDI_binop_ri_all<0x73, MRM3r, "psrldq", X86vshrdq, WriteVecShift>; - // PSRADQri doesn't exist in SSE[1-3]. + defm PSLLDQ : PDI_binop_ri_all<0x73, MRM7r, "pslldq", X86vshldq, + SchedWriteShuffle>; + defm PSRLDQ : PDI_binop_ri_all<0x73, MRM3r, "psrldq", X86vshrdq, + SchedWriteShuffle>; } // ExeDomain = SSEPackedInt //===---------------------------------------------------------------------===// diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index b9664ee..25a49cb 100755 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -386,9 +386,7 @@ def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr", "MMX_MOVD64to64rr", "MMX_MOVQ2DQrr", "(V?)MOV64toPQIrr", - "(V?)MOVDI2PDIrr", - "(V?)PSLLDQ(Y?)ri", - "(V?)PSRLDQ(Y?)ri")>; + "(V?)MOVDI2PDIrr")>; def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> { let Latency = 1; diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index 8682f2e0..d9b7be0 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -723,9 +723,7 @@ def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr", "MMX_MOVD64to64rr", "MMX_MOVQ2DQrr", "(V?)MOV64toPQIrr", - "(V?)MOVDI2PDIrr", - "(V?)PSLLDQ(Y?)ri", - "(V?)PSRLDQ(Y?)ri")>; + "(V?)MOVDI2PDIrr")>; def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> { let Latency = 1; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index b1a4714..5e02e43 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -397,9 +397,7 @@ def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r", "UCOM_FPr", "UCOM_Fr", "(V?)MOV64toPQIrr", - "(V?)MOVDI2PDIrr", - "(V?)PSLLDQ(Y?)ri", - "(V?)PSRLDQ(Y?)ri")>; + "(V?)MOVDI2PDIrr")>; def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> { let Latency = 1; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index 95b6776..a9693bf 100755 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -445,17 +445,7 @@ def: InstRW<[SKXWriteResGroup3], (instregex "COMP_FST0r", "VMOV64toPQIZrr", "VMOV64toPQIrr", "VMOVDI2PDIZrr", - "VMOVDI2PDIrr", - "VPSLLDQYri", - "VPSLLDQZ128rr", - "VPSLLDQZ256rr", - "VPSLLDQZrr", - "(V?)PSLLDQri", - "VPSRLDQYri", - "VPSRLDQZ128rr", - "VPSRLDQZ256rr", - "VPSRLDQZrr", - "(V?)PSRLDQri")>; + "VMOVDI2PDIrr")>; def SKXWriteResGroup4 : SchedWriteRes<[SKXPort6]> { let Latency = 1; |