mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[X86][AVX512] Tag scalar insert/extract instruction scheduler classes
Classes don't look great but match what we're doing on SSE/AVX llvm-svn: 319920
This commit is contained in:
parent
0e9a7f17fe
commit
62c23721c3
@ -778,14 +778,15 @@ let ExeDomain = SSEPackedSingle in {
|
||||
def VINSERTPSZrr : AVX512AIi8<0x21, MRMSrcReg, (outs VR128X:$dst),
|
||||
(ins VR128X:$src1, VR128X:$src2, u8imm:$src3),
|
||||
"vinsertps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set VR128X:$dst, (X86insertps VR128X:$src1, VR128X:$src2, imm:$src3))]>,
|
||||
EVEX_4V;
|
||||
[(set VR128X:$dst, (X86insertps VR128X:$src1, VR128X:$src2, imm:$src3))],
|
||||
IIC_SSE_INSERTPS_RR>, EVEX_4V, Sched<[WriteFShuffle]>;
|
||||
def VINSERTPSZrm: AVX512AIi8<0x21, MRMSrcMem, (outs VR128X:$dst),
|
||||
(ins VR128X:$src1, f32mem:$src2, u8imm:$src3),
|
||||
"vinsertps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set VR128X:$dst, (X86insertps VR128X:$src1,
|
||||
(v4f32 (scalar_to_vector (loadf32 addr:$src2))),
|
||||
imm:$src3))]>, EVEX_4V, EVEX_CD8<32, CD8VT1>;
|
||||
imm:$src3))], IIC_SSE_INSERTPS_RM>, EVEX_4V,
|
||||
EVEX_CD8<32, CD8VT1>, Sched<[WriteFShuffleLd, ReadAfterLd]>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -1115,14 +1116,15 @@ defm : vextract_for_mask_cast<"VEXTRACTI64x4Z", v64i8_info, v32i8x_info,
|
||||
def VEXTRACTPSZrr : AVX512AIi8<0x17, MRMDestReg, (outs GR32:$dst),
|
||||
(ins VR128X:$src1, u8imm:$src2),
|
||||
"vextractps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set GR32:$dst, (extractelt (bc_v4i32 (v4f32 VR128X:$src1)), imm:$src2))]>,
|
||||
EVEX, VEX_WIG;
|
||||
[(set GR32:$dst, (extractelt (bc_v4i32 (v4f32 VR128X:$src1)), imm:$src2))],
|
||||
IIC_SSE_EXTRACTPS_RR>, EVEX, VEX_WIG, Sched<[WriteFShuffle]>;
|
||||
|
||||
def VEXTRACTPSZmr : AVX512AIi8<0x17, MRMDestMem, (outs),
|
||||
(ins f32mem:$dst, VR128X:$src1, u8imm:$src2),
|
||||
"vextractps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(store (extractelt (bc_v4i32 (v4f32 VR128X:$src1)), imm:$src2),
|
||||
addr:$dst)]>, EVEX, VEX_WIG, EVEX_CD8<32, CD8VT1>;
|
||||
addr:$dst)], IIC_SSE_EXTRACTPS_RM>,
|
||||
EVEX, VEX_WIG, EVEX_CD8<32, CD8VT1>, Sched<[WriteFShuffleLd]>;
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
// AVX-512 BROADCAST
|
||||
@ -9756,7 +9758,7 @@ multiclass avx512_extract_elt_bw_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(store (_.EltVT (trunc (OpNode (_.VT _.RC:$src1), imm:$src2))),
|
||||
addr:$dst)]>,
|
||||
EVEX, EVEX_CD8<_.EltSize, CD8VT1>;
|
||||
EVEX, EVEX_CD8<_.EltSize, CD8VT1>, Sched<[WriteShuffleLd]>;
|
||||
}
|
||||
|
||||
multiclass avx512_extract_elt_b<string OpcodeStr, X86VectorVTInfo _> {
|
||||
@ -9766,7 +9768,7 @@ multiclass avx512_extract_elt_b<string OpcodeStr, X86VectorVTInfo _> {
|
||||
OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set GR32orGR64:$dst,
|
||||
(X86pextrb (_.VT _.RC:$src1), imm:$src2))]>,
|
||||
EVEX, TAPD;
|
||||
EVEX, TAPD, Sched<[WriteShuffle]>;
|
||||
|
||||
defm NAME : avx512_extract_elt_bw_m<0x14, OpcodeStr, X86pextrb, _>, TAPD;
|
||||
}
|
||||
@ -9778,14 +9780,15 @@ multiclass avx512_extract_elt_w<string OpcodeStr, X86VectorVTInfo _> {
|
||||
(ins _.RC:$src1, u8imm:$src2),
|
||||
OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set GR32orGR64:$dst,
|
||||
(X86pextrw (_.VT _.RC:$src1), imm:$src2))]>,
|
||||
EVEX, PD;
|
||||
(X86pextrw (_.VT _.RC:$src1), imm:$src2))],
|
||||
IIC_SSE_PEXTRW>, EVEX, PD, Sched<[WriteShuffle]>;
|
||||
|
||||
let hasSideEffects = 0 in
|
||||
def rr_REV : AVX512Ii8<0x15, MRMDestReg, (outs GR32orGR64:$dst),
|
||||
(ins _.RC:$src1, u8imm:$src2),
|
||||
OpcodeStr#".s\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>,
|
||||
EVEX, TAPD, FoldGenData<NAME#rr>;
|
||||
OpcodeStr#".s\t{$src2, $src1, $dst|$dst, $src1, $src2}", [],
|
||||
IIC_SSE_PEXTRW>, EVEX, TAPD, FoldGenData<NAME#rr>,
|
||||
Sched<[WriteShuffle]>;
|
||||
|
||||
defm NAME : avx512_extract_elt_bw_m<0x15, OpcodeStr, X86pextrw, _>, TAPD;
|
||||
}
|
||||
@ -9799,14 +9802,15 @@ multiclass avx512_extract_elt_dq<string OpcodeStr, X86VectorVTInfo _,
|
||||
OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set GRC:$dst,
|
||||
(extractelt (_.VT _.RC:$src1), imm:$src2))]>,
|
||||
EVEX, TAPD;
|
||||
EVEX, TAPD, Sched<[WriteShuffle]>;
|
||||
|
||||
def mr : AVX512Ii8<0x16, MRMDestMem, (outs),
|
||||
(ins _.ScalarMemOp:$dst, _.RC:$src1, u8imm:$src2),
|
||||
OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(store (extractelt (_.VT _.RC:$src1),
|
||||
imm:$src2),addr:$dst)]>,
|
||||
EVEX, EVEX_CD8<_.EltSize, CD8VT1>, TAPD;
|
||||
EVEX, EVEX_CD8<_.EltSize, CD8VT1>, TAPD,
|
||||
Sched<[WriteShuffleLd]>;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9822,7 +9826,7 @@ multiclass avx512_insert_elt_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set _.RC:$dst,
|
||||
(_.VT (OpNode _.RC:$src1, (LdFrag addr:$src2), imm:$src3)))]>,
|
||||
EVEX_4V, EVEX_CD8<_.EltSize, CD8VT1>;
|
||||
EVEX_4V, EVEX_CD8<_.EltSize, CD8VT1>, Sched<[WriteShuffleLd, ReadAfterLd]>;
|
||||
}
|
||||
|
||||
multiclass avx512_insert_elt_bw<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
@ -9832,7 +9836,8 @@ multiclass avx512_insert_elt_bw<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
(ins _.RC:$src1, GR32orGR64:$src2, u8imm:$src3),
|
||||
OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set _.RC:$dst,
|
||||
(OpNode _.RC:$src1, GR32orGR64:$src2, imm:$src3))]>, EVEX_4V;
|
||||
(OpNode _.RC:$src1, GR32orGR64:$src2, imm:$src3))]>, EVEX_4V,
|
||||
Sched<[WriteShuffle]>;
|
||||
|
||||
defm NAME : avx512_insert_elt_m<opc, OpcodeStr, OpNode, _, LdFrag>;
|
||||
}
|
||||
@ -9846,7 +9851,7 @@ multiclass avx512_insert_elt_dq<bits<8> opc, string OpcodeStr,
|
||||
OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set _.RC:$dst,
|
||||
(_.VT (insertelt _.RC:$src1, GRC:$src2, imm:$src3)))]>,
|
||||
EVEX_4V, TAPD;
|
||||
EVEX_4V, TAPD, Sched<[WriteShuffle]>;
|
||||
|
||||
defm NAME : avx512_insert_elt_m<opc, OpcodeStr, insertelt, _,
|
||||
_.ScalarLdFrag>, TAPD;
|
||||
|
Loading…
Reference in New Issue
Block a user