@@ -871,11 +871,11 @@ multiclass MIMG_Store <mimgopc op, string asm, bit has_d16, bit mip = 0> {
871
871
}
872
872
873
873
class MIMG_Atomic_gfx6789_base <bits<8> op, string asm, RegisterClass data_rc,
874
- RegisterClass addr_rc, string dns="">
874
+ RegisterClass addr_rc, string dns="", bits<1> hasR128=false >
875
875
: MIMG_gfx6789 <op, (outs data_rc:$vdst), dns> {
876
876
let Constraints = "$vdst = $vdata";
877
877
878
- let InOperandList = (ins data_rc:$vdata, addr_rc:$vaddr, SReg_256_XNULL:$srsrc,
878
+ let InOperandList = (ins data_rc:$vdata, addr_rc:$vaddr, !if(hasR128, SReg_128_XNULL, SReg_256_XNULL) :$srsrc,
879
879
DMask:$dmask, UNorm:$unorm, CPol:$cpol,
880
880
R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da);
881
881
let AsmString = asm#" $vdst, $vaddr, $srsrc$dmask$unorm$cpol$r128$tfe$lwe$da";
@@ -893,18 +893,20 @@ class MIMG_Atomic_gfx90a_base <bits<8> op, string asm, RegisterClass data_rc,
893
893
let AsmString = asm#" $vdst, $vaddr, $srsrc$dmask$unorm$cpol$r128$lwe$da";
894
894
}
895
895
896
- class MIMG_Atomic_si<mimgopc op, string asm, RegisterClass data_rc,
897
- RegisterClass addr_rc, bit enableDasm = 0>
898
- : MIMG_Atomic_gfx6789_base<op.SI, asm, data_rc, addr_rc,
899
- !if(enableDasm , "GFX6GFX7 ", "")> {
900
- let AssemblerPredicate = isGFX6GFX7;
896
+ multiclass MIMG_Atomic_si<mimgopc op, string asm, RegisterClass data_rc, RegisterClass addr_rc, bit enableDasm = 0> {
897
+ let AssemblerPredicate = isGFX6GFX7 in {
898
+ def _r1_si : MIMG_Atomic_gfx6789_base<op.SI, asm, data_rc, addr_rc, !if(enableDasm, "GFX6GFX7", "")>;
899
+ def _r2_si : MIMG_Atomic_gfx6789_base<op.SI, asm, data_rc, addr_rc , "", /*hasR128*/ true>;
900
+ }
901
901
}
902
902
903
- class MIMG_Atomic_vi<mimgopc op, string asm, RegisterClass data_rc,
904
- RegisterClass addr_rc, bit enableDasm = 0>
905
- : MIMG_Atomic_gfx6789_base<op.VI, asm, data_rc, addr_rc, !if(enableDasm, "GFX8", "")> {
906
- let AssemblerPredicate = isGFX8GFX9NotGFX90A;
907
- let MIMGEncoding = MIMGEncGfx8;
903
+ multiclass MIMG_Atomic_vi<mimgopc op, string asm, RegisterClass data_rc, RegisterClass addr_rc, bit enableDasm = 0> {
904
+ let AssemblerPredicate = isGFX8GFX9NotGFX90A, MIMGEncoding = MIMGEncGfx8 in {
905
+ def _r1_vi : MIMG_Atomic_gfx6789_base<op.VI, asm, data_rc, addr_rc, !if(enableDasm, "GFX8", "")>;
906
+ }
907
+ let AssemblerPredicate = isGFX8Only, MIMGEncoding = MIMGEncGfx8 in {
908
+ def _r2_vi : MIMG_Atomic_gfx6789_base<op.VI, asm, data_rc, addr_rc, "", /*hasR128*/ true>;
909
+ }
908
910
}
909
911
910
912
class MIMG_Atomic_gfx90a<mimgopc op, string asm, RegisterClass data_rc,
@@ -995,10 +997,10 @@ multiclass MIMG_Atomic_Addr_Helper_m <mimgopc op, string asm,
995
997
let VAddrDwords = 1 in {
996
998
let ssamp = 0 in {
997
999
if op.HAS_SI then {
998
- def _V1_si : MIMG_Atomic_si <op, asm, data_rc, VGPR_32, enableDasm>;
1000
+ defm _V1 : MIMG_Atomic_si <op, asm, data_rc, VGPR_32, enableDasm>;
999
1001
}
1000
1002
if op.HAS_VI then {
1001
- def _V1_vi : MIMG_Atomic_vi <op, asm, data_rc, VGPR_32, enableDasm>;
1003
+ defm _V1 : MIMG_Atomic_vi <op, asm, data_rc, VGPR_32, enableDasm>;
1002
1004
let hasPostISelHook = 1 in
1003
1005
def _V1_gfx90a : MIMG_Atomic_gfx90a <op, asm, data_rc, VGPR_32, enableDasm>;
1004
1006
}
@@ -1016,10 +1018,10 @@ multiclass MIMG_Atomic_Addr_Helper_m <mimgopc op, string asm,
1016
1018
let VAddrDwords = 2 in {
1017
1019
let ssamp = 0 in {
1018
1020
if op.HAS_SI then {
1019
- def _V2_si : MIMG_Atomic_si <op, asm, data_rc, VReg_64, 0>;
1021
+ defm _V2 : MIMG_Atomic_si <op, asm, data_rc, VReg_64, 0>;
1020
1022
}
1021
1023
if op.HAS_VI then {
1022
- def _V2_vi : MIMG_Atomic_vi <op, asm, data_rc, VReg_64, 0>;
1024
+ defm _V2 : MIMG_Atomic_vi <op, asm, data_rc, VReg_64, 0>;
1023
1025
def _V2_gfx90a : MIMG_Atomic_gfx90a <op, asm, data_rc, VReg_64, 0>;
1024
1026
}
1025
1027
if op.HAS_GFX10M then {
@@ -1038,10 +1040,10 @@ multiclass MIMG_Atomic_Addr_Helper_m <mimgopc op, string asm,
1038
1040
let VAddrDwords = 3 in {
1039
1041
let ssamp = 0 in {
1040
1042
if op.HAS_SI then {
1041
- def _V3_si : MIMG_Atomic_si <op, asm, data_rc, VReg_96, 0>;
1043
+ defm _V3 : MIMG_Atomic_si <op, asm, data_rc, VReg_96, 0>;
1042
1044
}
1043
1045
if op.HAS_VI then {
1044
- def _V3_vi : MIMG_Atomic_vi <op, asm, data_rc, VReg_96, 0>;
1046
+ defm _V3 : MIMG_Atomic_vi <op, asm, data_rc, VReg_96, 0>;
1045
1047
def _V3_gfx90a : MIMG_Atomic_gfx90a <op, asm, data_rc, VReg_96, 0>;
1046
1048
}
1047
1049
if op.HAS_GFX10M then {
@@ -1060,10 +1062,10 @@ multiclass MIMG_Atomic_Addr_Helper_m <mimgopc op, string asm,
1060
1062
let VAddrDwords = 4 in {
1061
1063
let ssamp = 0 in {
1062
1064
if op.HAS_SI then {
1063
- def _V4_si : MIMG_Atomic_si <op, asm, data_rc, VReg_128, 0>;
1065
+ defm _V4 : MIMG_Atomic_si <op, asm, data_rc, VReg_128, 0>;
1064
1066
}
1065
1067
if op.HAS_VI then {
1066
- def _V4_vi : MIMG_Atomic_vi <op, asm, data_rc, VReg_128, 0>;
1068
+ defm _V4 : MIMG_Atomic_vi <op, asm, data_rc, VReg_128, 0>;
1067
1069
def _V4_gfx90a : MIMG_Atomic_gfx90a <op, asm, data_rc, VReg_128, 0>;
1068
1070
}
1069
1071
if op.HAS_GFX10M then {
@@ -1126,9 +1128,9 @@ multiclass MIMG_Atomic_Renamed <mimgopc op, string asm, string renamed,
1126
1128
: MIMG_Atomic <op, asm, isCmpSwap, isFP, renamed>;
1127
1129
1128
1130
class MIMG_Sampler_Helper <mimgopc op, string asm, RegisterClass dst_rc,
1129
- RegisterClass src_rc, string dns="">
1131
+ RegisterClass src_rc, string dns="", bits<1> hasR128=false >
1130
1132
: MIMG_gfx6789 <op.VI, (outs dst_rc:$vdata), dns> {
1131
- let InOperandList = !con((ins src_rc:$vaddr, SReg_256_XNULL:$srsrc, SReg_128_XNULL:$ssamp,
1133
+ let InOperandList = !con((ins src_rc:$vaddr, !if(hasR128, SReg_128_XNULL, SReg_256_XNULL) :$srsrc, SReg_128_XNULL:$ssamp,
1132
1134
DMask:$dmask, UNorm:$unorm, CPol:$cpol,
1133
1135
R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da),
1134
1136
!if(BaseOpcode.HasD16, (ins D16:$d16), (ins)));
@@ -1349,9 +1351,11 @@ multiclass MIMG_Sampler_Src_Helper <mimgopc op, string asm,
1349
1351
foreach addr = MIMG_Sampler_AddrSizes<sample, isG16>.MachineInstrs in {
1350
1352
let VAddrDwords = addr.NumWords in {
1351
1353
if op.HAS_GFX10M then {
1352
- def _V # addr.NumWords
1354
+ def _V # addr.NumWords # _r1
1353
1355
: MIMG_Sampler_Helper <op, asm, dst_rc, addr.RegClass,
1354
1356
!if(!and(enableDisasm, addr.Disassemble), "GFX8", "")>;
1357
+ def _V # addr.NumWords # _r2
1358
+ : MIMG_Sampler_Helper <op, asm, dst_rc, addr.RegClass, "", /*hasR128*/ true>;
1355
1359
if !not(ExtendedImageInst) then
1356
1360
def _V # addr.NumWords # _gfx90a
1357
1361
: MIMG_Sampler_gfx90a <op, asm, dst_rc, addr.RegClass,
0 commit comments