@@ -260,8 +260,12 @@ class NSAHelper {
260260}
261261
262262class MIMGNSAHelper<int num_addrs,
263- list<RegisterClass> addr_types=!listsplat(VGPR_32, num_addrs)>
264- : NSAHelper<> {
263+ list<RegisterOperand> addr_types_in=[]>
264+ : NSAHelper<> {
265+ list<RegisterOperand> addr_types =
266+ !if(!empty(addr_types_in), !listsplat(VGPROp_32, num_addrs),
267+ addr_types_in);
268+
265269 list<string> AddrAsmNames = !foreach(i, !range(num_addrs), "vaddr" # i);
266270 let AddrIns = !dag(ins, addr_types, AddrAsmNames);
267271 let AddrAsm = "[$" # !interleave(AddrAsmNames, ", $") # "]";
@@ -358,7 +362,7 @@ class MIMG_gfx11<int op, dag outs, string dns = "">
358362// Base class for all NSA MIMG instructions.
359363// Note that 1-dword addresses always use non-NSA variants.
360364class MIMG_nsa_gfx11<int op, dag outs, int num_addrs, string dns="",
361- list<RegisterClass > addr_types=[],
365+ list<RegisterOperand > addr_types=[],
362366 RegisterOperand LastAddrRC = VGPROp_32>
363367 : MIMG<outs, dns>, MIMGe_gfx11<op> {
364368 let SubtargetPredicate = isGFX11Only;
@@ -378,7 +382,7 @@ class MIMG_nsa_gfx11<int op, dag outs, int num_addrs, string dns="",
378382}
379383
380384class VIMAGE_gfx12<int op, dag outs, int num_addrs, string dns="",
381- list<RegisterClass > addr_types=[]>
385+ list<RegisterOperand > addr_types=[]>
382386 : VIMAGE<outs, dns>, VIMAGEe<op> {
383387 let SubtargetPredicate = isGFX12Plus;
384388 let AssemblerPredicate = isGFX12Plus;
@@ -1521,12 +1525,12 @@ class MIMG_IntersectRay_Helper<bit Is64, bit IsA16, bit isDual, bit isBVH8> {
15211525 int VAddrDwords = !srl(Size, 5);
15221526
15231527 int GFX11PlusNSAAddrs = !if(IsA16, 4, 5);
1524- RegisterClass node_ptr_type = !if(Is64, VReg_64, VGPR_32 );
1525- list<RegisterClass > GFX11PlusAddrTypes =
1526- !cond(isBVH8 : [node_ptr_type, VReg_64, VReg_96, VReg_96, VGPR_32 ],
1527- isDual : [node_ptr_type, VReg_64, VReg_96, VReg_96, VReg_64 ],
1528- IsA16 : [node_ptr_type, VGPR_32, VReg_96, VReg_96 ],
1529- true : [node_ptr_type, VGPR_32, VReg_96, VReg_96, VReg_96 ]);
1528+ RegisterOperand node_ptr_type = !if(Is64, VGPROp_64, VGPROp_32 );
1529+ list<RegisterOperand > GFX11PlusAddrTypes =
1530+ !cond(isBVH8 : [node_ptr_type, VGPROp_64, VGPROp_96, VGPROp_96, VGPROp_32 ],
1531+ isDual : [node_ptr_type, VGPROp_64, VGPROp_96, VGPROp_96, VGPROp_64 ],
1532+ IsA16 : [node_ptr_type, VGPROp_32, VGPROp_96, VGPROp_96 ],
1533+ true : [node_ptr_type, VGPROp_32, VGPROp_96, VGPROp_96, VGPROp_96 ]);
15301534}
15311535
15321536class MIMG_IntersectRay_gfx10<mimgopc op, string opcode, RegisterOperand AddrRC>
@@ -1552,7 +1556,7 @@ class MIMG_IntersectRay_gfx11<mimgopc op, string opcode, RegisterOperand AddrRC>
15521556}
15531557
15541558class MIMG_IntersectRay_nsa_gfx11<mimgopc op, string opcode, int num_addrs,
1555- list<RegisterClass > addr_types>
1559+ list<RegisterOperand > addr_types>
15561560 : MIMG_nsa_gfx11<op.GFX11, (outs VReg_128:$vdata), num_addrs, "GFX11",
15571561 addr_types> {
15581562 let InOperandList = !con(nsah.AddrIns, (ins SReg_128_XNULL:$srsrc, A16:$a16));
@@ -1561,7 +1565,7 @@ class MIMG_IntersectRay_nsa_gfx11<mimgopc op, string opcode, int num_addrs,
15611565
15621566class VIMAGE_IntersectRay_gfx12<mimgopc op, string opcode, int num_addrs,
15631567 bit isDual, bit isBVH8,
1564- list<RegisterClass > addr_types>
1568+ list<RegisterOperand > addr_types>
15651569 : VIMAGE_gfx12<op.GFX12, !if(!or(isDual, isBVH8),
15661570 (outs VReg_320:$vdata, VReg_96:$ray_origin_out,
15671571 VReg_96:$ray_dir_out),
0 commit comments