Skip to content

Commit f23c4c6

Browse files
committed
[AMDGPU] Separate out real exp instructions by subtarget. NFC.
Differential Revision: https://reviews.llvm.org/D91247
1 parent 2b33ea6 commit f23c4c6

File tree

1 file changed

+61
-42
lines changed

1 file changed

+61
-42
lines changed

llvm/lib/Target/AMDGPU/EXPInstructions.td

Lines changed: 61 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,85 @@
1010
// EXP classes
1111
//===----------------------------------------------------------------------===//
1212

13-
class EXPCommon<dag outs, dag ins, string asm, list<dag> pattern> :
14-
InstSI<outs, ins, asm, pattern> {
13+
class EXPCommon<bit done, string asm = ""> : InstSI<
14+
(outs),
15+
(ins exp_tgt:$tgt,
16+
ExpSrc0:$src0, ExpSrc1:$src1, ExpSrc2:$src2, ExpSrc3:$src3,
17+
exp_vm:$vm, exp_compr:$compr, i32imm:$en),
18+
asm> {
1519
let EXP = 1;
1620
let EXP_CNT = 1;
17-
let mayLoad = 0; // Set to 1 if done bit is set.
21+
let mayLoad = done;
1822
let mayStore = 1;
1923
let UseNamedOperandTable = 1;
2024
let Uses = [EXEC];
2125
let SchedRW = [WriteExport];
26+
let DisableWQM = 1;
2227
}
2328

24-
class EXP_Helper<bit done> : EXPCommon<
25-
(outs),
26-
(ins exp_tgt:$tgt,
27-
ExpSrc0:$src0, ExpSrc1:$src1, ExpSrc2:$src2, ExpSrc3:$src3,
28-
exp_vm:$vm, exp_compr:$compr, i32imm:$en),
29-
"exp$tgt $src0, $src1, $src2, $src3"#!if(done, " done", "")#"$compr$vm", []> {
29+
class EXP_Pseudo<bit done> : EXPCommon<done>,
30+
SIMCInstr <NAME, SIEncodingFamily.NONE> {
31+
let isPseudo = 1;
32+
let isCodeGenOnly = 1;
33+
}
34+
35+
class EXP_Real<bit done, string pseudo, int subtarget>
36+
: EXPCommon<done, "exp$tgt $src0, $src1, $src2, $src3"#!if(done, " done", "")
37+
#"$compr$vm">,
38+
SIMCInstr <pseudo, subtarget> {
3039
let AsmMatchConverter = "cvtExp";
3140
}
3241

42+
//===----------------------------------------------------------------------===//
43+
// EXP Instructions
44+
//===----------------------------------------------------------------------===//
45+
3346
// Split EXP instruction into EXP and EXP_DONE so we can set
3447
// mayLoad for done=1.
35-
multiclass EXP_m<bit done> {
36-
let mayLoad = done, DisableWQM = 1 in {
37-
let isPseudo = 1, isCodeGenOnly = 1 in {
38-
def "" : EXP_Helper<done>,
39-
SIMCInstr <NAME, SIEncodingFamily.NONE>;
40-
}
41-
42-
let done = done in {
43-
def _si : EXP_Helper<done>,
44-
SIMCInstr <NAME, SIEncodingFamily.SI>,
45-
EXPe {
46-
let AssemblerPredicate = isGFX6GFX7;
47-
let DecoderNamespace = "GFX6GFX7";
48-
}
49-
50-
def _vi : EXP_Helper<done>,
51-
SIMCInstr <NAME, SIEncodingFamily.VI>,
52-
EXPe_vi {
53-
let AssemblerPredicate = isGFX8GFX9;
54-
let DecoderNamespace = "GFX8";
55-
}
56-
57-
def _gfx10 : EXP_Helper<done>,
58-
SIMCInstr <NAME, SIEncodingFamily.GFX10>,
59-
EXPe {
60-
let AssemblerPredicate = isGFX10Plus;
61-
let DecoderNamespace = "GFX10";
62-
}
63-
}
64-
}
48+
def EXP : EXP_Pseudo<0>;
49+
def EXP_DONE : EXP_Pseudo<1>;
50+
51+
//===----------------------------------------------------------------------===//
52+
// SI
53+
//===----------------------------------------------------------------------===//
54+
55+
class EXP_Real_si<bit _done, string pseudo>
56+
: EXP_Real<_done, pseudo, SIEncodingFamily.SI>, EXPe {
57+
let AssemblerPredicate = isGFX6GFX7;
58+
let DecoderNamespace = "GFX6GFX7";
59+
let done = _done;
6560
}
6661

62+
def EXP_si : EXP_Real_si<0, "EXP">;
63+
def EXP_DONE_si : EXP_Real_si<1, "EXP_DONE">;
64+
6765
//===----------------------------------------------------------------------===//
68-
// EXP Instructions
66+
// VI
67+
//===----------------------------------------------------------------------===//
68+
69+
class EXP_Real_vi<bit _done, string pseudo>
70+
: EXP_Real<_done, pseudo, SIEncodingFamily.VI>, EXPe_vi {
71+
let AssemblerPredicate = isGFX8GFX9;
72+
let DecoderNamespace = "GFX8";
73+
let done = _done;
74+
}
75+
76+
def EXP_vi : EXP_Real_vi<0, "EXP">;
77+
def EXP_DONE_vi : EXP_Real_vi<1, "EXP_DONE">;
78+
6979
//===----------------------------------------------------------------------===//
80+
// GFX10+
81+
//===----------------------------------------------------------------------===//
82+
83+
class EXP_Real_gfx10<bit _done, string pseudo>
84+
: EXP_Real<_done, pseudo, SIEncodingFamily.GFX10>, EXPe {
85+
let AssemblerPredicate = isGFX10Plus;
86+
let DecoderNamespace = "GFX10";
87+
let done = _done;
88+
}
7089

71-
defm EXP : EXP_m<0>;
72-
defm EXP_DONE : EXP_m<1>;
90+
def EXP_gfx10 : EXP_Real_gfx10<0, "EXP">;
91+
def EXP_DONE_gfx10 : EXP_Real_gfx10<1, "EXP_DONE">;
7392

7493
//===----------------------------------------------------------------------===//
7594
// EXP Patterns

0 commit comments

Comments
 (0)