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