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
3
4
4
5
; The register coalescer introduces a verifier error which later
5
6
; results in a crash during scheduling.
6
7
7
8
declare i32 @llvm.amdgcn.workitem.id.x () #0
8
9
9
10
define 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
10
70
bb:
11
71
%id.x = call i32 @llvm.amdgcn.workitem.id.x ()
12
72
%cmp0 = icmp eq i32 %id.x , 0
13
73
br i1 %cmp0 , label %bb3 , label %bb4
14
74
15
75
bb3: ; preds = %bb
16
- %tmp = ashr exact i32 undef , 8
76
+ %tmp = ashr exact i32 poison , 8
17
77
br label %bb6
18
78
19
79
bb4: ; preds = %bb6, %bb
@@ -28,7 +88,7 @@ bb6: ; preds = %bb6, %bb3
28
88
%tmp11 = getelementptr inbounds <2 x i32 >, ptr addrspace (1 ) %arg , i64 %tmp10
29
89
%tmp12 = load <2 x i32 >, ptr addrspace (1 ) %tmp11 , align 8
30
90
%tmp13 = add <2 x i32 > %tmp12 , %tmp7
31
- %tmp14 = icmp slt i32 undef , %arg2
91
+ %tmp14 = icmp slt i32 poison , %arg2
32
92
br i1 %tmp14 , label %bb6 , label %bb4
33
93
34
94
bb15: ; preds = %bb4
0 commit comments