@@ -239,7 +239,7 @@ class FLAT_Store_Pseudo <string opName, RegisterClass vdataClass,
239
239
}
240
240
241
241
multiclass FLAT_Global_Load_Pseudo<string opName, RegisterClass regClass, bit HasTiedInput = 0> {
242
- let is_flat_global = 1, SubtargetPredicate = HasFlatGlobalInsts in {
242
+ let is_flat_global = 1 in {
243
243
def "" : FLAT_Load_Pseudo<opName, regClass, HasTiedInput, 1>,
244
244
GlobalSaddrTable<0, opName>;
245
245
def _SADDR : FLAT_Load_Pseudo<opName, regClass, HasTiedInput, 1, 1>,
@@ -276,7 +276,7 @@ multiclass FLAT_Global_Load_AddTid_Pseudo<string opName, RegisterClass regClass,
276
276
}
277
277
278
278
multiclass FLAT_Global_Store_Pseudo<string opName, RegisterClass regClass> {
279
- let is_flat_global = 1, SubtargetPredicate = HasFlatGlobalInsts in {
279
+ let is_flat_global = 1 in {
280
280
def "" : FLAT_Store_Pseudo<opName, regClass, 1>,
281
281
GlobalSaddrTable<0, opName>;
282
282
def _SADDR : FLAT_Store_Pseudo<opName, regClass, 1, 1>,
@@ -389,6 +389,7 @@ class FLAT_Scratch_Load_Pseudo <string opName, RegisterClass regClass,
389
389
!if(HasTiedOutput, (ins CPol:$cpol, getLdStRegisterOperand<regClass>.ret:$vdst_in),
390
390
(ins CPol_0:$cpol))),
391
391
" $vdst, "#!if(EnableVaddr, "$vaddr, ", "off, ")#!if(EnableSaddr, "$saddr", "off")#"$offset$cpol"> {
392
+ let is_flat_scratch = 1;
392
393
let has_data = 0;
393
394
let mayLoad = 1;
394
395
let has_saddr = 1;
@@ -416,6 +417,7 @@ class FLAT_Scratch_Store_Pseudo <string opName, RegisterClass vdataClass, bit En
416
417
(ins vdata_op:$vdata, VGPR_32:$vaddr, flat_offset:$offset, CPol_0:$cpol),
417
418
(ins vdata_op:$vdata, flat_offset:$offset, CPol_0:$cpol)))),
418
419
" "#!if(EnableVaddr, "$vaddr", "off")#", $vdata, "#!if(EnableSaddr, "$saddr", "off")#"$offset$cpol"> {
420
+ let is_flat_scratch = 1;
419
421
let mayLoad = 0;
420
422
let mayStore = 1;
421
423
let has_vdst = 0;
@@ -428,37 +430,33 @@ class FLAT_Scratch_Store_Pseudo <string opName, RegisterClass vdataClass, bit En
428
430
}
429
431
430
432
multiclass FLAT_Scratch_Load_Pseudo<string opName, RegisterClass regClass, bit HasTiedOutput = 0> {
431
- let is_flat_scratch = 1 in {
432
- def "" : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput>,
433
- FlatScratchInst<opName, "SV">;
434
- def _SADDR : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 1>,
435
- FlatScratchInst<opName, "SS">;
436
-
437
- let SubtargetPredicate = HasFlatScratchSVSMode in
438
- def _SVS : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 1, 1>,
439
- FlatScratchInst<opName, "SVS">;
433
+ def "" : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput>,
434
+ FlatScratchInst<opName, "SV">;
435
+ def _SADDR : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 1>,
436
+ FlatScratchInst<opName, "SS">;
440
437
441
- let SubtargetPredicate = HasFlatScratchSTMode in
442
- def _ST : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 0, 0, 0>,
443
- FlatScratchInst<opName, "ST">;
444
- }
438
+ let SubtargetPredicate = HasFlatScratchSVSMode in
439
+ def _SVS : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 1, 1>,
440
+ FlatScratchInst<opName, "SVS">;
441
+
442
+ let SubtargetPredicate = HasFlatScratchSTMode in
443
+ def _ST : FLAT_Scratch_Load_Pseudo<opName, regClass, HasTiedOutput, 0, 0, 0>,
444
+ FlatScratchInst<opName, "ST">;
445
445
}
446
446
447
447
multiclass FLAT_Scratch_Store_Pseudo<string opName, RegisterClass regClass> {
448
- let is_flat_scratch = 1 in {
449
- def "" : FLAT_Scratch_Store_Pseudo<opName, regClass>,
450
- FlatScratchInst<opName, "SV">;
451
- def _SADDR : FLAT_Scratch_Store_Pseudo<opName, regClass, 1>,
452
- FlatScratchInst<opName, "SS">;
453
-
454
- let SubtargetPredicate = HasFlatScratchSVSMode in
455
- def _SVS : FLAT_Scratch_Store_Pseudo<opName, regClass, 1, 1>,
456
- FlatScratchInst<opName, "SVS">;
448
+ def "" : FLAT_Scratch_Store_Pseudo<opName, regClass>,
449
+ FlatScratchInst<opName, "SV">;
450
+ def _SADDR : FLAT_Scratch_Store_Pseudo<opName, regClass, 1>,
451
+ FlatScratchInst<opName, "SS">;
457
452
458
- let SubtargetPredicate = HasFlatScratchSTMode in
459
- def _ST : FLAT_Scratch_Store_Pseudo<opName, regClass, 0, 0, 0>,
460
- FlatScratchInst<opName, "ST">;
461
- }
453
+ let SubtargetPredicate = HasFlatScratchSVSMode in
454
+ def _SVS : FLAT_Scratch_Store_Pseudo<opName, regClass, 1, 1>,
455
+ FlatScratchInst<opName, "SVS">;
456
+
457
+ let SubtargetPredicate = HasFlatScratchSTMode in
458
+ def _ST : FLAT_Scratch_Store_Pseudo<opName, regClass, 0, 0, 0>,
459
+ FlatScratchInst<opName, "ST">;
462
460
}
463
461
464
462
class FLAT_Scratch_Load_LDS_Pseudo <string opName, bit EnableSaddr = 0,
@@ -583,25 +581,27 @@ multiclass FLAT_Global_Atomic_Pseudo_NO_RTN<
583
581
RegisterClass data_rc = vdst_rc,
584
582
RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret> {
585
583
586
- def "" : FLAT_AtomicNoRet_Pseudo <opName,
587
- (outs),
588
- (ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_0:$cpol),
589
- " $vaddr, $vdata, off$offset$cpol">,
590
- GlobalSaddrTable<0, opName> {
591
- let has_saddr = 1;
592
- let PseudoInstr = NAME;
593
- let FPAtomic = data_vt.isFP;
594
- }
584
+ let is_flat_global = 1 in {
585
+ def "" : FLAT_AtomicNoRet_Pseudo <opName,
586
+ (outs),
587
+ (ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_0:$cpol),
588
+ " $vaddr, $vdata, off$offset$cpol">,
589
+ GlobalSaddrTable<0, opName> {
590
+ let has_saddr = 1;
591
+ let PseudoInstr = NAME;
592
+ let FPAtomic = data_vt.isFP;
593
+ }
595
594
596
- def _SADDR : FLAT_AtomicNoRet_Pseudo <opName,
597
- (outs),
598
- (ins VGPR_32:$vaddr, data_op:$vdata, SReg_64:$saddr, flat_offset:$offset, CPol_0:$cpol),
599
- " $vaddr, $vdata, $saddr$offset$cpol">,
600
- GlobalSaddrTable<1, opName> {
601
- let has_saddr = 1;
602
- let enabled_saddr = 1;
603
- let PseudoInstr = NAME#"_SADDR";
604
- let FPAtomic = data_vt.isFP;
595
+ def _SADDR : FLAT_AtomicNoRet_Pseudo <opName,
596
+ (outs),
597
+ (ins VGPR_32:$vaddr, data_op:$vdata, SReg_64:$saddr, flat_offset:$offset, CPol_0:$cpol),
598
+ " $vaddr, $vdata, $saddr$offset$cpol">,
599
+ GlobalSaddrTable<1, opName> {
600
+ let has_saddr = 1;
601
+ let enabled_saddr = 1;
602
+ let PseudoInstr = NAME#"_SADDR";
603
+ let FPAtomic = data_vt.isFP;
604
+ }
605
605
}
606
606
}
607
607
@@ -614,24 +614,26 @@ multiclass FLAT_Global_Atomic_Pseudo_RTN<
614
614
RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret,
615
615
RegisterOperand vdst_op = getLdStRegisterOperand<vdst_rc>.ret> {
616
616
617
- def _RTN : FLAT_AtomicRet_Pseudo <opName,
618
- (outs vdst_op:$vdst),
619
- (ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_GLC1:$cpol),
620
- " $vdst, $vaddr, $vdata, off$offset$cpol">,
621
- GlobalSaddrTable<0, opName#"_rtn"> {
622
- let has_saddr = 1;
623
- let FPAtomic = data_vt.isFP;
624
- }
617
+ let is_flat_global = 1 in {
618
+ def _RTN : FLAT_AtomicRet_Pseudo <opName,
619
+ (outs vdst_op:$vdst),
620
+ (ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_GLC1:$cpol),
621
+ " $vdst, $vaddr, $vdata, off$offset$cpol">,
622
+ GlobalSaddrTable<0, opName#"_rtn"> {
623
+ let has_saddr = 1;
624
+ let FPAtomic = data_vt.isFP;
625
+ }
625
626
626
- def _SADDR_RTN : FLAT_AtomicRet_Pseudo <opName,
627
- (outs vdst_op:$vdst),
628
- (ins VGPR_32:$vaddr, data_op:$vdata, SReg_64:$saddr, flat_offset:$offset, CPol_GLC1:$cpol),
629
- " $vdst, $vaddr, $vdata, $saddr$offset$cpol">,
630
- GlobalSaddrTable<1, opName#"_rtn"> {
631
- let has_saddr = 1;
632
- let enabled_saddr = 1;
633
- let PseudoInstr = NAME#"_SADDR_RTN";
634
- let FPAtomic = data_vt.isFP;
627
+ def _SADDR_RTN : FLAT_AtomicRet_Pseudo <opName,
628
+ (outs vdst_op:$vdst),
629
+ (ins VGPR_32:$vaddr, data_op:$vdata, SReg_64:$saddr, flat_offset:$offset, CPol_GLC1:$cpol),
630
+ " $vdst, $vaddr, $vdata, $saddr$offset$cpol">,
631
+ GlobalSaddrTable<1, opName#"_rtn"> {
632
+ let has_saddr = 1;
633
+ let enabled_saddr = 1;
634
+ let PseudoInstr = NAME#"_SADDR_RTN";
635
+ let FPAtomic = data_vt.isFP;
636
+ }
635
637
}
636
638
}
637
639
@@ -641,10 +643,8 @@ multiclass FLAT_Global_Atomic_Pseudo<
641
643
ValueType vt,
642
644
ValueType data_vt = vt,
643
645
RegisterClass data_rc = vdst_rc> {
644
- let is_flat_global = 1, SubtargetPredicate = HasFlatGlobalInsts in {
645
- defm "" : FLAT_Global_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
646
- defm "" : FLAT_Global_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
647
- }
646
+ defm "" : FLAT_Global_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
647
+ defm "" : FLAT_Global_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
648
648
}
649
649
650
650
//===----------------------------------------------------------------------===//
@@ -848,7 +848,6 @@ defm GLOBAL_STORE_DWORD_ADDTID : FLAT_Global_Store_AddTid_Pseudo <"global_store_
848
848
defm GLOBAL_STORE_BYTE_D16_HI : FLAT_Global_Store_Pseudo <"global_store_byte_d16_hi", VGPR_32>;
849
849
defm GLOBAL_STORE_SHORT_D16_HI : FLAT_Global_Store_Pseudo <"global_store_short_d16_hi", VGPR_32>;
850
850
851
- let is_flat_global = 1 in {
852
851
defm GLOBAL_ATOMIC_CMPSWAP : FLAT_Global_Atomic_Pseudo <"global_atomic_cmpswap",
853
852
VGPR_32, i32, v2i32, VReg_64>;
854
853
@@ -947,9 +946,6 @@ let SubtargetPredicate = isGFX12Plus in {
947
946
def GLOBAL_WBINV : FLAT_Global_Invalidate_Writeback<"global_wbinv">;
948
947
} // End SubtargetPredicate = isGFX12Plus
949
948
950
- } // End is_flat_global = 1
951
-
952
- let SubtargetPredicate = HasFlatScratchInsts in {
953
949
defm SCRATCH_LOAD_UBYTE : FLAT_Scratch_Load_Pseudo <"scratch_load_ubyte", VGPR_32>;
954
950
defm SCRATCH_LOAD_SBYTE : FLAT_Scratch_Load_Pseudo <"scratch_load_sbyte", VGPR_32>;
955
951
defm SCRATCH_LOAD_USHORT : FLAT_Scratch_Load_Pseudo <"scratch_load_ushort", VGPR_32>;
@@ -984,8 +980,6 @@ defm SCRATCH_LOAD_LDS_USHORT : FLAT_Scratch_Load_LDS_Pseudo <"scratch_load_lds_u
984
980
defm SCRATCH_LOAD_LDS_SSHORT : FLAT_Scratch_Load_LDS_Pseudo <"scratch_load_lds_sshort">;
985
981
defm SCRATCH_LOAD_LDS_DWORD : FLAT_Scratch_Load_LDS_Pseudo <"scratch_load_lds_dword">;
986
982
987
- } // End SubtargetPredicate = HasFlatScratchInsts
988
-
989
983
let SubtargetPredicate = isGFX12Plus in {
990
984
let WaveSizePredicate = isWave32 in {
991
985
defm GLOBAL_LOAD_TR_B128_w32 : FLAT_Global_Load_Pseudo <"global_load_tr_b128_w32", VReg_128>;
@@ -997,7 +991,7 @@ let SubtargetPredicate = isGFX12Plus in {
997
991
}
998
992
} // End SubtargetPredicate = isGFX12Plus
999
993
1000
- let SubtargetPredicate = isGFX10Plus, is_flat_global = 1 in {
994
+ let SubtargetPredicate = isGFX10Plus in {
1001
995
defm GLOBAL_ATOMIC_FCMPSWAP :
1002
996
FLAT_Global_Atomic_Pseudo<"global_atomic_fcmpswap", VGPR_32, f32, v2f32, VReg_64>;
1003
997
defm GLOBAL_ATOMIC_FMIN :
@@ -1010,9 +1004,8 @@ let SubtargetPredicate = isGFX10Plus, is_flat_global = 1 in {
1010
1004
FLAT_Global_Atomic_Pseudo<"global_atomic_fmin_x2", VReg_64, f64>;
1011
1005
defm GLOBAL_ATOMIC_FMAX_X2 :
1012
1006
FLAT_Global_Atomic_Pseudo<"global_atomic_fmax_x2", VReg_64, f64>;
1013
- } // End SubtargetPredicate = isGFX10Plus, is_flat_global = 1
1007
+ } // End SubtargetPredicate = isGFX10Plus
1014
1008
1015
- let is_flat_global = 1 in {
1016
1009
let OtherPredicates = [HasAtomicFaddNoRtnInsts] in
1017
1010
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Atomic_Pseudo_NO_RTN <
1018
1011
"global_atomic_add_f32", VGPR_32, f32
@@ -1029,7 +1022,6 @@ let OtherPredicates = [HasAtomicBufferGlobalPkAddF16Insts] in
1029
1022
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Atomic_Pseudo_RTN <
1030
1023
"global_atomic_pk_add_f16", VGPR_32, v2f16
1031
1024
>;
1032
- } // End is_flat_global = 1
1033
1025
1034
1026
//===----------------------------------------------------------------------===//
1035
1027
// Flat Patterns
0 commit comments