1- ; RUN: llc -mtriple=amdgcn -verify-machineinstrs -o /dev/null < %s
2- ; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs -o /dev/null < %s
1+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+ ; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s
3+ ; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=GFX8 %s
34
45; The register coalescer introduces a verifier error which later
56; results in a crash during scheduling.
67
78declare i32 @llvm.amdgcn.workitem.id.x () #0
89
910define amdgpu_kernel void @reg_coalescer_breaks_dead (ptr addrspace (1 ) nocapture readonly %arg , i32 %arg1 , i32 %arg2 , i32 %arg3 , i1 %c0 ) #1 {
11+ ; GFX6-LABEL: reg_coalescer_breaks_dead:
12+ ; GFX6: ; %bb.0: ; %bb
13+ ; GFX6-NEXT: v_mov_b32_e32 v1, 0
14+ ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
15+ ; GFX6-NEXT: v_mov_b32_e32 v2, 0
16+ ; GFX6-NEXT: s_and_saveexec_b64 s[0:1], vcc
17+ ; GFX6-NEXT: s_cbranch_execz .LBB0_2
18+ ; GFX6-NEXT: ; %bb.1: ; %bb3
19+ ; GFX6-NEXT: s_load_dword s2, s[4:5], 0xb
20+ ; GFX6-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x9
21+ ; GFX6-NEXT: s_waitcnt lgkmcnt(0)
22+ ; GFX6-NEXT: s_ashr_i32 s3, s2, 31
23+ ; GFX6-NEXT: s_lshl_b64 s[2:3], s[2:3], 3
24+ ; GFX6-NEXT: s_add_u32 s2, s6, s2
25+ ; GFX6-NEXT: s_addc_u32 s3, s7, s3
26+ ; GFX6-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0
27+ ; GFX6-NEXT: s_waitcnt lgkmcnt(0)
28+ ; GFX6-NEXT: v_mov_b32_e32 v1, s2
29+ ; GFX6-NEXT: v_mov_b32_e32 v2, s3
30+ ; GFX6-NEXT: .LBB0_2: ; %bb4
31+ ; GFX6-NEXT: s_or_b64 exec, exec, s[0:1]
32+ ; GFX6-NEXT: s_load_dword s0, s[4:5], 0xe
33+ ; GFX6-NEXT: s_waitcnt lgkmcnt(0)
34+ ; GFX6-NEXT: s_bitcmp0_b32 s0, 0
35+ ; GFX6-NEXT: s_cbranch_scc1 .LBB0_4
36+ ; GFX6-NEXT: ; %bb.3: ; %bb15
37+ ; GFX6-NEXT: s_mov_b32 m0, -1
38+ ; GFX6-NEXT: ds_write_b64 v0, v[1:2]
39+ ; GFX6-NEXT: .LBB0_4: ; %bb16
40+ ;
41+ ; GFX8-LABEL: reg_coalescer_breaks_dead:
42+ ; GFX8: ; %bb.0: ; %bb
43+ ; GFX8-NEXT: v_mov_b32_e32 v1, 0
44+ ; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
45+ ; GFX8-NEXT: v_mov_b32_e32 v2, 0
46+ ; GFX8-NEXT: s_and_saveexec_b64 s[0:1], vcc
47+ ; GFX8-NEXT: s_cbranch_execz .LBB0_2
48+ ; GFX8-NEXT: ; %bb.1: ; %bb3
49+ ; GFX8-NEXT: s_load_dword s2, s[4:5], 0x2c
50+ ; GFX8-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24
51+ ; GFX8-NEXT: s_waitcnt lgkmcnt(0)
52+ ; GFX8-NEXT: s_ashr_i32 s3, s2, 31
53+ ; GFX8-NEXT: s_lshl_b64 s[2:3], s[2:3], 3
54+ ; GFX8-NEXT: s_add_u32 s2, s6, s2
55+ ; GFX8-NEXT: s_addc_u32 s3, s7, s3
56+ ; GFX8-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0
57+ ; GFX8-NEXT: s_waitcnt lgkmcnt(0)
58+ ; GFX8-NEXT: v_mov_b32_e32 v1, s2
59+ ; GFX8-NEXT: v_mov_b32_e32 v2, s3
60+ ; GFX8-NEXT: .LBB0_2: ; %bb4
61+ ; GFX8-NEXT: s_or_b64 exec, exec, s[0:1]
62+ ; GFX8-NEXT: s_load_dword s0, s[4:5], 0x38
63+ ; GFX8-NEXT: s_waitcnt lgkmcnt(0)
64+ ; GFX8-NEXT: s_bitcmp0_b32 s0, 0
65+ ; GFX8-NEXT: s_cbranch_scc1 .LBB0_4
66+ ; GFX8-NEXT: ; %bb.3: ; %bb15
67+ ; GFX8-NEXT: s_mov_b32 m0, -1
68+ ; GFX8-NEXT: ds_write_b64 v0, v[1:2]
69+ ; GFX8-NEXT: .LBB0_4: ; %bb16
1070bb:
1171 %id.x = call i32 @llvm.amdgcn.workitem.id.x ()
1272 %cmp0 = icmp eq i32 %id.x , 0
1373 br i1 %cmp0 , label %bb3 , label %bb4
1474
1575bb3: ; preds = %bb
16- %tmp = ashr exact i32 undef , 8
76+ %tmp = ashr exact i32 poison , 8
1777 br label %bb6
1878
1979bb4: ; preds = %bb6, %bb
@@ -28,7 +88,7 @@ bb6: ; preds = %bb6, %bb3
2888 %tmp11 = getelementptr inbounds <2 x i32 >, ptr addrspace (1 ) %arg , i64 %tmp10
2989 %tmp12 = load <2 x i32 >, ptr addrspace (1 ) %tmp11 , align 8
3090 %tmp13 = add <2 x i32 > %tmp12 , %tmp7
31- %tmp14 = icmp slt i32 undef , %arg2
91+ %tmp14 = icmp slt i32 poison , %arg2
3292 br i1 %tmp14 , label %bb6 , label %bb4
3393
3494bb15: ; preds = %bb4
0 commit comments