forked from OSchip/llvm-project
[X86][AVX512] Tag VFIXUPIMM instructions scheduler classes
llvm-svn: 319757
This commit is contained in:
parent
b5b91cd402
commit
54b8aa2bb2
|
@ -10089,7 +10089,7 @@ defm VPTERNLOGQ : avx512_common_ternlog<"vpternlogq", SSE_INTALU_ITINS_P,
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
multiclass avx512_fixupimm_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
X86VectorVTInfo _>{
|
||||
OpndItins itins, X86VectorVTInfo _>{
|
||||
let Constraints = "$src1 = $dst", ExeDomain = _.ExeDomain in {
|
||||
defm rri : AVX512_maskable_3src<opc, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.RC:$src3, i32u8imm:$src4),
|
||||
|
@ -10098,7 +10098,7 @@ multiclass avx512_fixupimm_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT _.RC:$src2),
|
||||
(_.IntVT _.RC:$src3),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_CURRENT))>;
|
||||
(i32 FROUND_CURRENT)), itins.rr>, Sched<[itins.Sched]>;
|
||||
defm rmi : AVX512_maskable_3src<opc, MRMSrcMem, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.MemOp:$src3, i32u8imm:$src4),
|
||||
OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",
|
||||
|
@ -10106,7 +10106,8 @@ multiclass avx512_fixupimm_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT _.RC:$src2),
|
||||
(_.IntVT (bitconvert (_.LdFrag addr:$src3))),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_CURRENT))>;
|
||||
(i32 FROUND_CURRENT)), itins.rm>,
|
||||
Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
defm rmbi : AVX512_maskable_3src<opc, MRMSrcMem, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.ScalarMemOp:$src3, i32u8imm:$src4),
|
||||
OpcodeStr##_.Suffix, "$src4, ${src3}"##_.BroadcastStr##", $src2",
|
||||
|
@ -10115,12 +10116,14 @@ multiclass avx512_fixupimm_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT _.RC:$src2),
|
||||
(_.IntVT (X86VBroadcast(_.ScalarLdFrag addr:$src3))),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_CURRENT))>, EVEX_B;
|
||||
(i32 FROUND_CURRENT)), itins.rm>,
|
||||
EVEX_B, Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
} // Constraints = "$src1 = $dst"
|
||||
}
|
||||
|
||||
multiclass avx512_fixupimm_packed_sae<bits<8> opc, string OpcodeStr,
|
||||
SDNode OpNode, X86VectorVTInfo _>{
|
||||
SDNode OpNode, OpndItins itins,
|
||||
X86VectorVTInfo _>{
|
||||
let Constraints = "$src1 = $dst", ExeDomain = _.ExeDomain in {
|
||||
defm rrib : AVX512_maskable_3src<opc, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.RC:$src3, i32u8imm:$src4),
|
||||
|
@ -10130,12 +10133,14 @@ let Constraints = "$src1 = $dst", ExeDomain = _.ExeDomain in {
|
|||
(_.VT _.RC:$src2),
|
||||
(_.IntVT _.RC:$src3),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_NO_EXC))>, EVEX_B;
|
||||
(i32 FROUND_NO_EXC)), itins.rr>,
|
||||
EVEX_B, Sched<[itins.Sched]>;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass avx512_fixupimm_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
X86VectorVTInfo _, X86VectorVTInfo _src3VT> {
|
||||
OpndItins itins, X86VectorVTInfo _,
|
||||
X86VectorVTInfo _src3VT> {
|
||||
let Constraints = "$src1 = $dst" , Predicates = [HasAVX512],
|
||||
ExeDomain = _.ExeDomain in {
|
||||
defm rri : AVX512_maskable_3src_scalar<opc, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
|
@ -10145,8 +10150,7 @@ multiclass avx512_fixupimm_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT _.RC:$src2),
|
||||
(_src3VT.VT _src3VT.RC:$src3),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_CURRENT))>;
|
||||
|
||||
(i32 FROUND_CURRENT)), itins.rr>, Sched<[itins.Sched]>;
|
||||
defm rrib : AVX512_maskable_3src_scalar<opc, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.RC:$src3, i32u8imm:$src4),
|
||||
OpcodeStr##_.Suffix, "$src4, {sae}, $src3, $src2",
|
||||
|
@ -10155,7 +10159,8 @@ multiclass avx512_fixupimm_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_.VT _.RC:$src2),
|
||||
(_src3VT.VT _src3VT.RC:$src3),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_NO_EXC))>, EVEX_B;
|
||||
(i32 FROUND_NO_EXC)), itins.rm>,
|
||||
EVEX_B, Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
defm rmi : AVX512_maskable_3src_scalar<opc, MRMSrcMem, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src2, _.ScalarMemOp:$src3, i32u8imm:$src4),
|
||||
OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",
|
||||
|
@ -10164,32 +10169,34 @@ multiclass avx512_fixupimm_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
|||
(_src3VT.VT (scalar_to_vector
|
||||
(_src3VT.ScalarLdFrag addr:$src3))),
|
||||
(i32 imm:$src4),
|
||||
(i32 FROUND_CURRENT))>;
|
||||
(i32 FROUND_CURRENT)), itins.rm>,
|
||||
Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass avx512_fixupimm_packed_all<AVX512VLVectorVTInfo _Vec>{
|
||||
multiclass avx512_fixupimm_packed_all<OpndItins itins, AVX512VLVectorVTInfo _Vec> {
|
||||
let Predicates = [HasAVX512] in
|
||||
defm Z : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, _Vec.info512>,
|
||||
avx512_fixupimm_packed_sae<0x54, "vfixupimm", X86VFixupimm, _Vec.info512>,
|
||||
AVX512AIi8Base, EVEX_4V, EVEX_V512;
|
||||
defm Z : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, itins,
|
||||
_Vec.info512>,
|
||||
avx512_fixupimm_packed_sae<0x54, "vfixupimm", X86VFixupimm, itins,
|
||||
_Vec.info512>, AVX512AIi8Base, EVEX_4V, EVEX_V512;
|
||||
let Predicates = [HasAVX512, HasVLX] in {
|
||||
defm Z128 : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, _Vec.info128>,
|
||||
AVX512AIi8Base, EVEX_4V, EVEX_V128;
|
||||
defm Z256 : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, _Vec.info256>,
|
||||
AVX512AIi8Base, EVEX_4V, EVEX_V256;
|
||||
defm Z128 : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, itins,
|
||||
_Vec.info128>, AVX512AIi8Base, EVEX_4V, EVEX_V128;
|
||||
defm Z256 : avx512_fixupimm_packed<0x54, "vfixupimm", X86VFixupimm, itins,
|
||||
_Vec.info256>, AVX512AIi8Base, EVEX_4V, EVEX_V256;
|
||||
}
|
||||
}
|
||||
|
||||
defm VFIXUPIMMSS : avx512_fixupimm_scalar<0x55, "vfixupimm", X86VFixupimmScalar,
|
||||
f32x_info, v4i32x_info>,
|
||||
SSE_ALU_F32S, f32x_info, v4i32x_info>,
|
||||
AVX512AIi8Base, VEX_LIG, EVEX_4V, EVEX_CD8<32, CD8VT1>;
|
||||
defm VFIXUPIMMSD : avx512_fixupimm_scalar<0x55, "vfixupimm", X86VFixupimmScalar,
|
||||
f64x_info, v2i64x_info>,
|
||||
SSE_ALU_F64S, f64x_info, v2i64x_info>,
|
||||
AVX512AIi8Base, VEX_LIG, EVEX_4V, EVEX_CD8<64, CD8VT1>, VEX_W;
|
||||
defm VFIXUPIMMPS : avx512_fixupimm_packed_all<avx512vl_f32_info>,
|
||||
defm VFIXUPIMMPS : avx512_fixupimm_packed_all<SSE_ALU_F32P, avx512vl_f32_info>,
|
||||
EVEX_CD8<32, CD8VF>;
|
||||
defm VFIXUPIMMPD : avx512_fixupimm_packed_all<avx512vl_f64_info>,
|
||||
defm VFIXUPIMMPD : avx512_fixupimm_packed_all<SSE_ALU_F64P, avx512vl_f64_info>,
|
||||
EVEX_CD8<64, CD8VF>, VEX_W;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue