@@ -192,24 +192,34 @@ multiclass FLAT_Global_Load_Pseudo<string opName, RegisterClass regClass, bit Ha
192
192
}
193
193
194
194
class FLAT_Global_Load_AddTid_Pseudo <string opName, RegisterClass regClass,
195
- bit HasTiedOutput = 0, bit HasSignedOffset = 0> : FLAT_Pseudo<
195
+ bit HasTiedOutput = 0, bit HasSignedOffset = 0, bit EnableSaddr = 0 > : FLAT_Pseudo<
196
196
opName,
197
197
(outs regClass:$vdst),
198
- !con((ins SReg_64:$saddr, flat_offset:$offset, GLC_0:$glc, SLC_0:$slc, DLC_0:$dlc),
198
+ !con(!if(EnableSaddr, (ins SReg_64:$saddr), (ins)),
199
+ (ins flat_offset:$offset, GLC_0:$glc, SLC_0:$slc, DLC_0:$dlc),
199
200
!if(HasTiedOutput, (ins regClass:$vdst_in), (ins))),
200
- " $vdst, $saddr$offset$glc$slc$dlc"> {
201
+ " $vdst, "#!if(EnableSaddr, " $saddr", "off")#" $offset$glc$slc$dlc"> {
201
202
let is_flat_global = 1;
202
203
let has_data = 0;
203
204
let mayLoad = 1;
204
205
let has_vaddr = 0;
205
206
let has_saddr = 1;
206
- let enabled_saddr = 1 ;
207
+ let enabled_saddr = EnableSaddr ;
207
208
let maybeAtomic = 1;
209
+ let PseudoInstr = opName#!if(EnableSaddr, "_SADDR", "");
208
210
209
211
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
210
212
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
211
213
}
212
214
215
+ multiclass FLAT_Global_Load_AddTid_Pseudo<string opName, RegisterClass regClass,
216
+ bit HasTiedOutput = 0, bit HasSignedOffset = 0> {
217
+ def "" : FLAT_Global_Load_AddTid_Pseudo<opName, regClass, HasTiedOutput, HasSignedOffset>,
218
+ GlobalSaddrTable<0, opName>;
219
+ def _SADDR : FLAT_Global_Load_AddTid_Pseudo<opName, regClass, HasTiedOutput, HasSignedOffset, 1>,
220
+ GlobalSaddrTable<1, opName>;
221
+ }
222
+
213
223
multiclass FLAT_Global_Store_Pseudo<string opName, RegisterClass regClass> {
214
224
let is_flat_global = 1, SubtargetPredicate = HasFlatGlobalInsts in {
215
225
def "" : FLAT_Store_Pseudo<opName, regClass, 1>,
@@ -220,21 +230,29 @@ multiclass FLAT_Global_Store_Pseudo<string opName, RegisterClass regClass> {
220
230
}
221
231
222
232
class FLAT_Global_Store_AddTid_Pseudo <string opName, RegisterClass vdataClass,
223
- bit HasSignedOffset = 0> : FLAT_Pseudo<
233
+ bit HasSignedOffset = 0, bit EnableSaddr = 0 > : FLAT_Pseudo<
224
234
opName,
225
235
(outs),
226
- !con(
227
- (ins vdataClass:$vdata, SReg_64:$saddr),
228
- (ins flat_offset:$offset, GLC:$glc, SLC:$slc, DLC:$dlc)),
229
- " $vdata, $saddr$offset$glc$slc$dlc"> {
236
+ !con(!if(EnableSaddr, (ins vdataClass:$vdata, SReg_64:$saddr), (ins vdataClass:$vdata)),
237
+ (ins flat_offset:$offset, GLC:$glc, SLC:$slc, DLC:$dlc)),
238
+ " $vdata, "#!if(EnableSaddr, "$saddr", "off")#"$offset$glc$slc$dlc"> {
230
239
let is_flat_global = 1;
231
240
let mayLoad = 0;
232
241
let mayStore = 1;
233
242
let has_vdst = 0;
234
243
let has_vaddr = 0;
235
244
let has_saddr = 1;
236
- let enabled_saddr = 1 ;
245
+ let enabled_saddr = EnableSaddr ;
237
246
let maybeAtomic = 1;
247
+ let PseudoInstr = opName#!if(EnableSaddr, "_SADDR", "");
248
+ }
249
+
250
+ multiclass FLAT_Global_Store_AddTid_Pseudo<string opName, RegisterClass regClass,
251
+ bit HasSignedOffset = 0> {
252
+ def "" : FLAT_Global_Store_AddTid_Pseudo<opName, regClass, HasSignedOffset>,
253
+ GlobalSaddrTable<0, opName>;
254
+ def _SADDR : FLAT_Global_Store_AddTid_Pseudo<opName, regClass, HasSignedOffset, 1>,
255
+ GlobalSaddrTable<1, opName>;
238
256
}
239
257
240
258
class FlatScratchInst <string sv_op, string mode> {
@@ -603,7 +621,7 @@ defm GLOBAL_LOAD_SBYTE_D16_HI : FLAT_Global_Load_Pseudo <"global_load_sbyte_d16_
603
621
defm GLOBAL_LOAD_SHORT_D16 : FLAT_Global_Load_Pseudo <"global_load_short_d16", VGPR_32, 1>;
604
622
defm GLOBAL_LOAD_SHORT_D16_HI : FLAT_Global_Load_Pseudo <"global_load_short_d16_hi", VGPR_32, 1>;
605
623
let OtherPredicates = [HasGFX10_BEncoding] in
606
- def GLOBAL_LOAD_DWORD_ADDTID : FLAT_Global_Load_AddTid_Pseudo <"global_load_dword_addtid", VGPR_32>;
624
+ defm GLOBAL_LOAD_DWORD_ADDTID : FLAT_Global_Load_AddTid_Pseudo <"global_load_dword_addtid", VGPR_32>;
607
625
608
626
defm GLOBAL_STORE_BYTE : FLAT_Global_Store_Pseudo <"global_store_byte", VGPR_32>;
609
627
defm GLOBAL_STORE_SHORT : FLAT_Global_Store_Pseudo <"global_store_short", VGPR_32>;
@@ -612,7 +630,7 @@ defm GLOBAL_STORE_DWORDX2 : FLAT_Global_Store_Pseudo <"global_store_dwordx2", VR
612
630
defm GLOBAL_STORE_DWORDX3 : FLAT_Global_Store_Pseudo <"global_store_dwordx3", VReg_96>;
613
631
defm GLOBAL_STORE_DWORDX4 : FLAT_Global_Store_Pseudo <"global_store_dwordx4", VReg_128>;
614
632
let OtherPredicates = [HasGFX10_BEncoding] in
615
- def GLOBAL_STORE_DWORD_ADDTID : FLAT_Global_Store_AddTid_Pseudo <"global_store_dword_addtid", VGPR_32>;
633
+ defm GLOBAL_STORE_DWORD_ADDTID : FLAT_Global_Store_AddTid_Pseudo <"global_store_dword_addtid", VGPR_32>;
616
634
617
635
defm GLOBAL_STORE_BYTE_D16_HI : FLAT_Global_Store_Pseudo <"global_store_byte_d16_hi", VGPR_32>;
618
636
defm GLOBAL_STORE_SHORT_D16_HI : FLAT_Global_Store_Pseudo <"global_store_short_d16_hi", VGPR_32>;
@@ -1651,8 +1669,8 @@ defm GLOBAL_ATOMIC_DEC_X2 : FLAT_Real_GlblAtomics_gfx10<0x05d>;
1651
1669
defm GLOBAL_ATOMIC_FCMPSWAP_X2 : FLAT_Real_GlblAtomics_gfx10<0x05e>;
1652
1670
defm GLOBAL_ATOMIC_FMIN_X2 : FLAT_Real_GlblAtomics_gfx10<0x05f>;
1653
1671
defm GLOBAL_ATOMIC_FMAX_X2 : FLAT_Real_GlblAtomics_gfx10<0x060>;
1654
- defm GLOBAL_LOAD_DWORD_ADDTID : FLAT_Real_Base_gfx10 <0x016>;
1655
- defm GLOBAL_STORE_DWORD_ADDTID : FLAT_Real_Base_gfx10 <0x017>;
1672
+ defm GLOBAL_LOAD_DWORD_ADDTID : FLAT_Real_AllAddr_gfx10 <0x016>;
1673
+ defm GLOBAL_STORE_DWORD_ADDTID : FLAT_Real_AllAddr_gfx10 <0x017>;
1656
1674
1657
1675
// ENC_FLAT_SCRATCH.
1658
1676
defm SCRATCH_LOAD_UBYTE : FLAT_Real_ScratchAllAddr_gfx10<0x008>;
0 commit comments