forked from OSchip/llvm-project
[X86][AVX512] Tag VPERMILV instruction scheduler class
llvm-svn: 319316
This commit is contained in:
parent
2b6338b2bc
commit
1401a75341
|
@ -5595,21 +5595,23 @@ defm VPERMPD : avx512_vpermi_dq_sizes<0x01, MRMSrcReg, MRMSrcMem, "vpermpd",
|
|||
// AVX-512 - VPERMIL
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
multiclass avx512_permil_vec<bits<8> OpcVar, string OpcodeStr, SDNode OpNode,
|
||||
X86VectorVTInfo _, X86VectorVTInfo Ctrl> {
|
||||
multiclass avx512_permil_vec<bits<8> OpcVar, string OpcodeStr, SDNode OpNode,
|
||||
OpndItins itins, X86VectorVTInfo _,
|
||||
X86VectorVTInfo Ctrl> {
|
||||
defm rr: AVX512_maskable<OpcVar, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, Ctrl.RC:$src2), OpcodeStr,
|
||||
"$src2, $src1", "$src1, $src2",
|
||||
(_.VT (OpNode _.RC:$src1,
|
||||
(Ctrl.VT Ctrl.RC:$src2)))>,
|
||||
T8PD, EVEX_4V;
|
||||
(Ctrl.VT Ctrl.RC:$src2))), itins.rr>,
|
||||
T8PD, EVEX_4V, Sched<[itins.Sched]>;
|
||||
defm rm: AVX512_maskable<OpcVar, MRMSrcMem, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, Ctrl.MemOp:$src2), OpcodeStr,
|
||||
"$src2, $src1", "$src1, $src2",
|
||||
(_.VT (OpNode
|
||||
_.RC:$src1,
|
||||
(Ctrl.VT (bitconvert(Ctrl.LdFrag addr:$src2)))))>,
|
||||
T8PD, EVEX_4V, EVEX_CD8<_.EltSize, CD8VF>;
|
||||
(Ctrl.VT (bitconvert(Ctrl.LdFrag addr:$src2))))),
|
||||
itins.rm>, T8PD, EVEX_4V, EVEX_CD8<_.EltSize, CD8VF>,
|
||||
Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
defm rmb: AVX512_maskable<OpcVar, MRMSrcMem, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
|
||||
"${src2}"##_.BroadcastStr##", $src1",
|
||||
|
@ -5617,28 +5619,29 @@ multiclass avx512_permil_vec<bits<8> OpcVar, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT (OpNode
|
||||
_.RC:$src1,
|
||||
(Ctrl.VT (X86VBroadcast
|
||||
(Ctrl.ScalarLdFrag addr:$src2)))))>,
|
||||
T8PD, EVEX_4V, EVEX_B, EVEX_CD8<_.EltSize, CD8VF>;
|
||||
(Ctrl.ScalarLdFrag addr:$src2))))),
|
||||
itins.rm>, T8PD, EVEX_4V, EVEX_B, EVEX_CD8<_.EltSize, CD8VF>,
|
||||
Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
}
|
||||
|
||||
multiclass avx512_permil_vec_common<string OpcodeStr, bits<8> OpcVar,
|
||||
AVX512VLVectorVTInfo _, AVX512VLVectorVTInfo Ctrl>{
|
||||
OpndItins itins, AVX512VLVectorVTInfo _,
|
||||
AVX512VLVectorVTInfo Ctrl> {
|
||||
let Predicates = [HasAVX512] in {
|
||||
defm Z : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info512,
|
||||
Ctrl.info512>, EVEX_V512;
|
||||
defm Z : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, itins,
|
||||
_.info512, Ctrl.info512>, EVEX_V512;
|
||||
}
|
||||
let Predicates = [HasAVX512, HasVLX] in {
|
||||
defm Z128 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info128,
|
||||
Ctrl.info128>, EVEX_V128;
|
||||
defm Z256 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info256,
|
||||
Ctrl.info256>, EVEX_V256;
|
||||
defm Z128 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, itins,
|
||||
_.info128, Ctrl.info128>, EVEX_V128;
|
||||
defm Z256 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, itins,
|
||||
_.info256, Ctrl.info256>, EVEX_V256;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass avx512_permil<string OpcodeStr, bits<8> OpcImm, bits<8> OpcVar,
|
||||
AVX512VLVectorVTInfo _, AVX512VLVectorVTInfo Ctrl>{
|
||||
|
||||
defm NAME: avx512_permil_vec_common<OpcodeStr, OpcVar, _, Ctrl>;
|
||||
defm NAME: avx512_permil_vec_common<OpcodeStr, OpcVar, AVX_VPERMILV, _, Ctrl>;
|
||||
defm NAME: avx512_shift_rmi_sizes<OpcImm, MRMSrcReg, MRMSrcMem, OpcodeStr,
|
||||
X86VPermilpi, _>,
|
||||
EVEX, AVX512AIi8Base, EVEX_CD8<_.info128.EltSize, CD8VF>;
|
||||
|
@ -5650,6 +5653,7 @@ defm VPERMILPS : avx512_permil<"vpermilps", 0x04, 0x0C, avx512vl_f32_info,
|
|||
let ExeDomain = SSEPackedDouble in
|
||||
defm VPERMILPD : avx512_permil<"vpermilpd", 0x05, 0x0D, avx512vl_f64_info,
|
||||
avx512vl_i64_info>, VEX_W;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AVX-512 - VPSHUFD, VPSHUFLW, VPSHUFHW
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -7612,6 +7612,17 @@ defm VMASKMOVPD : avx_movmask_rm<0x2D, 0x2F, "vmaskmovpd",
|
|||
//===----------------------------------------------------------------------===//
|
||||
// VPERMIL - Permute Single and Double Floating-Point Values
|
||||
//
|
||||
|
||||
let Sched = WriteFShuffle in
|
||||
def AVX_VPERMILV : OpndItins<
|
||||
IIC_SSE_SHUFP, IIC_SSE_SHUFP
|
||||
>;
|
||||
|
||||
let Sched = WriteFShuffle in
|
||||
def AVX_VPERMIL : OpndItins<
|
||||
IIC_SSE_SHUFP, IIC_SSE_SHUFP
|
||||
>;
|
||||
|
||||
multiclass avx_permil<bits<8> opc_rm, bits<8> opc_rmi, string OpcodeStr,
|
||||
RegisterClass RC, X86MemOperand x86memop_f,
|
||||
X86MemOperand x86memop_i, PatFrag i_frag,
|
||||
|
|
Loading…
Reference in New Issue