diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-12-05 20:47:11 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-12-05 20:47:11 +0000 |
| commit | b69dae42e32fe51cbfb3c6bf64688a13b48f0682 (patch) | |
| tree | 336bf39499d9da32cbba7aff7f4e895796d14559 /llvm/lib | |
| parent | b3974ffda08aeeb783d38fb67bba9031eb19af2b (diff) | |
| download | bcm5719-llvm-b69dae42e32fe51cbfb3c6bf64688a13b48f0682.tar.gz bcm5719-llvm-b69dae42e32fe51cbfb3c6bf64688a13b48f0682.zip | |
[X86][AVX512] Tag GATHER/SCATTER instruction scheduler classes
NOTE: At the moment these use the WriteLoad/WriteStore classes, which severely underestimates the costs. This needs to be reviewed.
llvm-svn: 319829
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 10 |
2 files changed, 11 insertions, 7 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 447ef54c4c9..4cba5a656bb 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -8482,6 +8482,7 @@ defm : AVX512_pmovx_patterns<"VPMOVZX", X86vzext, zext_invec, loadi16_anyext>; //===----------------------------------------------------------------------===// // GATHER - SCATTER Operations +// FIXME: Improve scheduling of gather/scatter instructions. multiclass avx512_gather<bits<8> opc, string OpcodeStr, X86VectorVTInfo _, X86MemOperand memop, PatFrag GatherNode, RegisterClass MaskRC = _.KRCWM> { @@ -8494,7 +8495,7 @@ multiclass avx512_gather<bits<8> opc, string OpcodeStr, X86VectorVTInfo _, [(set _.RC:$dst, MaskRC:$mask_wb, (GatherNode (_.VT _.RC:$src1), MaskRC:$mask, vectoraddr:$src2))]>, EVEX, EVEX_K, - EVEX_CD8<_.EltSize, CD8VT1>; + EVEX_CD8<_.EltSize, CD8VT1>, Sched<[WriteLoad]>; } multiclass avx512_gather_q_pd<bits<8> dopc, bits<8> qopc, @@ -8552,7 +8553,8 @@ let mayStore = 1, Constraints = "$mask = $mask_wb", ExeDomain = _.ExeDomain in "\t{$src, ${dst} {${mask}}|${dst} {${mask}}, $src}"), [(set _.KRCWM:$mask_wb, (ScatterNode (_.VT _.RC:$src), _.KRCWM:$mask, vectoraddr:$dst))]>, - EVEX, EVEX_K, EVEX_CD8<_.EltSize, CD8VT1>; + EVEX, EVEX_K, EVEX_CD8<_.EltSize, CD8VT1>, + Sched<[WriteStore]>; } multiclass avx512_scatter_q_pd<bits<8> dopc, bits<8> qopc, @@ -8603,7 +8605,7 @@ multiclass avx512_gather_scatter_prefetch<bits<8> opc, Format F, string OpcodeSt let Predicates = [HasPFI], hasSideEffects = 1 in def m : AVX5128I<opc, F, (outs), (ins KRC:$mask, memop:$src), !strconcat(OpcodeStr, "\t{$src {${mask}}|{${mask}}, $src}"), - []>, EVEX, EVEX_K; + [], IIC_SSE_PREFETCH>, EVEX, EVEX_K, Sched<[WriteLoad]>; } defm VGATHERPF0DPS: avx512_gather_scatter_prefetch<0xC6, MRM1m, "vgatherpf0dps", diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 6504c2b9c8b..d3a61f7b0e1 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -8442,10 +8442,10 @@ let Predicates = [HasAVX2, NoVLX] in { (VPSRAVDYrm VR256:$src1, addr:$src2)>; } - - //===----------------------------------------------------------------------===// // VGATHER - GATHER Operations + +// FIXME: Improve scheduling of gather instructions. multiclass avx2_gather<bits<8> opc, string OpcodeStr, ValueType VTx, ValueType VTy, PatFrag GatherNode128, PatFrag GatherNode256, RegisterClass RC256, @@ -8457,14 +8457,16 @@ multiclass avx2_gather<bits<8> opc, string OpcodeStr, ValueType VTx, "\t{$mask, $src2, $dst|$dst, $src2, $mask}"), [(set (VTx VR128:$dst), (MTx VR128:$mask_wb), (GatherNode128 VR128:$src1, VR128:$mask, - vectoraddr:$src2))]>, VEX; + vectoraddr:$src2))]>, + VEX, Sched<[WriteLoad]>; def Yrm : AVX28I<opc, MRMSrcMem4VOp3, (outs RC256:$dst, RC256:$mask_wb), (ins RC256:$src1, memop256:$src2, RC256:$mask), !strconcat(OpcodeStr, "\t{$mask, $src2, $dst|$dst, $src2, $mask}"), [(set (VTy RC256:$dst), (MTy RC256:$mask_wb), (GatherNode256 RC256:$src1, RC256:$mask, - vectoraddr:$src2))]>, VEX, VEX_L; + vectoraddr:$src2))]>, + VEX, VEX_L, Sched<[WriteLoad]>; } let Predicates = [UseAVX2] in { |

