@@ -102,21 +102,19 @@ def SGPR_IMM_Offset : OffsetMode<1, 1, "_SGPR_IMM",
102
102
(ins SReg_32:$soffset, smem_offset_mod:$offset),
103
103
"$soffset$offset">;
104
104
105
- class SM_Probe_Pseudo <string opName, string variant, RegisterClass baseClass,
106
- dag offsets, string asmOffsets,
107
- bit hasOffset, bit hasSOffset>
105
+ class SM_Probe_Pseudo <string opName, RegisterClass baseClass, OffsetMode offsets>
108
106
: SM_Pseudo<opName, (outs),
109
- !con((ins i8imm:$sdata, baseClass:$sbase), offsets),
110
- " $sdata, $sbase, " # asmOffsets > {
107
+ !con((ins i8imm:$sdata, baseClass:$sbase), offsets.Ins ),
108
+ " $sdata, $sbase, " # offsets.Asm > {
111
109
let mayLoad = 0;
112
110
let mayStore = 0;
113
111
let has_glc = 0;
114
112
let LGKM_CNT = 0;
115
113
let ScalarStore = 0;
116
114
let hasSideEffects = 1;
117
- let has_offset = hasOffset ;
118
- let has_soffset = hasSOffset ;
119
- let PseudoInstr = opName # variant ;
115
+ let has_offset = offsets.HasOffset ;
116
+ let has_soffset = offsets.HasSOffset ;
117
+ let PseudoInstr = opName # offsets.Variant ;
120
118
}
121
119
122
120
class SM_Load_Pseudo <string opName, RegisterClass baseClass,
@@ -135,30 +133,34 @@ class SM_Load_Pseudo <string opName, RegisterClass baseClass,
135
133
}
136
134
137
135
class SM_Store_Pseudo <string opName, RegisterClass baseClass,
138
- RegisterClass srcClass, dag ins, string asmOps>
139
- : SM_Pseudo<opName, (outs), ins, asmOps, []> {
136
+ RegisterClass srcClass, OffsetMode offsets>
137
+ : SM_Pseudo<opName, (outs), !con((ins srcClass:$sdata, baseClass:$sbase),
138
+ offsets.Ins, (ins CPol:$cpol)),
139
+ " $sdata, $sbase, " # offsets.Asm # "$cpol"> {
140
140
RegisterClass BaseClass = baseClass;
141
141
RegisterClass SrcClass = srcClass;
142
142
let mayLoad = 0;
143
143
let mayStore = 1;
144
144
let has_glc = 1;
145
145
let has_dlc = 1;
146
+ let has_offset = offsets.HasOffset;
147
+ let has_soffset = offsets.HasSOffset;
146
148
let ScalarStore = 1;
149
+ let PseudoInstr = opName # offsets.Variant;
147
150
}
148
151
149
- class SM_Discard_Pseudo <string opName, string variant, dag offsets,
150
- string asmOffsets, bit hasOffset, bit hasSOffset>
151
- : SM_Pseudo<opName, (outs), !con((ins SReg_64:$sbase), offsets),
152
- " $sbase, " # asmOffsets> {
152
+ class SM_Discard_Pseudo <string opName, OffsetMode offsets>
153
+ : SM_Pseudo<opName, (outs), !con((ins SReg_64:$sbase), offsets.Ins),
154
+ " $sbase, " # offsets.Asm> {
153
155
let mayLoad = 0;
154
156
let mayStore = 0;
155
157
let has_glc = 0;
156
158
let has_sdst = 0;
157
159
let ScalarStore = 0;
158
160
let hasSideEffects = 1;
159
- let has_offset = hasOffset ;
160
- let has_soffset = hasSOffset ;
161
- let PseudoInstr = opName # variant ;
161
+ let has_offset = offsets.HasOffset ;
162
+ let has_soffset = offsets.HasSOffset ;
163
+ let PseudoInstr = opName # offsets.Variant ;
162
164
}
163
165
164
166
multiclass SM_Pseudo_Loads<string opName,
@@ -172,37 +174,15 @@ multiclass SM_Pseudo_Loads<string opName,
172
174
multiclass SM_Pseudo_Stores<string opName,
173
175
RegisterClass baseClass,
174
176
RegisterClass srcClass> {
175
- def _IMM : SM_Store_Pseudo <opName, baseClass, srcClass,
176
- (ins srcClass:$sdata, baseClass:$sbase, i32imm:$offset, CPol:$cpol),
177
- " $sdata, $sbase, $offset$cpol"> {
178
- let has_offset = 1;
179
- let PseudoInstr = opName # "_IMM";
180
- }
181
-
182
- def _SGPR : SM_Store_Pseudo <opName, baseClass, srcClass,
183
- (ins srcClass:$sdata, baseClass:$sbase, SReg_32:$soffset, CPol:$cpol),
184
- " $sdata, $sbase, $soffset$cpol"> {
185
- let has_soffset = 1;
186
- let PseudoInstr = opName # "_SGPR";
187
- }
188
-
189
- def _SGPR_IMM : SM_Store_Pseudo <opName, baseClass, srcClass,
190
- (ins srcClass:$sdata, baseClass:$sbase, SReg_32:$soffset, i32imm:$offset,
191
- CPol:$cpol),
192
- " $sdata, $sbase, $soffset$offset$cpol"> {
193
- let has_offset = 1;
194
- let has_soffset = 1;
195
- let PseudoInstr = opName # "_SGPR_IMM";
196
- }
177
+ def _IMM : SM_Store_Pseudo <opName, baseClass, srcClass, IMM_Offset>;
178
+ def _SGPR : SM_Store_Pseudo <opName, baseClass, srcClass, SGPR_Offset>;
179
+ def _SGPR_IMM : SM_Store_Pseudo <opName, baseClass, srcClass, SGPR_IMM_Offset>;
197
180
}
198
181
199
182
multiclass SM_Pseudo_Discards<string opName> {
200
- def _IMM : SM_Discard_Pseudo <opName, "_IMM",
201
- (ins smem_offset:$offset), "$offset", 1, 0>;
202
- def _SGPR : SM_Discard_Pseudo <opName, "_SGPR",
203
- (ins SReg_32:$soffset), "$soffset", 0, 1>;
204
- def _SGPR_IMM : SM_Discard_Pseudo <opName, "_SGPR_IMM",
205
- (ins SReg_32:$soffset, smem_offset_mod:$offset), "$soffset$offset", 1, 1>;
183
+ def _IMM : SM_Discard_Pseudo <opName, IMM_Offset>;
184
+ def _SGPR : SM_Discard_Pseudo <opName, SGPR_Offset>;
185
+ def _SGPR_IMM : SM_Discard_Pseudo <opName, SGPR_IMM_Offset>;
206
186
}
207
187
208
188
class SM_Time_Pseudo<string opName, SDPatternOperator node = null_frag> : SM_Pseudo<
@@ -225,12 +205,9 @@ class SM_Inval_Pseudo <string opName, SDPatternOperator node = null_frag> : SM_P
225
205
}
226
206
227
207
multiclass SM_Pseudo_Probe<string opName, RegisterClass baseClass> {
228
- def _IMM : SM_Probe_Pseudo <opName, "_IMM", baseClass,
229
- (ins smem_offset:$offset), "$offset", 1, 0>;
230
- def _SGPR : SM_Probe_Pseudo <opName, "_SGPR", baseClass,
231
- (ins SReg_32:$soffset), "$soffset", 0, 1>;
232
- def _SGPR_IMM : SM_Probe_Pseudo <opName, "_SGPR_IMM", baseClass,
233
- (ins SReg_32:$soffset, smem_offset_mod:$offset), "$soffset$offset", 1, 1>;
208
+ def _IMM : SM_Probe_Pseudo <opName, baseClass, IMM_Offset>;
209
+ def _SGPR : SM_Probe_Pseudo <opName, baseClass, SGPR_Offset>;
210
+ def _SGPR_IMM : SM_Probe_Pseudo <opName, baseClass, SGPR_IMM_Offset>;
234
211
}
235
212
236
213
class SM_WaveId_Pseudo<string opName, SDPatternOperator node> : SM_Pseudo<
@@ -605,23 +582,21 @@ class SMEM_Real_Store_Base_vi <bits<8> op, SM_Pseudo ps> : SMEM_Real_vi <op, ps>
605
582
let Inst{12-6} = !if(ps.has_sdst, sdata{6-0}, ?);
606
583
}
607
584
608
- class SMEM_Real_Store_vi <bits<8> op, string ps, dag offsets>
609
- : SMEM_Real_Store_Base_vi <op, !cast<SM_Pseudo>(ps)> {
610
- RegisterClass SrcClass = !cast<SM_Store_Pseudo>(ps).SrcClass;
611
- RegisterClass BaseClass = !cast<SM_Store_Pseudo>(ps).BaseClass;
585
+ class SMEM_Real_Store_vi <bits<8> op, string ps, OffsetMode offsets>
586
+ : SMEM_Real_Store_Base_vi <op, !cast<SM_Pseudo>(ps # offsets.Variant )> {
587
+ RegisterClass SrcClass = !cast<SM_Store_Pseudo>(ps # offsets.Variant ).SrcClass;
588
+ RegisterClass BaseClass = !cast<SM_Store_Pseudo>(ps # offsets.Variant ).BaseClass;
612
589
let InOperandList = !con((ins SrcClass:$sdata, BaseClass:$sbase),
613
- offsets, (ins CPol:$cpol));
590
+ offsets.Ins , (ins CPol:$cpol));
614
591
}
615
592
616
593
multiclass SM_Real_Stores_vi<bits<8> op, string ps> {
617
- def _IMM_vi : SMEM_Real_Store_vi <op, ps#_IMM, (ins smem_offset:$offset)>;
618
- def _SGPR_vi : SMEM_Real_Store_vi <op, ps#_SGPR, (ins SReg_32:$soffset)>;
619
- def _SGPR_alt_gfx9 : SMEM_Real_Store_vi <op, ps#"_SGPR",
620
- (ins SReg_32:$soffset)>,
594
+ def _IMM_vi : SMEM_Real_Store_vi <op, ps, IMM_Offset>;
595
+ def _SGPR_vi : SMEM_Real_Store_vi <op, ps, SGPR_Offset>;
596
+ def _SGPR_alt_gfx9 : SMEM_Real_Store_vi <op, ps, SGPR_Offset>,
621
597
SMEM_Real_SGPR_alt_gfx9;
622
598
let IsGFX9SpecificEncoding = true in
623
- def _SGPR_IMM_gfx9 : SMEM_Real_Store_vi <
624
- op, ps#"_SGPR_IMM", (ins SReg_32:$soffset, smem_offset_mod:$offset)>;
599
+ def _SGPR_IMM_gfx9 : SMEM_Real_Store_vi <op, ps, SGPR_IMM_Offset>;
625
600
}
626
601
627
602
multiclass SM_Real_Probe_vi<bits<8> op, string ps> {
0 commit comments