1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --amdgpu-enable-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_OPT %s 3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --mattr=+architected-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_ARCH %s 4 5declare void @extern_func() #0 6 7define amdgpu_kernel void @stack_object_addrspacecast_in_kernel_no_calls() { 8; FLAT_SCR_OPT-LABEL: stack_object_addrspacecast_in_kernel_no_calls: 9; FLAT_SCR_OPT: ; %bb.0: 10; FLAT_SCR_OPT-NEXT: s_add_u32 s0, s0, s3 11; FLAT_SCR_OPT-NEXT: s_addc_u32 s1, s1, 0 12; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s0 13; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1 14; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v0, 4 15; FLAT_SCR_OPT-NEXT: s_getreg_b32 s0, hwreg(HW_REG_SH_MEM_BASES, 0, 16) 16; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v2, 0 17; FLAT_SCR_OPT-NEXT: s_lshl_b32 s0, s0, 16 18; FLAT_SCR_OPT-NEXT: v_cmp_ne_u32_e32 vcc_lo, -1, v0 19; FLAT_SCR_OPT-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc_lo 20; FLAT_SCR_OPT-NEXT: v_cndmask_b32_e64 v1, 0, s0, vcc_lo 21; FLAT_SCR_OPT-NEXT: flat_store_dword v[0:1], v2 22; FLAT_SCR_OPT-NEXT: s_waitcnt_vscnt null, 0x0 23; FLAT_SCR_OPT-NEXT: s_endpgm 24; 25; FLAT_SCR_ARCH-LABEL: stack_object_addrspacecast_in_kernel_no_calls: 26; FLAT_SCR_ARCH: ; %bb.0: 27; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v0, 4 28; FLAT_SCR_ARCH-NEXT: s_getreg_b32 s0, hwreg(HW_REG_SH_MEM_BASES, 0, 16) 29; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v2, 0 30; FLAT_SCR_ARCH-NEXT: s_lshl_b32 s0, s0, 16 31; FLAT_SCR_ARCH-NEXT: v_cmp_ne_u32_e32 vcc_lo, -1, v0 32; FLAT_SCR_ARCH-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc_lo 33; FLAT_SCR_ARCH-NEXT: v_cndmask_b32_e64 v1, 0, s0, vcc_lo 34; FLAT_SCR_ARCH-NEXT: flat_store_dword v[0:1], v2 35; FLAT_SCR_ARCH-NEXT: s_waitcnt_vscnt null, 0x0 36; FLAT_SCR_ARCH-NEXT: s_endpgm 37 %alloca = alloca i32, addrspace(5) 38 %cast = addrspacecast i32 addrspace(5)* %alloca to i32* 39 store volatile i32 0, i32* %cast 40 ret void 41} 42 43define amdgpu_kernel void @stack_object_in_kernel_no_calls() { 44; FLAT_SCR_OPT-LABEL: stack_object_in_kernel_no_calls: 45; FLAT_SCR_OPT: ; %bb.0: 46; FLAT_SCR_OPT-NEXT: s_add_u32 s0, s0, s3 47; FLAT_SCR_OPT-NEXT: s_addc_u32 s1, s1, 0 48; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s0 49; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1 50; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v0, 0 51; FLAT_SCR_OPT-NEXT: s_mov_b32 vcc_lo, 0 52; FLAT_SCR_OPT-NEXT: scratch_store_dword off, v0, vcc_lo offset:4 53; FLAT_SCR_OPT-NEXT: s_waitcnt_vscnt null, 0x0 54; FLAT_SCR_OPT-NEXT: s_endpgm 55; 56; FLAT_SCR_ARCH-LABEL: stack_object_in_kernel_no_calls: 57; FLAT_SCR_ARCH: ; %bb.0: 58; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v0, 0 59; FLAT_SCR_ARCH-NEXT: s_mov_b32 vcc_lo, 0 60; FLAT_SCR_ARCH-NEXT: scratch_store_dword off, v0, vcc_lo offset:4 61; FLAT_SCR_ARCH-NEXT: s_waitcnt_vscnt null, 0x0 62; FLAT_SCR_ARCH-NEXT: s_endpgm 63 %alloca = alloca i32, addrspace(5) 64 store volatile i32 0, i32 addrspace(5)* %alloca 65 ret void 66} 67 68define amdgpu_kernel void @kernel_calls_no_stack() { 69; FLAT_SCR_OPT-LABEL: kernel_calls_no_stack: 70; FLAT_SCR_OPT: ; %bb.0: 71; FLAT_SCR_OPT-NEXT: s_add_u32 s8, s8, s13 72; FLAT_SCR_OPT-NEXT: s_mov_b32 s32, 0 73; FLAT_SCR_OPT-NEXT: s_addc_u32 s9, s9, 0 74; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s8 75; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s9 76; FLAT_SCR_OPT-NEXT: s_mov_b64 s[8:9], s[4:5] 77; FLAT_SCR_OPT-NEXT: s_getpc_b64 s[4:5] 78; FLAT_SCR_OPT-NEXT: s_add_u32 s4, s4, extern_func@gotpcrel32@lo+4 79; FLAT_SCR_OPT-NEXT: s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+12 80; FLAT_SCR_OPT-NEXT: v_lshlrev_b32_e32 v2, 20, v2 81; FLAT_SCR_OPT-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0 82; FLAT_SCR_OPT-NEXT: v_lshlrev_b32_e32 v1, 10, v1 83; FLAT_SCR_OPT-NEXT: s_mov_b32 s14, s12 84; FLAT_SCR_OPT-NEXT: s_mov_b32 s13, s11 85; FLAT_SCR_OPT-NEXT: s_mov_b32 s12, s10 86; FLAT_SCR_OPT-NEXT: s_mov_b64 s[10:11], s[6:7] 87; FLAT_SCR_OPT-NEXT: v_or3_b32 v31, v0, v1, v2 88; FLAT_SCR_OPT-NEXT: s_mov_b64 s[4:5], s[0:1] 89; FLAT_SCR_OPT-NEXT: s_mov_b64 s[6:7], s[2:3] 90; FLAT_SCR_OPT-NEXT: s_waitcnt lgkmcnt(0) 91; FLAT_SCR_OPT-NEXT: s_swappc_b64 s[30:31], s[16:17] 92; FLAT_SCR_OPT-NEXT: s_endpgm 93; 94; FLAT_SCR_ARCH-LABEL: kernel_calls_no_stack: 95; FLAT_SCR_ARCH: ; %bb.0: 96; FLAT_SCR_ARCH-NEXT: s_mov_b32 s13, s9 97; FLAT_SCR_ARCH-NEXT: s_mov_b32 s12, s8 98; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[8:9], s[4:5] 99; FLAT_SCR_ARCH-NEXT: s_getpc_b64 s[4:5] 100; FLAT_SCR_ARCH-NEXT: s_add_u32 s4, s4, extern_func@gotpcrel32@lo+4 101; FLAT_SCR_ARCH-NEXT: s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+12 102; FLAT_SCR_ARCH-NEXT: v_lshlrev_b32_e32 v2, 20, v2 103; FLAT_SCR_ARCH-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0 104; FLAT_SCR_ARCH-NEXT: v_lshlrev_b32_e32 v1, 10, v1 105; FLAT_SCR_ARCH-NEXT: s_mov_b32 s14, s10 106; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[10:11], s[6:7] 107; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[4:5], s[0:1] 108; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[6:7], s[2:3] 109; FLAT_SCR_ARCH-NEXT: v_or3_b32 v31, v0, v1, v2 110; FLAT_SCR_ARCH-NEXT: s_mov_b32 s32, 0 111; FLAT_SCR_ARCH-NEXT: s_waitcnt lgkmcnt(0) 112; FLAT_SCR_ARCH-NEXT: s_swappc_b64 s[30:31], s[16:17] 113; FLAT_SCR_ARCH-NEXT: s_endpgm 114 call void @extern_func() 115 ret void 116} 117 118define amdgpu_kernel void @test(i32 addrspace(1)* %out, i32 %in) { 119; FLAT_SCR_OPT-LABEL: test: 120; FLAT_SCR_OPT: ; %bb.0: 121; FLAT_SCR_OPT-NEXT: s_add_u32 s2, s2, s5 122; FLAT_SCR_OPT-NEXT: s_addc_u32 s3, s3, 0 123; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s2 124; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s3 125; FLAT_SCR_OPT-NEXT: s_load_dwordx2 s[2:3], s[0:1], 0x0 126; FLAT_SCR_OPT-NEXT: s_mov_b32 s104, exec_lo 127; FLAT_SCR_OPT-NEXT: s_mov_b32 exec_lo, 3 128; FLAT_SCR_OPT-NEXT: s_mov_b32 s105, 0 129; FLAT_SCR_OPT-NEXT: scratch_store_dword off, v72, s105 130; FLAT_SCR_OPT-NEXT: s_waitcnt lgkmcnt(0) 131; FLAT_SCR_OPT-NEXT: v_writelane_b32 v72, s2, 0 132; FLAT_SCR_OPT-NEXT: s_mov_b32 s105, 4 133; FLAT_SCR_OPT-NEXT: v_writelane_b32 v72, s3, 1 134; FLAT_SCR_OPT-NEXT: scratch_store_dword off, v72, s105 ; 4-byte Folded Spill 135; FLAT_SCR_OPT-NEXT: s_waitcnt_depctr 0xffe3 136; FLAT_SCR_OPT-NEXT: s_mov_b32 s105, 0 137; FLAT_SCR_OPT-NEXT: scratch_load_dword v72, off, s105 138; FLAT_SCR_OPT-NEXT: s_waitcnt vmcnt(0) 139; FLAT_SCR_OPT-NEXT: s_waitcnt_depctr 0xffe3 140; FLAT_SCR_OPT-NEXT: s_mov_b32 exec_lo, s104 141; FLAT_SCR_OPT-NEXT: s_load_dword vcc_lo, s[0:1], 0x8 142; FLAT_SCR_OPT-NEXT: ; kill: killed $sgpr0_sgpr1 143; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 144; FLAT_SCR_OPT-NEXT: ;;#ASMEND 145; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 146; FLAT_SCR_OPT-NEXT: ;;#ASMEND 147; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 148; FLAT_SCR_OPT-NEXT: ;;#ASMEND 149; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 150; FLAT_SCR_OPT-NEXT: ;;#ASMEND 151; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 152; FLAT_SCR_OPT-NEXT: ;;#ASMEND 153; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 154; FLAT_SCR_OPT-NEXT: ;;#ASMEND 155; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 156; FLAT_SCR_OPT-NEXT: ;;#ASMEND 157; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 158; FLAT_SCR_OPT-NEXT: ;;#ASMEND 159; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 160; FLAT_SCR_OPT-NEXT: ;;#ASMEND 161; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 162; FLAT_SCR_OPT-NEXT: ;;#ASMEND 163; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 164; FLAT_SCR_OPT-NEXT: ;;#ASMEND 165; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 166; FLAT_SCR_OPT-NEXT: ;;#ASMEND 167; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 168; FLAT_SCR_OPT-NEXT: ;;#ASMEND 169; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 170; FLAT_SCR_OPT-NEXT: ;;#ASMEND 171; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 172; FLAT_SCR_OPT-NEXT: ;;#ASMEND 173; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 174; FLAT_SCR_OPT-NEXT: ;;#ASMEND 175; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 176; FLAT_SCR_OPT-NEXT: ;;#ASMEND 177; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 178; FLAT_SCR_OPT-NEXT: ;;#ASMEND 179; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 180; FLAT_SCR_OPT-NEXT: ;;#ASMEND 181; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 182; FLAT_SCR_OPT-NEXT: ;;#ASMEND 183; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 184; FLAT_SCR_OPT-NEXT: ;;#ASMEND 185; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 186; FLAT_SCR_OPT-NEXT: ;;#ASMEND 187; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 188; FLAT_SCR_OPT-NEXT: ;;#ASMEND 189; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 190; FLAT_SCR_OPT-NEXT: ;;#ASMEND 191; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 192; FLAT_SCR_OPT-NEXT: ;;#ASMEND 193; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 194; FLAT_SCR_OPT-NEXT: ;;#ASMEND 195; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 196; FLAT_SCR_OPT-NEXT: ;;#ASMEND 197; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 198; FLAT_SCR_OPT-NEXT: ;;#ASMEND 199; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 200; FLAT_SCR_OPT-NEXT: ;;#ASMEND 201; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 202; FLAT_SCR_OPT-NEXT: ;;#ASMEND 203; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 204; FLAT_SCR_OPT-NEXT: ;;#ASMEND 205; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 206; FLAT_SCR_OPT-NEXT: ;;#ASMEND 207; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 208; FLAT_SCR_OPT-NEXT: ;;#ASMEND 209; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 210; FLAT_SCR_OPT-NEXT: ;;#ASMEND 211; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 212; FLAT_SCR_OPT-NEXT: ;;#ASMEND 213; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 214; FLAT_SCR_OPT-NEXT: ;;#ASMEND 215; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 216; FLAT_SCR_OPT-NEXT: ;;#ASMEND 217; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 218; FLAT_SCR_OPT-NEXT: ;;#ASMEND 219; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 220; FLAT_SCR_OPT-NEXT: ;;#ASMEND 221; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 222; FLAT_SCR_OPT-NEXT: ;;#ASMEND 223; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 224; FLAT_SCR_OPT-NEXT: ;;#ASMEND 225; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 226; FLAT_SCR_OPT-NEXT: ;;#ASMEND 227; FLAT_SCR_OPT-NEXT: s_waitcnt lgkmcnt(0) 228; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v0, vcc_lo 229; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 230; FLAT_SCR_OPT-NEXT: ;;#ASMEND 231; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 232; FLAT_SCR_OPT-NEXT: ;;#ASMEND 233; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 234; FLAT_SCR_OPT-NEXT: ;;#ASMEND 235; FLAT_SCR_OPT-NEXT: ;;#ASMSTART 236; FLAT_SCR_OPT-NEXT: ;;#ASMEND 237; FLAT_SCR_OPT-NEXT: s_mov_b32 s2, exec_lo 238; FLAT_SCR_OPT-NEXT: s_mov_b32 exec_lo, 3 239; FLAT_SCR_OPT-NEXT: s_mov_b32 s3, 0 240; FLAT_SCR_OPT-NEXT: scratch_store_dword off, v2, s3 241; FLAT_SCR_OPT-NEXT: s_waitcnt_depctr 0xffe3 242; FLAT_SCR_OPT-NEXT: s_mov_b32 s3, 4 243; FLAT_SCR_OPT-NEXT: scratch_load_dword v2, off, s3 ; 4-byte Folded Reload 244; FLAT_SCR_OPT-NEXT: s_waitcnt_depctr 0xffe3 245; FLAT_SCR_OPT-NEXT: s_mov_b32 s3, 0 246; FLAT_SCR_OPT-NEXT: s_waitcnt vmcnt(0) 247; FLAT_SCR_OPT-NEXT: v_readlane_b32 s0, v2, 0 248; FLAT_SCR_OPT-NEXT: v_readlane_b32 s1, v2, 1 249; FLAT_SCR_OPT-NEXT: scratch_load_dword v2, off, s3 250; FLAT_SCR_OPT-NEXT: s_waitcnt vmcnt(0) 251; FLAT_SCR_OPT-NEXT: s_waitcnt_depctr 0xffe3 252; FLAT_SCR_OPT-NEXT: s_mov_b32 exec_lo, s2 253; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v1, 0 254; FLAT_SCR_OPT-NEXT: global_store_dword v1, v0, s[0:1] 255; FLAT_SCR_OPT-NEXT: s_endpgm 256; 257; FLAT_SCR_ARCH-LABEL: test: 258; FLAT_SCR_ARCH: ; %bb.0: 259; FLAT_SCR_ARCH-NEXT: s_load_dwordx2 s[2:3], s[0:1], 0x0 260; FLAT_SCR_ARCH-NEXT: s_mov_b32 s104, exec_lo 261; FLAT_SCR_ARCH-NEXT: s_mov_b32 exec_lo, 3 262; FLAT_SCR_ARCH-NEXT: s_mov_b32 s105, 0 263; FLAT_SCR_ARCH-NEXT: scratch_store_dword off, v72, s105 264; FLAT_SCR_ARCH-NEXT: s_waitcnt lgkmcnt(0) 265; FLAT_SCR_ARCH-NEXT: v_writelane_b32 v72, s2, 0 266; FLAT_SCR_ARCH-NEXT: s_mov_b32 s105, 4 267; FLAT_SCR_ARCH-NEXT: v_writelane_b32 v72, s3, 1 268; FLAT_SCR_ARCH-NEXT: scratch_store_dword off, v72, s105 ; 4-byte Folded Spill 269; FLAT_SCR_ARCH-NEXT: s_waitcnt_depctr 0xffe3 270; FLAT_SCR_ARCH-NEXT: s_mov_b32 s105, 0 271; FLAT_SCR_ARCH-NEXT: scratch_load_dword v72, off, s105 272; FLAT_SCR_ARCH-NEXT: s_waitcnt vmcnt(0) 273; FLAT_SCR_ARCH-NEXT: s_waitcnt_depctr 0xffe3 274; FLAT_SCR_ARCH-NEXT: s_mov_b32 exec_lo, s104 275; FLAT_SCR_ARCH-NEXT: s_load_dword vcc_lo, s[0:1], 0x8 276; FLAT_SCR_ARCH-NEXT: ; kill: killed $sgpr0_sgpr1 277; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 278; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 279; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 280; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 281; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 282; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 283; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 284; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 285; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 286; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 287; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 288; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 289; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 290; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 291; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 292; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 293; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 294; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 295; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 296; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 297; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 298; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 299; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 300; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 301; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 302; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 303; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 304; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 305; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 306; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 307; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 308; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 309; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 310; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 311; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 312; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 313; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 314; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 315; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 316; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 317; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 318; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 319; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 320; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 321; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 322; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 323; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 324; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 325; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 326; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 327; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 328; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 329; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 330; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 331; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 332; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 333; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 334; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 335; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 336; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 337; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 338; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 339; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 340; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 341; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 342; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 343; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 344; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 345; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 346; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 347; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 348; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 349; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 350; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 351; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 352; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 353; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 354; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 355; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 356; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 357; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 358; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 359; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 360; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 361; FLAT_SCR_ARCH-NEXT: s_waitcnt lgkmcnt(0) 362; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v0, vcc_lo 363; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 364; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 365; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 366; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 367; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 368; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 369; FLAT_SCR_ARCH-NEXT: ;;#ASMSTART 370; FLAT_SCR_ARCH-NEXT: ;;#ASMEND 371; FLAT_SCR_ARCH-NEXT: s_mov_b32 s2, exec_lo 372; FLAT_SCR_ARCH-NEXT: s_mov_b32 exec_lo, 3 373; FLAT_SCR_ARCH-NEXT: s_mov_b32 s3, 0 374; FLAT_SCR_ARCH-NEXT: scratch_store_dword off, v2, s3 375; FLAT_SCR_ARCH-NEXT: s_waitcnt_depctr 0xffe3 376; FLAT_SCR_ARCH-NEXT: s_mov_b32 s3, 4 377; FLAT_SCR_ARCH-NEXT: scratch_load_dword v2, off, s3 ; 4-byte Folded Reload 378; FLAT_SCR_ARCH-NEXT: s_waitcnt_depctr 0xffe3 379; FLAT_SCR_ARCH-NEXT: s_mov_b32 s3, 0 380; FLAT_SCR_ARCH-NEXT: s_waitcnt vmcnt(0) 381; FLAT_SCR_ARCH-NEXT: v_readlane_b32 s0, v2, 0 382; FLAT_SCR_ARCH-NEXT: v_readlane_b32 s1, v2, 1 383; FLAT_SCR_ARCH-NEXT: scratch_load_dword v2, off, s3 384; FLAT_SCR_ARCH-NEXT: s_waitcnt vmcnt(0) 385; FLAT_SCR_ARCH-NEXT: s_waitcnt_depctr 0xffe3 386; FLAT_SCR_ARCH-NEXT: s_mov_b32 exec_lo, s2 387; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v1, 0 388; FLAT_SCR_ARCH-NEXT: global_store_dword v1, v0, s[0:1] 389; FLAT_SCR_ARCH-NEXT: s_endpgm 390 call void asm sideeffect "", "~{s[0:7]}" () 391 call void asm sideeffect "", "~{s[8:15]}" () 392 call void asm sideeffect "", "~{s[16:23]}" () 393 call void asm sideeffect "", "~{s[24:31]}" () 394 call void asm sideeffect "", "~{s[32:39]}" () 395 call void asm sideeffect "", "~{s[40:47]}" () 396 call void asm sideeffect "", "~{s[48:55]}" () 397 call void asm sideeffect "", "~{s[56:63]}" () 398 call void asm sideeffect "", "~{s[64:71]}" () 399 call void asm sideeffect "", "~{s[72:79]}" () 400 call void asm sideeffect "", "~{s[80:87]}" () 401 call void asm sideeffect "", "~{s[88:95]}" () 402 call void asm sideeffect "", "~{s[96:103]}" () 403 call void asm sideeffect "", "~{s[104:105]}" () 404 call void asm sideeffect "", "~{v[0:7]}" () 405 call void asm sideeffect "", "~{v[8:15]}" () 406 call void asm sideeffect "", "~{v[16:23]}" () 407 call void asm sideeffect "", "~{v[24:31]}" () 408 call void asm sideeffect "", "~{v[32:39]}" () 409 call void asm sideeffect "", "~{v[40:47]}" () 410 call void asm sideeffect "", "~{v[48:55]}" () 411 call void asm sideeffect "", "~{v[56:63]}" () 412 call void asm sideeffect "", "~{v[64:71]}" () 413 call void asm sideeffect "", "~{v[72:79]}" () 414 call void asm sideeffect "", "~{v[80:87]}" () 415 call void asm sideeffect "", "~{v[88:95]}" () 416 call void asm sideeffect "", "~{v[96:103]}" () 417 call void asm sideeffect "", "~{v[104:111]}" () 418 call void asm sideeffect "", "~{v[112:119]}" () 419 call void asm sideeffect "", "~{v[120:127]}" () 420 call void asm sideeffect "", "~{v[128:135]}" () 421 call void asm sideeffect "", "~{v[136:143]}" () 422 call void asm sideeffect "", "~{v[144:151]}" () 423 call void asm sideeffect "", "~{v[152:159]}" () 424 call void asm sideeffect "", "~{v[160:167]}" () 425 call void asm sideeffect "", "~{v[168:175]}" () 426 call void asm sideeffect "", "~{v[176:183]}" () 427 call void asm sideeffect "", "~{v[184:191]}" () 428 call void asm sideeffect "", "~{v[192:199]}" () 429 call void asm sideeffect "", "~{v[200:207]}" () 430 call void asm sideeffect "", "~{v[208:215]}" () 431 call void asm sideeffect "", "~{v[216:223]}" () 432 call void asm sideeffect "", "~{v[224:231]}" () 433 call void asm sideeffect "", "~{v[232:239]}" () 434 call void asm sideeffect "", "~{v[240:247]}" () 435 call void asm sideeffect "", "~{v[248:255]}" () 436 437 store i32 %in, i32 addrspace(1)* %out 438 ret void 439} 440 441define amdgpu_kernel void @kernel_no_calls_no_stack() { 442; GCN-LABEL: kernel_no_calls_no_stack: 443; GCN: ; %bb.0: 444; GCN-NEXT: s_endpgm 445 ret void 446} 447 448attributes #0 = { nounwind } 449