xref: /llvm-project/llvm/test/CodeGen/AMDGPU/trap-abis.ll (revision 3277c7cd28154e33637a168acb26cea7ac1f7fff)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc %s -o - -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs | FileCheck --check-prefix=NOHSA-TRAP-GFX900 %s
3; RUN: llc %s -o - -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 -verify-machineinstrs | FileCheck --check-prefix=HSA-TRAP-GFX803 %s
4; RUN: llc %s -o - -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs | FileCheck --check-prefix=HSA-TRAP-GFX900 %s
5; RUN: llc %s -o - -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=-trap-handler -verify-machineinstrs | FileCheck --check-prefix=HSA-NOTRAP-GFX900 %s
6; RUN: llc %s -o - -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -verify-machineinstrs | FileCheck --check-prefix=HSA-TRAP-GFX1100 %s
7; RUN: llc %s -o - -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -verify-machineinstrs | FileCheck --check-prefix=HSA-TRAP-GFX1100-O0 %s
8
9declare void @llvm.trap() #0
10declare void @llvm.debugtrap() #1
11
12define amdgpu_kernel void @trap(ptr addrspace(1) nocapture readonly %arg0) {
13; NOHSA-TRAP-GFX900-LABEL: trap:
14; NOHSA-TRAP-GFX900:       ; %bb.0:
15; NOHSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
16; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
17; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
18; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
19; NOHSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
20; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
21; NOHSA-TRAP-GFX900-NEXT:    s_endpgm
22;
23; HSA-TRAP-GFX803-LABEL: trap:
24; HSA-TRAP-GFX803:       ; %bb.0:
25; HSA-TRAP-GFX803-NEXT:    s_load_dwordx2 s[2:3], s[8:9], 0x0
26; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v2, 1
27; HSA-TRAP-GFX803-NEXT:    s_mov_b64 s[0:1], s[6:7]
28; HSA-TRAP-GFX803-NEXT:    s_waitcnt lgkmcnt(0)
29; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s2
30; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s3
31; HSA-TRAP-GFX803-NEXT:    flat_store_dword v[0:1], v2
32; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
33; HSA-TRAP-GFX803-NEXT:    s_trap 2
34;
35; HSA-TRAP-GFX900-LABEL: trap:
36; HSA-TRAP-GFX900:       ; %bb.0:
37; HSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
38; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
39; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
40; HSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
41; HSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
42; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
43; HSA-TRAP-GFX900-NEXT:    s_trap 2
44;
45; HSA-NOTRAP-GFX900-LABEL: trap:
46; HSA-NOTRAP-GFX900:       ; %bb.0:
47; HSA-NOTRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
48; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
49; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
50; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
51; HSA-NOTRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
52; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
53; HSA-NOTRAP-GFX900-NEXT:    s_endpgm
54;
55; HSA-TRAP-GFX1100-LABEL: trap:
56; HSA-TRAP-GFX1100:       ; %bb.0:
57; HSA-TRAP-GFX1100-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
58; HSA-TRAP-GFX1100-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 1
59; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 ttmp2, m0
60; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
61; HSA-TRAP-GFX1100-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
62; HSA-TRAP-GFX1100-NEXT:    s_waitcnt_vscnt null, 0x0
63; HSA-TRAP-GFX1100-NEXT:    s_trap 2
64; HSA-TRAP-GFX1100-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
65; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
66; HSA-TRAP-GFX1100-NEXT:    s_and_b32 s0, s0, 0x3ff
67; HSA-TRAP-GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
68; HSA-TRAP-GFX1100-NEXT:    s_bitset1_b32 s0, 10
69; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, s0
70; HSA-TRAP-GFX1100-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
71; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, ttmp2
72; HSA-TRAP-GFX1100-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
73; HSA-TRAP-GFX1100-NEXT:    s_sethalt 5
74; HSA-TRAP-GFX1100-NEXT:    s_branch .LBB0_1
75;
76; HSA-TRAP-GFX1100-O0-LABEL: trap:
77; HSA-TRAP-GFX1100-O0:       ; %bb.0:
78; HSA-TRAP-GFX1100-O0-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
79; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v0, 0
80; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v1, 1
81; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
82; HSA-TRAP-GFX1100-O0-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
83; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt_vscnt null, 0x0
84; HSA-TRAP-GFX1100-O0-NEXT:    s_trap 2
85; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
86; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 ttmp2, m0
87; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
88; HSA-TRAP-GFX1100-O0-NEXT:    s_and_b32 s0, s0, 0x3ff
89; HSA-TRAP-GFX1100-O0-NEXT:    s_or_b32 s0, s0, 0x400
90; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, s0
91; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
92; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, ttmp2
93; HSA-TRAP-GFX1100-O0-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
94; HSA-TRAP-GFX1100-O0-NEXT:    s_sethalt 5
95; HSA-TRAP-GFX1100-O0-NEXT:    s_branch .LBB0_1
96  store volatile i32 1, ptr addrspace(1) %arg0
97  call void @llvm.trap()
98  unreachable
99  store volatile i32 2, ptr addrspace(1) %arg0
100  ret void
101}
102
103define amdgpu_kernel void @non_entry_trap(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr {
104; NOHSA-TRAP-GFX900-LABEL: non_entry_trap:
105; NOHSA-TRAP-GFX900:       ; %bb.0: ; %entry
106; NOHSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
107; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
108; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
109; NOHSA-TRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
110; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
111; NOHSA-TRAP-GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, -1, v1
112; NOHSA-TRAP-GFX900-NEXT:    s_cbranch_vccz .LBB1_2
113; NOHSA-TRAP-GFX900-NEXT:  ; %bb.1: ; %ret
114; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 3
115; NOHSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
116; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
117; NOHSA-TRAP-GFX900-NEXT:    s_endpgm
118; NOHSA-TRAP-GFX900-NEXT:  .LBB1_2: ; %trap
119; NOHSA-TRAP-GFX900-NEXT:    s_endpgm
120;
121; HSA-TRAP-GFX803-LABEL: non_entry_trap:
122; HSA-TRAP-GFX803:       ; %bb.0: ; %entry
123; HSA-TRAP-GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
124; HSA-TRAP-GFX803-NEXT:    s_waitcnt lgkmcnt(0)
125; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s0
126; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s1
127; HSA-TRAP-GFX803-NEXT:    flat_load_dword v0, v[0:1] glc
128; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
129; HSA-TRAP-GFX803-NEXT:    v_cmp_eq_u32_e32 vcc, -1, v0
130; HSA-TRAP-GFX803-NEXT:    s_cbranch_vccz .LBB1_2
131; HSA-TRAP-GFX803-NEXT:  ; %bb.1: ; %ret
132; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s0
133; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v2, 3
134; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s1
135; HSA-TRAP-GFX803-NEXT:    flat_store_dword v[0:1], v2
136; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
137; HSA-TRAP-GFX803-NEXT:    s_endpgm
138; HSA-TRAP-GFX803-NEXT:  .LBB1_2: ; %trap
139; HSA-TRAP-GFX803-NEXT:    s_mov_b64 s[0:1], s[6:7]
140; HSA-TRAP-GFX803-NEXT:    s_trap 2
141;
142; HSA-TRAP-GFX900-LABEL: non_entry_trap:
143; HSA-TRAP-GFX900:       ; %bb.0: ; %entry
144; HSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
145; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
146; HSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
147; HSA-TRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
148; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
149; HSA-TRAP-GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, -1, v1
150; HSA-TRAP-GFX900-NEXT:    s_cbranch_vccz .LBB1_2
151; HSA-TRAP-GFX900-NEXT:  ; %bb.1: ; %ret
152; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 3
153; HSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
154; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
155; HSA-TRAP-GFX900-NEXT:    s_endpgm
156; HSA-TRAP-GFX900-NEXT:  .LBB1_2: ; %trap
157; HSA-TRAP-GFX900-NEXT:    s_trap 2
158;
159; HSA-NOTRAP-GFX900-LABEL: non_entry_trap:
160; HSA-NOTRAP-GFX900:       ; %bb.0: ; %entry
161; HSA-NOTRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
162; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
163; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
164; HSA-NOTRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
165; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
166; HSA-NOTRAP-GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, -1, v1
167; HSA-NOTRAP-GFX900-NEXT:    s_cbranch_vccz .LBB1_2
168; HSA-NOTRAP-GFX900-NEXT:  ; %bb.1: ; %ret
169; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 3
170; HSA-NOTRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
171; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
172; HSA-NOTRAP-GFX900-NEXT:    s_endpgm
173; HSA-NOTRAP-GFX900-NEXT:  .LBB1_2: ; %trap
174; HSA-NOTRAP-GFX900-NEXT:    s_endpgm
175;
176; HSA-TRAP-GFX1100-LABEL: non_entry_trap:
177; HSA-TRAP-GFX1100:       ; %bb.0: ; %entry
178; HSA-TRAP-GFX1100-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
179; HSA-TRAP-GFX1100-NEXT:    v_mov_b32_e32 v0, 0
180; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
181; HSA-TRAP-GFX1100-NEXT:    global_load_b32 v1, v0, s[0:1] glc dlc
182; HSA-TRAP-GFX1100-NEXT:    s_waitcnt vmcnt(0)
183; HSA-TRAP-GFX1100-NEXT:    v_cmp_eq_u32_e32 vcc_lo, -1, v1
184; HSA-TRAP-GFX1100-NEXT:    s_cbranch_vccz .LBB1_2
185; HSA-TRAP-GFX1100-NEXT:  ; %bb.1: ; %ret
186; HSA-TRAP-GFX1100-NEXT:    v_mov_b32_e32 v1, 3
187; HSA-TRAP-GFX1100-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
188; HSA-TRAP-GFX1100-NEXT:    s_waitcnt_vscnt null, 0x0
189; HSA-TRAP-GFX1100-NEXT:    s_endpgm
190; HSA-TRAP-GFX1100-NEXT:  .LBB1_2: ; %trap
191; HSA-TRAP-GFX1100-NEXT:    s_trap 2
192; HSA-TRAP-GFX1100-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
193; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 ttmp2, m0
194; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
195; HSA-TRAP-GFX1100-NEXT:    s_and_b32 s0, s0, 0x3ff
196; HSA-TRAP-GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
197; HSA-TRAP-GFX1100-NEXT:    s_bitset1_b32 s0, 10
198; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, s0
199; HSA-TRAP-GFX1100-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
200; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, ttmp2
201; HSA-TRAP-GFX1100-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
202; HSA-TRAP-GFX1100-NEXT:    s_sethalt 5
203; HSA-TRAP-GFX1100-NEXT:    s_branch .LBB1_3
204;
205; HSA-TRAP-GFX1100-O0-LABEL: non_entry_trap:
206; HSA-TRAP-GFX1100-O0:       ; %bb.0: ; %entry
207; HSA-TRAP-GFX1100-O0-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
208; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
209; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b64 s[2:3], s[0:1]
210; HSA-TRAP-GFX1100-O0-NEXT:    ; implicit-def: $vgpr2 : SGPR spill to VGPR lane
211; HSA-TRAP-GFX1100-O0-NEXT:    v_writelane_b32 v2, s2, 0
212; HSA-TRAP-GFX1100-O0-NEXT:    v_writelane_b32 v2, s3, 1
213; HSA-TRAP-GFX1100-O0-NEXT:    s_or_saveexec_b32 s6, -1
214; HSA-TRAP-GFX1100-O0-NEXT:    scratch_store_b32 off, v2, off ; 4-byte Folded Spill
215; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 exec_lo, s6
216; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v0, 0
217; HSA-TRAP-GFX1100-O0-NEXT:    global_load_b32 v0, v0, s[0:1] glc dlc
218; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt vmcnt(0)
219; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 s0, -1
220; HSA-TRAP-GFX1100-O0-NEXT:    ; implicit-def: $sgpr1
221; HSA-TRAP-GFX1100-O0-NEXT:    v_cmp_eq_u32_e64 s0, v0, s0
222; HSA-TRAP-GFX1100-O0-NEXT:    s_and_b32 vcc_lo, exec_lo, s0
223; HSA-TRAP-GFX1100-O0-NEXT:    s_cbranch_vccnz .LBB1_2
224; HSA-TRAP-GFX1100-O0-NEXT:  ; %bb.1: ; %trap
225; HSA-TRAP-GFX1100-O0-NEXT:    s_trap 2
226; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
227; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 ttmp2, m0
228; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
229; HSA-TRAP-GFX1100-O0-NEXT:    s_and_b32 s0, s0, 0x3ff
230; HSA-TRAP-GFX1100-O0-NEXT:    s_or_b32 s0, s0, 0x400
231; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, s0
232; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
233; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, ttmp2
234; HSA-TRAP-GFX1100-O0-NEXT:    s_branch .LBB1_3
235; HSA-TRAP-GFX1100-O0-NEXT:  .LBB1_2: ; %ret
236; HSA-TRAP-GFX1100-O0-NEXT:    s_or_saveexec_b32 s6, -1
237; HSA-TRAP-GFX1100-O0-NEXT:    scratch_load_b32 v2, off, off ; 4-byte Folded Reload
238; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 exec_lo, s6
239; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt vmcnt(0)
240; HSA-TRAP-GFX1100-O0-NEXT:    v_readlane_b32 s0, v2, 0
241; HSA-TRAP-GFX1100-O0-NEXT:    v_readlane_b32 s1, v2, 1
242; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v0, 0
243; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v1, 3
244; HSA-TRAP-GFX1100-O0-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
245; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt_vscnt null, 0x0
246; HSA-TRAP-GFX1100-O0-NEXT:    s_endpgm
247; HSA-TRAP-GFX1100-O0-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
248; HSA-TRAP-GFX1100-O0-NEXT:    s_sethalt 5
249; HSA-TRAP-GFX1100-O0-NEXT:    s_branch .LBB1_3
250entry:
251  %tmp29 = load volatile i32, ptr addrspace(1) %arg0
252  %cmp = icmp eq i32 %tmp29, -1
253  br i1 %cmp, label %ret, label %trap
254
255trap:
256  call void @llvm.trap()
257  unreachable
258
259ret:
260  store volatile i32 3, ptr addrspace(1) %arg0
261  ret void
262}
263
264define amdgpu_kernel void @trap_with_use_after(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {
265; NOHSA-TRAP-GFX900-LABEL: trap_with_use_after:
266; NOHSA-TRAP-GFX900:       ; %bb.0:
267; NOHSA-TRAP-GFX900-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
268; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
269; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
270; NOHSA-TRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
271; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
272; NOHSA-TRAP-GFX900-NEXT:    s_cbranch_execnz .LBB2_2
273; NOHSA-TRAP-GFX900-NEXT:  ; %bb.1:
274; NOHSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[2:3]
275; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
276; NOHSA-TRAP-GFX900-NEXT:  .LBB2_2:
277; NOHSA-TRAP-GFX900-NEXT:    s_endpgm
278;
279; HSA-TRAP-GFX803-LABEL: trap_with_use_after:
280; HSA-TRAP-GFX803:       ; %bb.0:
281; HSA-TRAP-GFX803-NEXT:    s_mov_b64 s[0:1], s[6:7]
282; HSA-TRAP-GFX803-NEXT:    s_load_dwordx4 s[4:7], s[8:9], 0x0
283; HSA-TRAP-GFX803-NEXT:    s_waitcnt lgkmcnt(0)
284; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s4
285; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s5
286; HSA-TRAP-GFX803-NEXT:    flat_load_dword v2, v[0:1] glc
287; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
288; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s6
289; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s7
290; HSA-TRAP-GFX803-NEXT:    s_trap 2
291; HSA-TRAP-GFX803-NEXT:    flat_store_dword v[0:1], v2
292; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
293; HSA-TRAP-GFX803-NEXT:    s_endpgm
294;
295; HSA-TRAP-GFX900-LABEL: trap_with_use_after:
296; HSA-TRAP-GFX900:       ; %bb.0:
297; HSA-TRAP-GFX900-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0
298; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
299; HSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
300; HSA-TRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
301; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
302; HSA-TRAP-GFX900-NEXT:    s_trap 2
303; HSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[2:3]
304; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
305; HSA-TRAP-GFX900-NEXT:    s_endpgm
306;
307; HSA-NOTRAP-GFX900-LABEL: trap_with_use_after:
308; HSA-NOTRAP-GFX900:       ; %bb.0:
309; HSA-NOTRAP-GFX900-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0
310; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
311; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
312; HSA-NOTRAP-GFX900-NEXT:    global_load_dword v1, v0, s[0:1] glc
313; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
314; HSA-NOTRAP-GFX900-NEXT:    s_cbranch_execnz .LBB2_2
315; HSA-NOTRAP-GFX900-NEXT:  ; %bb.1:
316; HSA-NOTRAP-GFX900-NEXT:    global_store_dword v0, v1, s[2:3]
317; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
318; HSA-NOTRAP-GFX900-NEXT:  .LBB2_2:
319; HSA-NOTRAP-GFX900-NEXT:    s_endpgm
320;
321; HSA-TRAP-GFX1100-LABEL: trap_with_use_after:
322; HSA-TRAP-GFX1100:       ; %bb.0:
323; HSA-TRAP-GFX1100-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0
324; HSA-TRAP-GFX1100-NEXT:    v_mov_b32_e32 v0, 0
325; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
326; HSA-TRAP-GFX1100-NEXT:    global_load_b32 v1, v0, s[0:1] glc dlc
327; HSA-TRAP-GFX1100-NEXT:    s_waitcnt vmcnt(0)
328; HSA-TRAP-GFX1100-NEXT:    s_cbranch_execnz .LBB2_2
329; HSA-TRAP-GFX1100-NEXT:  ; %bb.1:
330; HSA-TRAP-GFX1100-NEXT:    global_store_b32 v0, v1, s[2:3] dlc
331; HSA-TRAP-GFX1100-NEXT:    s_waitcnt_vscnt null, 0x0
332; HSA-TRAP-GFX1100-NEXT:    s_endpgm
333; HSA-TRAP-GFX1100-NEXT:  .LBB2_2:
334; HSA-TRAP-GFX1100-NEXT:    s_trap 2
335; HSA-TRAP-GFX1100-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
336; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 ttmp2, m0
337; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
338; HSA-TRAP-GFX1100-NEXT:    s_and_b32 s0, s0, 0x3ff
339; HSA-TRAP-GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
340; HSA-TRAP-GFX1100-NEXT:    s_bitset1_b32 s0, 10
341; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, s0
342; HSA-TRAP-GFX1100-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
343; HSA-TRAP-GFX1100-NEXT:    s_mov_b32 m0, ttmp2
344; HSA-TRAP-GFX1100-NEXT:  .LBB2_3: ; =>This Inner Loop Header: Depth=1
345; HSA-TRAP-GFX1100-NEXT:    s_sethalt 5
346; HSA-TRAP-GFX1100-NEXT:    s_branch .LBB2_3
347;
348; HSA-TRAP-GFX1100-O0-LABEL: trap_with_use_after:
349; HSA-TRAP-GFX1100-O0:       ; %bb.0:
350; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v0, 0
351; HSA-TRAP-GFX1100-O0-NEXT:    scratch_store_b32 off, v0, off offset:8 ; 4-byte Folded Spill
352; HSA-TRAP-GFX1100-O0-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
353; HSA-TRAP-GFX1100-O0-NEXT:    s_load_b64 s[2:3], s[4:5], 0x8
354; HSA-TRAP-GFX1100-O0-NEXT:    ; implicit-def: $vgpr2 : SGPR spill to VGPR lane
355; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
356; HSA-TRAP-GFX1100-O0-NEXT:    v_writelane_b32 v2, s2, 0
357; HSA-TRAP-GFX1100-O0-NEXT:    v_writelane_b32 v2, s3, 1
358; HSA-TRAP-GFX1100-O0-NEXT:    s_or_saveexec_b32 s6, -1
359; HSA-TRAP-GFX1100-O0-NEXT:    scratch_store_b32 off, v2, off ; 4-byte Folded Spill
360; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 exec_lo, s6
361; HSA-TRAP-GFX1100-O0-NEXT:    global_load_b32 v0, v0, s[0:1] glc dlc
362; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt vmcnt(0)
363; HSA-TRAP-GFX1100-O0-NEXT:    scratch_store_b32 off, v0, off offset:4 ; 4-byte Folded Spill
364; HSA-TRAP-GFX1100-O0-NEXT:    s_cbranch_execnz .LBB2_2
365; HSA-TRAP-GFX1100-O0-NEXT:  ; %bb.1:
366; HSA-TRAP-GFX1100-O0-NEXT:    s_or_saveexec_b32 s6, -1
367; HSA-TRAP-GFX1100-O0-NEXT:    scratch_load_b32 v2, off, off ; 4-byte Folded Reload
368; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 exec_lo, s6
369; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt vmcnt(0)
370; HSA-TRAP-GFX1100-O0-NEXT:    v_readlane_b32 s0, v2, 0
371; HSA-TRAP-GFX1100-O0-NEXT:    v_readlane_b32 s1, v2, 1
372; HSA-TRAP-GFX1100-O0-NEXT:    scratch_load_b32 v0, off, off offset:8 ; 4-byte Folded Reload
373; HSA-TRAP-GFX1100-O0-NEXT:    scratch_load_b32 v1, off, off offset:4 ; 4-byte Folded Reload
374; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt vmcnt(0)
375; HSA-TRAP-GFX1100-O0-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
376; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt_vscnt null, 0x0
377; HSA-TRAP-GFX1100-O0-NEXT:    s_endpgm
378; HSA-TRAP-GFX1100-O0-NEXT:  .LBB2_2:
379; HSA-TRAP-GFX1100-O0-NEXT:    s_trap 2
380; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg_rtn_b32 s0, sendmsg(MSG_RTN_GET_DOORBELL)
381; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 ttmp2, m0
382; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
383; HSA-TRAP-GFX1100-O0-NEXT:    s_and_b32 s0, s0, 0x3ff
384; HSA-TRAP-GFX1100-O0-NEXT:    s_or_b32 s0, s0, 0x400
385; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, s0
386; HSA-TRAP-GFX1100-O0-NEXT:    s_sendmsg sendmsg(MSG_INTERRUPT)
387; HSA-TRAP-GFX1100-O0-NEXT:    s_mov_b32 m0, ttmp2
388; HSA-TRAP-GFX1100-O0-NEXT:  .LBB2_3: ; =>This Inner Loop Header: Depth=1
389; HSA-TRAP-GFX1100-O0-NEXT:    s_sethalt 5
390; HSA-TRAP-GFX1100-O0-NEXT:    s_branch .LBB2_3
391  %tmp = load volatile i32, ptr addrspace(1) %arg0
392  call void @llvm.trap()
393  store volatile i32 %tmp, ptr addrspace(1) %arg1
394  ret void
395}
396
397define amdgpu_kernel void @debugtrap(ptr addrspace(1) nocapture readonly %arg0) {
398; NOHSA-TRAP-GFX900-LABEL: debugtrap:
399; NOHSA-TRAP-GFX900:       ; %bb.0:
400; NOHSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
401; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
402; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
403; NOHSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v2, 2
404; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
405; NOHSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
406; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
407; NOHSA-TRAP-GFX900-NEXT:    global_store_dword v0, v2, s[0:1]
408; NOHSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
409; NOHSA-TRAP-GFX900-NEXT:    s_endpgm
410;
411; HSA-TRAP-GFX803-LABEL: debugtrap:
412; HSA-TRAP-GFX803:       ; %bb.0:
413; HSA-TRAP-GFX803-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
414; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v2, 1
415; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v3, 2
416; HSA-TRAP-GFX803-NEXT:    s_waitcnt lgkmcnt(0)
417; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v0, s0
418; HSA-TRAP-GFX803-NEXT:    v_mov_b32_e32 v1, s1
419; HSA-TRAP-GFX803-NEXT:    flat_store_dword v[0:1], v2
420; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
421; HSA-TRAP-GFX803-NEXT:    s_trap 3
422; HSA-TRAP-GFX803-NEXT:    flat_store_dword v[0:1], v3
423; HSA-TRAP-GFX803-NEXT:    s_waitcnt vmcnt(0)
424; HSA-TRAP-GFX803-NEXT:    s_endpgm
425;
426; HSA-TRAP-GFX900-LABEL: debugtrap:
427; HSA-TRAP-GFX900:       ; %bb.0:
428; HSA-TRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
429; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
430; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
431; HSA-TRAP-GFX900-NEXT:    v_mov_b32_e32 v2, 2
432; HSA-TRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
433; HSA-TRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
434; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
435; HSA-TRAP-GFX900-NEXT:    s_trap 3
436; HSA-TRAP-GFX900-NEXT:    global_store_dword v0, v2, s[0:1]
437; HSA-TRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
438; HSA-TRAP-GFX900-NEXT:    s_endpgm
439;
440; HSA-NOTRAP-GFX900-LABEL: debugtrap:
441; HSA-NOTRAP-GFX900:       ; %bb.0:
442; HSA-NOTRAP-GFX900-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
443; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v0, 0
444; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v1, 1
445; HSA-NOTRAP-GFX900-NEXT:    v_mov_b32_e32 v2, 2
446; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt lgkmcnt(0)
447; HSA-NOTRAP-GFX900-NEXT:    global_store_dword v0, v1, s[0:1]
448; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
449; HSA-NOTRAP-GFX900-NEXT:    global_store_dword v0, v2, s[0:1]
450; HSA-NOTRAP-GFX900-NEXT:    s_waitcnt vmcnt(0)
451; HSA-NOTRAP-GFX900-NEXT:    s_endpgm
452;
453; HSA-TRAP-GFX1100-LABEL: debugtrap:
454; HSA-TRAP-GFX1100:       ; %bb.0:
455; HSA-TRAP-GFX1100-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
456; HSA-TRAP-GFX1100-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 1
457; HSA-TRAP-GFX1100-NEXT:    v_mov_b32_e32 v2, 2
458; HSA-TRAP-GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
459; HSA-TRAP-GFX1100-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
460; HSA-TRAP-GFX1100-NEXT:    s_waitcnt_vscnt null, 0x0
461; HSA-TRAP-GFX1100-NEXT:    s_trap 3
462; HSA-TRAP-GFX1100-NEXT:    global_store_b32 v0, v2, s[0:1] dlc
463; HSA-TRAP-GFX1100-NEXT:    s_waitcnt_vscnt null, 0x0
464; HSA-TRAP-GFX1100-NEXT:    s_endpgm
465;
466; HSA-TRAP-GFX1100-O0-LABEL: debugtrap:
467; HSA-TRAP-GFX1100-O0:       ; %bb.0:
468; HSA-TRAP-GFX1100-O0-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0
469; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v0, 0
470; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v1, 1
471; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt lgkmcnt(0)
472; HSA-TRAP-GFX1100-O0-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
473; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt_vscnt null, 0x0
474; HSA-TRAP-GFX1100-O0-NEXT:    s_trap 3
475; HSA-TRAP-GFX1100-O0-NEXT:    v_mov_b32_e32 v1, 2
476; HSA-TRAP-GFX1100-O0-NEXT:    global_store_b32 v0, v1, s[0:1] dlc
477; HSA-TRAP-GFX1100-O0-NEXT:    s_waitcnt_vscnt null, 0x0
478; HSA-TRAP-GFX1100-O0-NEXT:    s_endpgm
479  store volatile i32 1, ptr addrspace(1) %arg0
480  call void @llvm.debugtrap()
481  store volatile i32 2, ptr addrspace(1) %arg0
482  ret void
483}
484
485attributes #0 = { nounwind noreturn }
486attributes #1 = { nounwind }
487
488!llvm.module.flags = !{!0}
489!0 = !{i32 1, !"amdhsa_code_object_version", i32 400}
490