Skip to content

Commit 5aa3171

Browse files
authored
AMDGPU: Add regression test for multiple frame index lowering (#140784)
Failures appeared after #140587 but this case wasn't covered
1 parent 26d9cb1 commit 5aa3171

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

llvm/test/CodeGen/AMDGPU/frame-index-elimination.ll

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,4 +424,115 @@ vector.body.i.i.i.i: ; preds = %.shuffle.then.i.i.i
424424
ret void
425425
}
426426

427+
; Check that we do not produce a verifier error after prolog
428+
; epilog. alloca1 and alloca2 will lower to literals.
429+
430+
; GCN-LABEL: {{^}}s_multiple_frame_indexes_literal_offsets:
431+
; GCN: s_load_dword [[ARG0:s[0-9]+]]
432+
; GCN: s_movk_i32 [[ALLOCA1:s[0-9]+]], 0x44
433+
; GCN: s_cmp_eq_u32 [[ARG0]], 0
434+
; GCN: s_cselect_b32 [[SELECT:s[0-9]+]], [[ALLOCA1]], 0x48
435+
; GCN: s_mov_b32 [[ALLOCA0:s[0-9]+]], 0
436+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
437+
define amdgpu_kernel void @s_multiple_frame_indexes_literal_offsets(i32 inreg %arg0) #0 {
438+
%alloca0 = alloca [17 x i32], align 8, addrspace(5)
439+
%alloca1 = alloca i32, align 4, addrspace(5)
440+
%alloca2 = alloca i32, align 4, addrspace(5)
441+
%cmp = icmp eq i32 %arg0, 0
442+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
443+
call void asm sideeffect "; use $0, $1","s,s"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
444+
ret void
445+
}
446+
447+
; %alloca1 or alloca2 will lower to an inline constant, and one will
448+
; be a literal, so we could fold both indexes into the instruction.
449+
450+
; GCN-LABEL: {{^}}s_multiple_frame_indexes_one_imm_one_literal_offset:
451+
; GCN: s_load_dword [[ARG0:s[0-9]+]]
452+
; GCN: s_mov_b32 [[ALLOCA1:s[0-9]+]], 64
453+
; GCN: s_cmp_eq_u32 [[ARG0]], 0
454+
; GCN: s_cselect_b32 [[SELECT:s[0-9]+]], [[ALLOCA1]], 0x44
455+
; GCN: s_mov_b32 [[ALLOCA0:s[0-9]+]], 0
456+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
457+
define amdgpu_kernel void @s_multiple_frame_indexes_one_imm_one_literal_offset(i32 inreg %arg0) #0 {
458+
%alloca0 = alloca [16 x i32], align 8, addrspace(5)
459+
%alloca1 = alloca i32, align 4, addrspace(5)
460+
%alloca2 = alloca i32, align 4, addrspace(5)
461+
%cmp = icmp eq i32 %arg0, 0
462+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
463+
call void asm sideeffect "; use $0, $1","s,s"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
464+
ret void
465+
}
466+
467+
; GCN-LABEL: {{^}}s_multiple_frame_indexes_imm_offsets:
468+
; GCN: s_load_dword [[ARG0:s[0-9]+]]
469+
; GCN: s_mov_b32 [[ALLOCA1:s[0-9]+]], 16
470+
; GCN: s_cmp_eq_u32 [[ARG0]], 0
471+
; GCN: s_cselect_b32 [[SELECT:s[0-9]+]], [[ALLOCA1]], 20
472+
; GCN: s_mov_b32 [[ALLOCA0:s[0-9]+]], 0
473+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
474+
define amdgpu_kernel void @s_multiple_frame_indexes_imm_offsets(i32 inreg %arg0) #0 {
475+
%alloca0 = alloca [4 x i32], align 8, addrspace(5)
476+
%alloca1 = alloca i32, align 4, addrspace(5)
477+
%alloca2 = alloca i32, align 4, addrspace(5)
478+
%cmp = icmp eq i32 %arg0, 0
479+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
480+
call void asm sideeffect "; use $0, $1","s,s"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
481+
ret void
482+
}
483+
484+
; GCN-LABEL: {{^}}v_multiple_frame_indexes_literal_offsets:
485+
; GCN: v_mov_b32_e32 [[ALLOCA1:v[0-9]+]], 0x48
486+
; GCN: v_mov_b32_e32 [[ALLOCA2:v[0-9]+]], 0x44
487+
; GCN: v_cmp_eq_u32_e32 vcc, 0, v0
488+
; GCN: v_cndmask_b32_e32 [[SELECT:v[0-9]+]], [[ALLOCA1]], [[ALLOCA2]], vcc
489+
; GCN: v_mov_b32_e32 [[ALLOCA0:v[0-9]+]], 0{{$}}
490+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
491+
define amdgpu_kernel void @v_multiple_frame_indexes_literal_offsets() #0 {
492+
%vgpr = call i32 @llvm.amdgcn.workitem.id.x()
493+
%alloca0 = alloca [17 x i32], align 8, addrspace(5)
494+
%alloca1 = alloca i32, align 4, addrspace(5)
495+
%alloca2 = alloca i32, align 4, addrspace(5)
496+
%cmp = icmp eq i32 %vgpr, 0
497+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
498+
call void asm sideeffect "; use $0, $1","v,v"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
499+
ret void
500+
}
501+
502+
; GCN-LABEL: {{^}}v_multiple_frame_indexes_one_imm_one_literal_offset:
503+
; GCN: v_mov_b32_e32 [[ALLOCA1:v[0-9]+]], 0x44
504+
; GCN: v_mov_b32_e32 [[ALLOCA2:v[0-9]+]], 64
505+
; GCN: v_cmp_eq_u32_e32 vcc, 0, v0
506+
; GCN: v_cndmask_b32_e32 [[SELECT:v[0-9]+]], [[ALLOCA1]], [[ALLOCA2]], vcc
507+
; GCN: v_mov_b32_e32 [[ALLOCA0:v[0-9]+]], 0{{$}}
508+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
509+
define amdgpu_kernel void @v_multiple_frame_indexes_one_imm_one_literal_offset() #0 {
510+
%vgpr = call i32 @llvm.amdgcn.workitem.id.x()
511+
%alloca0 = alloca [16 x i32], align 8, addrspace(5)
512+
%alloca1 = alloca i32, align 4, addrspace(5)
513+
%alloca2 = alloca i32, align 4, addrspace(5)
514+
%cmp = icmp eq i32 %vgpr, 0
515+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
516+
call void asm sideeffect "; use $0, $1","v,v"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
517+
ret void
518+
}
519+
520+
; GCN-LABEL: {{^}}v_multiple_frame_indexes_imm_offsets:
521+
; GCN: v_mov_b32_e32 [[ALLOCA1:v[0-9]+]], 12
522+
; GCN: v_mov_b32_e32 [[ALLOCA2:v[0-9]+]], 8
523+
; GCN: v_cmp_eq_u32_e32 vcc, 0, v0
524+
; GCN: v_cndmask_b32_e32 [[SELECT:v[0-9]+]], [[ALLOCA1]], [[ALLOCA2]], vcc
525+
; GCN: v_mov_b32_e32 [[ALLOCA0:v[0-9]+]], 0{{$}}
526+
; GCN: ; use [[SELECT]], [[ALLOCA0]]
527+
define amdgpu_kernel void @v_multiple_frame_indexes_imm_offsets() #0 {
528+
%vgpr = call i32 @llvm.amdgcn.workitem.id.x()
529+
%alloca0 = alloca [2 x i32], align 8, addrspace(5)
530+
%alloca1 = alloca i32, align 4, addrspace(5)
531+
%alloca2 = alloca i32, align 4, addrspace(5)
532+
%cmp = icmp eq i32 %vgpr, 0
533+
%select = select i1 %cmp, ptr addrspace(5) %alloca1, ptr addrspace(5) %alloca2
534+
call void asm sideeffect "; use $0, $1","v,v"(ptr addrspace(5) %select, ptr addrspace(5) %alloca0)
535+
ret void
536+
}
537+
427538
attributes #0 = { nounwind }

0 commit comments

Comments
 (0)