[llvm] AMDGPU/GlobalISel: Fix assert in selectSMRDBufferSgprImm (PR #213967)
Petar Avramovic via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 5 03:00:18 PDT 2026
================
@@ -1790,10 +2126,132 @@ define amdgpu_ps i32 @s_buffer_load_imm_1028(<4 x i32> inreg %desc) {
; GFX1250-NEXT: s_buffer_load_b32 s0, s[0:3], 0x400 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: ; return to shader part epilog
+;
+; GFX1250-GISEL-LABEL: s_buffer_load_imm_1028:
+; GFX1250-GISEL: ; %bb.0:
+; GFX1250-GISEL-NEXT: global_prefetch_b8 v0, s[0:1] scope:SCOPE_SE
+; GFX1250-GISEL-NEXT: v_nop
+; GFX1250-GISEL-NEXT: s_buffer_load_b32 s0, s[0:3], 0x400 nv
+; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0
+; GFX1250-GISEL-NEXT: ; return to shader part epilog
%load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1024, i32 0)
ret i32 %load
}
+define amdgpu_ps i32 @s_buffer_load_ptr_soffset(<4 x i32> inreg %desc, ptr addrspace(6) inreg %p) {
+; GFX6-LABEL: s_buffer_load_ptr_soffset:
+; GFX6: ; %bb.0:
+; GFX6-NEXT: s_add_i32 s4, s4, 52
+; GFX6-NEXT: s_nop 3
+; GFX6-NEXT: s_buffer_load_dword s0, s[0:3], s4
+; GFX6-NEXT: s_waitcnt lgkmcnt(0)
+; GFX6-NEXT: ; return to shader part epilog
+;
+; GFX78-LABEL: s_buffer_load_ptr_soffset:
+; GFX78: ; %bb.0:
+; GFX78-NEXT: s_add_i32 s4, s4, 52
+; GFX78-NEXT: s_buffer_load_dword s0, s[0:3], s4
+; GFX78-NEXT: s_waitcnt lgkmcnt(0)
+; GFX78-NEXT: ; return to shader part epilog
+;
+; GFX910-LABEL: s_buffer_load_ptr_soffset:
+; GFX910: ; %bb.0:
+; GFX910-NEXT: s_add_i32 s4, s4, 52
+; GFX910-NEXT: s_buffer_load_dword s0, s[0:3], s4 offset:0x0
+; GFX910-NEXT: s_waitcnt lgkmcnt(0)
+; GFX910-NEXT: ; return to shader part epilog
+;
+; GFX11-LABEL: s_buffer_load_ptr_soffset:
+; GFX11: ; %bb.0:
+; GFX11-NEXT: s_add_i32 s4, s4, 52
+; GFX11-NEXT: s_buffer_load_b32 s0, s[0:3], s4 offset:0x0
+; GFX11-NEXT: s_waitcnt lgkmcnt(0)
+; GFX11-NEXT: ; return to shader part epilog
+;
+; GFX1200-LABEL: s_buffer_load_ptr_soffset:
+; GFX1200: ; %bb.0:
+; GFX1200-NEXT: s_add_co_i32 s4, s4, 52
+; GFX1200-NEXT: s_buffer_load_b32 s0, s[0:3], s4 offset:0x0
+; GFX1200-NEXT: s_wait_kmcnt 0x0
+; GFX1200-NEXT: ; return to shader part epilog
+;
+; GFX1250-LABEL: s_buffer_load_ptr_soffset:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: global_prefetch_b8 v0, s[0:1] scope:SCOPE_SE
+; GFX1250-NEXT: v_nop
+; GFX1250-NEXT: s_add_co_i32 s4, s4, 52
+; GFX1250-NEXT: s_buffer_load_b32 s0, s[0:3], s4 offset:0x0 nv
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: ; return to shader part epilog
+;
+; GFX1250-GISEL-LABEL: s_buffer_load_ptr_soffset:
+; GFX1250-GISEL: ; %bb.0:
+; GFX1250-GISEL-NEXT: global_prefetch_b8 v0, s[0:1] scope:SCOPE_SE
+; GFX1250-GISEL-NEXT: v_nop
+; GFX1250-GISEL-NEXT: s_buffer_load_b32 s0, s[0:3], s4 offset:0x34 nv
+; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0
+; GFX1250-GISEL-NEXT: ; return to shader part epilog
+ %gep = getelementptr i8, ptr addrspace(6) %p, i32 52
+ %soffset = ptrtoint ptr addrspace(6) %gep to i32
+ %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %soffset, i32 0)
+ ret i32 %load
+}
----------------
petar-avramovic wrote:
the idea was to see effect of fix in the diff, here https://github.com/llvm/llvm-project/pull/213968/changes#diff-10ef63ce93d7a7cbde5eb3904d39c8421eb1996bffdeb65645da15c99352606bR2191
instead of having new test added and having to wonder how it looked before the fix.
https://github.com/llvm/llvm-project/pull/213967
More information about the llvm-commits
mailing list