691 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 < %s | FileCheck %s3 4; LDS is allocated per-kernel. Module scope variables are gathered into a struct which is5; allocated at address zero, if used by the kernel. Kernel scope variables are gathered into6; a per-kernel struct and allocated immediately after the module scope.7; This test checks that the module and kernel scope variables are allocated in deterministic8; order without spurious alignment padding between the two9 10; External LDS is checked because it influences LDS padding in general and because it will11; not be moved into either module or kernel struct12 13@module_variable = addrspace(3) global i16 poison14 15; Variables are allocated into module scope block when used by a non-kernel function16define void @use_module() #0 {17; CHECK-LABEL: use_module:18; CHECK: ; %bb.0:19; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)20; CHECK-NEXT: v_mov_b32_e32 v0, 021; CHECK-NEXT: ds_write_b16 v0, v022; CHECK-NEXT: s_waitcnt lgkmcnt(0)23; CHECK-NEXT: s_setpc_b64 s[30:31]24 store i16 0, ptr addrspace(3) @module_variable25 ret void26}27 28; Variables only used by kernels are specialised and allocated per-kernel29@kernel_normal = addrspace(3) global i16 poison30@kernel_overalign = addrspace(3) global i16 poison, align 431 32; External LDS shall not introduce padding between module and kernel scope variables33@extern_normal = external addrspace(3) global [0 x float]34@extern_overalign = external addrspace(3) global [0 x float], align 835 36 37; External LDS does not influence the frame when called indirectly either38define void @use_extern_normal() #0 {39; CHECK-LABEL: use_extern_normal:40; CHECK: ; %bb.0:41; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)42; CHECK-NEXT: s_getpc_b64 s[6:7]43; CHECK-NEXT: s_add_u32 s6, s6, llvm.amdgcn.dynlds.offset.table@rel32@lo+444; CHECK-NEXT: s_addc_u32 s7, s7, llvm.amdgcn.dynlds.offset.table@rel32@hi+1245; CHECK-NEXT: s_mov_b32 s4, s1546; CHECK-NEXT: s_ashr_i32 s5, s15, 3147; CHECK-NEXT: v_mov_b32_e32 v0, 0x4048f5c348; CHECK-NEXT: s_lshl_b64 s[4:5], s[4:5], 249; CHECK-NEXT: s_add_u32 s4, s6, s450; CHECK-NEXT: s_addc_u32 s5, s7, s551; CHECK-NEXT: s_load_dword s4, s[4:5], 0x052; CHECK-NEXT: s_waitcnt lgkmcnt(0)53; CHECK-NEXT: v_mov_b32_e32 v1, s454; CHECK-NEXT: ds_write_b32 v1, v055; CHECK-NEXT: s_waitcnt lgkmcnt(0)56; CHECK-NEXT: s_setpc_b64 s[30:31]57 %arrayidx = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_normal, i32 0, i32 058 store float 0x40091EB860000000, ptr addrspace(3) %arrayidx59 ret void60}61 62define void @use_extern_overalign() #0 {63; CHECK-LABEL: use_extern_overalign:64; CHECK: ; %bb.0:65; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; CHECK-NEXT: s_getpc_b64 s[6:7]67; CHECK-NEXT: s_add_u32 s6, s6, llvm.amdgcn.dynlds.offset.table@rel32@lo+468; CHECK-NEXT: s_addc_u32 s7, s7, llvm.amdgcn.dynlds.offset.table@rel32@hi+1269; CHECK-NEXT: s_mov_b32 s4, s1570; CHECK-NEXT: s_ashr_i32 s5, s15, 3171; CHECK-NEXT: v_mov_b32_e32 v0, 0x4228000072; CHECK-NEXT: s_lshl_b64 s[4:5], s[4:5], 273; CHECK-NEXT: s_add_u32 s4, s6, s474; CHECK-NEXT: s_addc_u32 s5, s7, s575; CHECK-NEXT: s_load_dword s4, s[4:5], 0x076; CHECK-NEXT: s_waitcnt lgkmcnt(0)77; CHECK-NEXT: v_mov_b32_e32 v1, s478; CHECK-NEXT: ds_write_b32 v1, v0 offset:479; CHECK-NEXT: s_waitcnt lgkmcnt(0)80; CHECK-NEXT: s_setpc_b64 s[30:31]81 %arrayidx = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_overalign, i32 0, i32 182 store float 4.200000e+01, ptr addrspace(3) %arrayidx83 ret void84}85 86 87; First 2^3 of 2^4 cases encoded into function names88; no use of extern variable from nested function89; module_variable used/not-used90; kernel variable normal/overaligned91; extern variable normal/overaligned92 93define amdgpu_kernel void @module_0_kernel_normal_extern_normal(i32 %idx) {94; CHECK-LABEL: module_0_kernel_normal_extern_normal:95; CHECK: ; %bb.0:96; CHECK-NEXT: s_load_dword s0, s[8:9], 0x097; CHECK-NEXT: v_mov_b32_e32 v0, 298; CHECK-NEXT: v_mov_b32_e32 v1, 099; CHECK-NEXT: s_waitcnt lgkmcnt(0)100; CHECK-NEXT: s_lshl2_add_u32 s0, s0, 4101; CHECK-NEXT: v_mov_b32_e32 v2, s0102; CHECK-NEXT: ds_write_b16 v1, v0103; CHECK-NEXT: ds_write_b32 v2, v1104; CHECK-NEXT: s_endpgm105 store i16 2, ptr addrspace(3) @kernel_normal106 107 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_normal, i32 0, i32 %idx108 store float 0.0, ptr addrspace(3) %arrayidx1109 ret void110}111 112define amdgpu_kernel void @module_1_kernel_normal_extern_normal(i32 %idx) {113; CHECK-LABEL: module_1_kernel_normal_extern_normal:114; CHECK: ; %bb.0:115; CHECK-NEXT: s_add_u32 s12, s12, s17116; CHECK-NEXT: s_mov_b32 s32, 0117; CHECK-NEXT: s_addc_u32 s13, s13, 0118; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12119; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13120; CHECK-NEXT: s_add_u32 s0, s0, s17121; CHECK-NEXT: s_addc_u32 s1, s1, 0122; CHECK-NEXT: s_add_u32 s12, s8, 8123; CHECK-NEXT: s_addc_u32 s13, s9, 0124; CHECK-NEXT: s_getpc_b64 s[18:19]125; CHECK-NEXT: s_add_u32 s18, s18, use_module@gotpcrel32@lo+4126; CHECK-NEXT: s_addc_u32 s19, s19, use_module@gotpcrel32@hi+12127; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2128; CHECK-NEXT: s_load_dwordx2 s[20:21], s[18:19], 0x0129; CHECK-NEXT: s_load_dword s17, s[8:9], 0x0130; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1131; CHECK-NEXT: s_mov_b64 s[8:9], s[12:13]132; CHECK-NEXT: s_mov_b32 s12, s14133; CHECK-NEXT: s_mov_b32 s13, s15134; CHECK-NEXT: s_mov_b32 s14, s16135; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2136; CHECK-NEXT: s_waitcnt lgkmcnt(0)137; CHECK-NEXT: s_swappc_b64 s[30:31], s[20:21]138; CHECK-NEXT: v_mov_b32_e32 v0, 1139; CHECK-NEXT: v_mov_b32_e32 v1, 0140; CHECK-NEXT: s_lshl2_add_u32 s4, s17, 4141; CHECK-NEXT: v_mov_b32_e32 v2, 2142; CHECK-NEXT: v_mov_b32_e32 v3, s4143; CHECK-NEXT: ds_write_b16 v1, v0144; CHECK-NEXT: ds_write_b16 v1, v2 offset:2145; CHECK-NEXT: ds_write_b32 v3, v1146; CHECK-NEXT: s_endpgm147 call void @use_module()148 store i16 1, ptr addrspace(3) @module_variable149 150 store i16 2, ptr addrspace(3) @kernel_normal151 152 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_normal, i32 0, i32 %idx153 store float 0.0, ptr addrspace(3) %arrayidx1154 ret void155}156 157define amdgpu_kernel void @module_0_kernel_overalign_extern_normal(i32 %idx) {158; CHECK-LABEL: module_0_kernel_overalign_extern_normal:159; CHECK: ; %bb.0:160; CHECK-NEXT: s_load_dword s0, s[8:9], 0x0161; CHECK-NEXT: v_mov_b32_e32 v0, 2162; CHECK-NEXT: v_mov_b32_e32 v1, 0163; CHECK-NEXT: s_waitcnt lgkmcnt(0)164; CHECK-NEXT: s_lshl2_add_u32 s0, s0, 4165; CHECK-NEXT: v_mov_b32_e32 v2, s0166; CHECK-NEXT: ds_write_b16 v1, v0167; CHECK-NEXT: ds_write_b32 v2, v1168; CHECK-NEXT: s_endpgm169 store i16 2, ptr addrspace(3) @kernel_overalign170 171 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_normal, i32 0, i32 %idx172 store float 0.0, ptr addrspace(3) %arrayidx1173 ret void174}175 176define amdgpu_kernel void @module_1_kernel_overalign_extern_normal(i32 %idx) {177; CHECK-LABEL: module_1_kernel_overalign_extern_normal:178; CHECK: ; %bb.0:179; CHECK-NEXT: s_add_u32 s12, s12, s17180; CHECK-NEXT: s_mov_b32 s32, 0181; CHECK-NEXT: s_addc_u32 s13, s13, 0182; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12183; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13184; CHECK-NEXT: s_add_u32 s0, s0, s17185; CHECK-NEXT: s_addc_u32 s1, s1, 0186; CHECK-NEXT: s_add_u32 s12, s8, 8187; CHECK-NEXT: s_addc_u32 s13, s9, 0188; CHECK-NEXT: s_getpc_b64 s[18:19]189; CHECK-NEXT: s_add_u32 s18, s18, use_module@gotpcrel32@lo+4190; CHECK-NEXT: s_addc_u32 s19, s19, use_module@gotpcrel32@hi+12191; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2192; CHECK-NEXT: s_load_dwordx2 s[20:21], s[18:19], 0x0193; CHECK-NEXT: s_load_dword s17, s[8:9], 0x0194; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1195; CHECK-NEXT: s_mov_b64 s[8:9], s[12:13]196; CHECK-NEXT: s_mov_b32 s12, s14197; CHECK-NEXT: s_mov_b32 s13, s15198; CHECK-NEXT: s_mov_b32 s14, s16199; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2200; CHECK-NEXT: s_waitcnt lgkmcnt(0)201; CHECK-NEXT: s_swappc_b64 s[30:31], s[20:21]202; CHECK-NEXT: v_mov_b32_e32 v0, 1203; CHECK-NEXT: v_mov_b32_e32 v1, 0204; CHECK-NEXT: s_lshl2_add_u32 s4, s17, 8205; CHECK-NEXT: v_mov_b32_e32 v2, 2206; CHECK-NEXT: v_mov_b32_e32 v3, s4207; CHECK-NEXT: ds_write_b16 v1, v0208; CHECK-NEXT: ds_write_b16 v1, v2 offset:4209; CHECK-NEXT: ds_write_b32 v3, v1210; CHECK-NEXT: s_endpgm211 call void @use_module()212 store i16 1, ptr addrspace(3) @module_variable213 214 store i16 2, ptr addrspace(3) @kernel_overalign215 216 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_normal, i32 0, i32 %idx217 store float 0.0, ptr addrspace(3) %arrayidx1218 ret void219}220 221define amdgpu_kernel void @module_0_kernel_normal_extern_overalign(i32 %idx) {222; CHECK-LABEL: module_0_kernel_normal_extern_overalign:223; CHECK: ; %bb.0:224; CHECK-NEXT: s_load_dword s0, s[8:9], 0x0225; CHECK-NEXT: v_mov_b32_e32 v0, 2226; CHECK-NEXT: v_mov_b32_e32 v1, 0227; CHECK-NEXT: s_waitcnt lgkmcnt(0)228; CHECK-NEXT: s_lshl2_add_u32 s0, s0, 8229; CHECK-NEXT: v_mov_b32_e32 v2, s0230; CHECK-NEXT: ds_write_b16 v1, v0231; CHECK-NEXT: ds_write_b32 v2, v1232; CHECK-NEXT: s_endpgm233 store i16 2, ptr addrspace(3) @kernel_normal234 235 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_overalign, i32 0, i32 %idx236 store float 0.0, ptr addrspace(3) %arrayidx1237 ret void238}239 240define amdgpu_kernel void @module_1_kernel_normal_extern_overalign(i32 %idx) {241; CHECK-LABEL: module_1_kernel_normal_extern_overalign:242; CHECK: ; %bb.0:243; CHECK-NEXT: s_add_u32 s12, s12, s17244; CHECK-NEXT: s_mov_b32 s32, 0245; CHECK-NEXT: s_addc_u32 s13, s13, 0246; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12247; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13248; CHECK-NEXT: s_add_u32 s0, s0, s17249; CHECK-NEXT: s_addc_u32 s1, s1, 0250; CHECK-NEXT: s_add_u32 s12, s8, 8251; CHECK-NEXT: s_addc_u32 s13, s9, 0252; CHECK-NEXT: s_getpc_b64 s[18:19]253; CHECK-NEXT: s_add_u32 s18, s18, use_module@gotpcrel32@lo+4254; CHECK-NEXT: s_addc_u32 s19, s19, use_module@gotpcrel32@hi+12255; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2256; CHECK-NEXT: s_load_dwordx2 s[20:21], s[18:19], 0x0257; CHECK-NEXT: s_load_dword s17, s[8:9], 0x0258; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1259; CHECK-NEXT: s_mov_b64 s[8:9], s[12:13]260; CHECK-NEXT: s_mov_b32 s12, s14261; CHECK-NEXT: s_mov_b32 s13, s15262; CHECK-NEXT: s_mov_b32 s14, s16263; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2264; CHECK-NEXT: s_waitcnt lgkmcnt(0)265; CHECK-NEXT: s_swappc_b64 s[30:31], s[20:21]266; CHECK-NEXT: v_mov_b32_e32 v0, 1267; CHECK-NEXT: v_mov_b32_e32 v1, 0268; CHECK-NEXT: s_lshl2_add_u32 s4, s17, 8269; CHECK-NEXT: v_mov_b32_e32 v2, 2270; CHECK-NEXT: v_mov_b32_e32 v3, s4271; CHECK-NEXT: ds_write_b16 v1, v0272; CHECK-NEXT: ds_write_b16 v1, v2 offset:2273; CHECK-NEXT: ds_write_b32 v3, v1274; CHECK-NEXT: s_endpgm275 call void @use_module()276 store i16 1, ptr addrspace(3) @module_variable277 278 store i16 2, ptr addrspace(3) @kernel_normal279 280 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_overalign, i32 0, i32 %idx281 store float 0.0, ptr addrspace(3) %arrayidx1282 ret void283}284 285define amdgpu_kernel void @module_0_kernel_overalign_extern_overalign(i32 %idx) {286; CHECK-LABEL: module_0_kernel_overalign_extern_overalign:287; CHECK: ; %bb.0:288; CHECK-NEXT: s_load_dword s0, s[8:9], 0x0289; CHECK-NEXT: v_mov_b32_e32 v0, 2290; CHECK-NEXT: v_mov_b32_e32 v1, 0291; CHECK-NEXT: s_waitcnt lgkmcnt(0)292; CHECK-NEXT: s_lshl2_add_u32 s0, s0, 8293; CHECK-NEXT: v_mov_b32_e32 v2, s0294; CHECK-NEXT: ds_write_b16 v1, v0295; CHECK-NEXT: ds_write_b32 v2, v1296; CHECK-NEXT: s_endpgm297 store i16 2, ptr addrspace(3) @kernel_overalign298 299 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_overalign, i32 0, i32 %idx300 store float 0.0, ptr addrspace(3) %arrayidx1301 ret void302}303 304define amdgpu_kernel void @module_1_kernel_overalign_extern_overalign(i32 %idx) {305; CHECK-LABEL: module_1_kernel_overalign_extern_overalign:306; CHECK: ; %bb.0:307; CHECK-NEXT: s_add_u32 s12, s12, s17308; CHECK-NEXT: s_mov_b32 s32, 0309; CHECK-NEXT: s_addc_u32 s13, s13, 0310; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12311; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13312; CHECK-NEXT: s_add_u32 s0, s0, s17313; CHECK-NEXT: s_addc_u32 s1, s1, 0314; CHECK-NEXT: s_add_u32 s12, s8, 8315; CHECK-NEXT: s_addc_u32 s13, s9, 0316; CHECK-NEXT: s_getpc_b64 s[18:19]317; CHECK-NEXT: s_add_u32 s18, s18, use_module@gotpcrel32@lo+4318; CHECK-NEXT: s_addc_u32 s19, s19, use_module@gotpcrel32@hi+12319; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2320; CHECK-NEXT: s_load_dwordx2 s[20:21], s[18:19], 0x0321; CHECK-NEXT: s_load_dword s17, s[8:9], 0x0322; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1323; CHECK-NEXT: s_mov_b64 s[8:9], s[12:13]324; CHECK-NEXT: s_mov_b32 s12, s14325; CHECK-NEXT: s_mov_b32 s13, s15326; CHECK-NEXT: s_mov_b32 s14, s16327; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2328; CHECK-NEXT: s_waitcnt lgkmcnt(0)329; CHECK-NEXT: s_swappc_b64 s[30:31], s[20:21]330; CHECK-NEXT: v_mov_b32_e32 v0, 1331; CHECK-NEXT: v_mov_b32_e32 v1, 0332; CHECK-NEXT: s_lshl2_add_u32 s4, s17, 8333; CHECK-NEXT: v_mov_b32_e32 v2, 2334; CHECK-NEXT: v_mov_b32_e32 v3, s4335; CHECK-NEXT: ds_write_b16 v1, v0336; CHECK-NEXT: ds_write_b16 v1, v2 offset:4337; CHECK-NEXT: ds_write_b32 v3, v1338; CHECK-NEXT: s_endpgm339 call void @use_module()340 store i16 1, ptr addrspace(3) @module_variable341 342 store i16 2, ptr addrspace(3) @kernel_overalign343 344 %arrayidx1 = getelementptr inbounds [0 x float], ptr addrspace(3) @extern_overalign, i32 0, i32 %idx345 store float 0.0, ptr addrspace(3) %arrayidx1346 ret void347}348 349 350;; Second 2^3 of 2^4 cases encoded into function names351; with extern variable from nested function352; module_variable used/not-used353; kernel variable normal/overaligned354; extern variable normal/overaligned355 356define amdgpu_kernel void @module_0_kernel_normal_indirect_extern_normal(i32 %idx) {357; CHECK-LABEL: module_0_kernel_normal_indirect_extern_normal:358; CHECK: ; %bb.0:359; CHECK-NEXT: s_add_u32 s12, s12, s17360; CHECK-NEXT: s_mov_b32 s32, 0361; CHECK-NEXT: s_addc_u32 s13, s13, 0362; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12363; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13364; CHECK-NEXT: s_add_u32 s0, s0, s17365; CHECK-NEXT: s_addc_u32 s1, s1, 0366; CHECK-NEXT: s_add_u32 s8, s8, 8367; CHECK-NEXT: s_addc_u32 s9, s9, 0368; CHECK-NEXT: s_mov_b32 s13, s15369; CHECK-NEXT: s_mov_b32 s12, s14370; CHECK-NEXT: s_getpc_b64 s[14:15]371; CHECK-NEXT: s_add_u32 s14, s14, use_extern_normal@gotpcrel32@lo+4372; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_normal@gotpcrel32@hi+12373; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2374; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0375; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1376; CHECK-NEXT: v_mov_b32_e32 v3, 2377; CHECK-NEXT: v_mov_b32_e32 v4, 0378; CHECK-NEXT: s_mov_b32 s14, s16379; CHECK-NEXT: s_mov_b32 s15, 0380; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2381; CHECK-NEXT: ds_write_b16 v4, v3382; CHECK-NEXT: s_waitcnt lgkmcnt(0)383; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]384; CHECK-NEXT: s_endpgm385 store i16 2, ptr addrspace(3) @kernel_normal386 387 call void @use_extern_normal()388 ret void389}390 391define amdgpu_kernel void @module_1_kernel_normal_indirect_extern_normal(i32 %idx) {392; CHECK-LABEL: module_1_kernel_normal_indirect_extern_normal:393; CHECK: ; %bb.0:394; CHECK-NEXT: s_add_u32 s12, s12, s17395; CHECK-NEXT: s_mov_b32 s32, 0396; CHECK-NEXT: s_addc_u32 s13, s13, 0397; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12398; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13399; CHECK-NEXT: s_add_u32 s0, s0, s17400; CHECK-NEXT: s_addc_u32 s1, s1, 0401; CHECK-NEXT: s_add_u32 s8, s8, 8402; CHECK-NEXT: s_addc_u32 s9, s9, 0403; CHECK-NEXT: s_mov_b32 s13, s15404; CHECK-NEXT: s_mov_b32 s12, s14405; CHECK-NEXT: s_getpc_b64 s[14:15]406; CHECK-NEXT: s_add_u32 s14, s14, use_module@gotpcrel32@lo+4407; CHECK-NEXT: s_addc_u32 s15, s15, use_module@gotpcrel32@hi+12408; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2409; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0410; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1411; CHECK-NEXT: s_mov_b32 s14, s16412; CHECK-NEXT: s_mov_b32 s15, 4413; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2414; CHECK-NEXT: s_waitcnt lgkmcnt(0)415; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]416; CHECK-NEXT: s_getpc_b64 s[14:15]417; CHECK-NEXT: s_add_u32 s14, s14, use_extern_normal@gotpcrel32@lo+4418; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_normal@gotpcrel32@hi+12419; CHECK-NEXT: v_mov_b32_e32 v0, 1420; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0421; CHECK-NEXT: v_mov_b32_e32 v1, 0422; CHECK-NEXT: v_mov_b32_e32 v2, 2423; CHECK-NEXT: s_mov_b32 s14, s16424; CHECK-NEXT: s_mov_b32 s15, 4425; CHECK-NEXT: ds_write_b16 v1, v0426; CHECK-NEXT: ds_write_b16 v1, v2 offset:2427; CHECK-NEXT: s_waitcnt lgkmcnt(0)428; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]429; CHECK-NEXT: s_endpgm430 call void @use_module()431 store i16 1, ptr addrspace(3) @module_variable432 433 store i16 2, ptr addrspace(3) @kernel_normal434 435 call void @use_extern_normal()436 ret void437}438 439define amdgpu_kernel void @module_0_kernel_overalign_indirect_extern_normal(i32 %idx) {440; CHECK-LABEL: module_0_kernel_overalign_indirect_extern_normal:441; CHECK: ; %bb.0:442; CHECK-NEXT: s_add_u32 s12, s12, s17443; CHECK-NEXT: s_mov_b32 s32, 0444; CHECK-NEXT: s_addc_u32 s13, s13, 0445; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12446; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13447; CHECK-NEXT: s_add_u32 s0, s0, s17448; CHECK-NEXT: s_addc_u32 s1, s1, 0449; CHECK-NEXT: s_add_u32 s8, s8, 8450; CHECK-NEXT: s_addc_u32 s9, s9, 0451; CHECK-NEXT: s_mov_b32 s13, s15452; CHECK-NEXT: s_mov_b32 s12, s14453; CHECK-NEXT: s_getpc_b64 s[14:15]454; CHECK-NEXT: s_add_u32 s14, s14, use_extern_normal@gotpcrel32@lo+4455; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_normal@gotpcrel32@hi+12456; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2457; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0458; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1459; CHECK-NEXT: v_mov_b32_e32 v3, 2460; CHECK-NEXT: v_mov_b32_e32 v4, 0461; CHECK-NEXT: s_mov_b32 s14, s16462; CHECK-NEXT: s_mov_b32 s15, 2463; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2464; CHECK-NEXT: ds_write_b16 v4, v3465; CHECK-NEXT: s_waitcnt lgkmcnt(0)466; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]467; CHECK-NEXT: s_endpgm468 store i16 2, ptr addrspace(3) @kernel_overalign469 470 call void @use_extern_normal()471 ret void472}473 474define amdgpu_kernel void @module_1_kernel_overalign_indirect_extern_normal(i32 %idx) {475; CHECK-LABEL: module_1_kernel_overalign_indirect_extern_normal:476; CHECK: ; %bb.0:477; CHECK-NEXT: s_add_u32 s12, s12, s17478; CHECK-NEXT: s_mov_b32 s32, 0479; CHECK-NEXT: s_addc_u32 s13, s13, 0480; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12481; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13482; CHECK-NEXT: s_add_u32 s0, s0, s17483; CHECK-NEXT: s_addc_u32 s1, s1, 0484; CHECK-NEXT: s_add_u32 s8, s8, 8485; CHECK-NEXT: s_addc_u32 s9, s9, 0486; CHECK-NEXT: s_mov_b32 s13, s15487; CHECK-NEXT: s_mov_b32 s12, s14488; CHECK-NEXT: s_getpc_b64 s[14:15]489; CHECK-NEXT: s_add_u32 s14, s14, use_module@gotpcrel32@lo+4490; CHECK-NEXT: s_addc_u32 s15, s15, use_module@gotpcrel32@hi+12491; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2492; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0493; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1494; CHECK-NEXT: s_mov_b32 s14, s16495; CHECK-NEXT: s_mov_b32 s15, 6496; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2497; CHECK-NEXT: s_waitcnt lgkmcnt(0)498; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]499; CHECK-NEXT: s_getpc_b64 s[14:15]500; CHECK-NEXT: s_add_u32 s14, s14, use_extern_normal@gotpcrel32@lo+4501; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_normal@gotpcrel32@hi+12502; CHECK-NEXT: v_mov_b32_e32 v0, 1503; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0504; CHECK-NEXT: v_mov_b32_e32 v1, 0505; CHECK-NEXT: v_mov_b32_e32 v2, 2506; CHECK-NEXT: s_mov_b32 s14, s16507; CHECK-NEXT: s_mov_b32 s15, 6508; CHECK-NEXT: ds_write_b16 v1, v0509; CHECK-NEXT: ds_write_b16 v1, v2 offset:4510; CHECK-NEXT: s_waitcnt lgkmcnt(0)511; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]512; CHECK-NEXT: s_endpgm513 call void @use_module()514 store i16 1, ptr addrspace(3) @module_variable515 516 store i16 2, ptr addrspace(3) @kernel_overalign517 518 call void @use_extern_normal()519 ret void520}521 522define amdgpu_kernel void @module_0_kernel_normal_indirect_extern_overalign(i32 %idx) {523; CHECK-LABEL: module_0_kernel_normal_indirect_extern_overalign:524; CHECK: ; %bb.0:525; CHECK-NEXT: s_add_u32 s12, s12, s17526; CHECK-NEXT: s_mov_b32 s32, 0527; CHECK-NEXT: s_addc_u32 s13, s13, 0528; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12529; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13530; CHECK-NEXT: s_add_u32 s0, s0, s17531; CHECK-NEXT: s_addc_u32 s1, s1, 0532; CHECK-NEXT: s_add_u32 s8, s8, 8533; CHECK-NEXT: s_addc_u32 s9, s9, 0534; CHECK-NEXT: s_mov_b32 s13, s15535; CHECK-NEXT: s_mov_b32 s12, s14536; CHECK-NEXT: s_getpc_b64 s[14:15]537; CHECK-NEXT: s_add_u32 s14, s14, use_extern_overalign@gotpcrel32@lo+4538; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_overalign@gotpcrel32@hi+12539; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2540; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0541; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1542; CHECK-NEXT: v_mov_b32_e32 v3, 2543; CHECK-NEXT: v_mov_b32_e32 v4, 0544; CHECK-NEXT: s_mov_b32 s14, s16545; CHECK-NEXT: s_mov_b32 s15, 1546; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2547; CHECK-NEXT: ds_write_b16 v4, v3548; CHECK-NEXT: s_waitcnt lgkmcnt(0)549; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]550; CHECK-NEXT: s_endpgm551 store i16 2, ptr addrspace(3) @kernel_normal552 553 call void @use_extern_overalign()554 ret void555}556 557define amdgpu_kernel void @module_1_kernel_normal_indirect_extern_overalign(i32 %idx) {558; CHECK-LABEL: module_1_kernel_normal_indirect_extern_overalign:559; CHECK: ; %bb.0:560; CHECK-NEXT: s_add_u32 s12, s12, s17561; CHECK-NEXT: s_mov_b32 s32, 0562; CHECK-NEXT: s_addc_u32 s13, s13, 0563; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12564; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13565; CHECK-NEXT: s_add_u32 s0, s0, s17566; CHECK-NEXT: s_addc_u32 s1, s1, 0567; CHECK-NEXT: s_add_u32 s8, s8, 8568; CHECK-NEXT: s_addc_u32 s9, s9, 0569; CHECK-NEXT: s_mov_b32 s13, s15570; CHECK-NEXT: s_mov_b32 s12, s14571; CHECK-NEXT: s_getpc_b64 s[14:15]572; CHECK-NEXT: s_add_u32 s14, s14, use_module@gotpcrel32@lo+4573; CHECK-NEXT: s_addc_u32 s15, s15, use_module@gotpcrel32@hi+12574; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2575; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0576; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1577; CHECK-NEXT: s_mov_b32 s14, s16578; CHECK-NEXT: s_mov_b32 s15, 5579; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2580; CHECK-NEXT: s_waitcnt lgkmcnt(0)581; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]582; CHECK-NEXT: s_getpc_b64 s[14:15]583; CHECK-NEXT: s_add_u32 s14, s14, use_extern_overalign@gotpcrel32@lo+4584; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_overalign@gotpcrel32@hi+12585; CHECK-NEXT: v_mov_b32_e32 v0, 1586; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0587; CHECK-NEXT: v_mov_b32_e32 v1, 0588; CHECK-NEXT: v_mov_b32_e32 v2, 2589; CHECK-NEXT: s_mov_b32 s14, s16590; CHECK-NEXT: s_mov_b32 s15, 5591; CHECK-NEXT: ds_write_b16 v1, v0592; CHECK-NEXT: ds_write_b16 v1, v2 offset:2593; CHECK-NEXT: s_waitcnt lgkmcnt(0)594; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]595; CHECK-NEXT: s_endpgm596 call void @use_module()597 store i16 1, ptr addrspace(3) @module_variable598 599 store i16 2, ptr addrspace(3) @kernel_normal600 601 call void @use_extern_overalign()602 ret void603}604 605define amdgpu_kernel void @module_0_kernel_overalign_indirect_extern_overalign(i32 %idx) {606; CHECK-LABEL: module_0_kernel_overalign_indirect_extern_overalign:607; CHECK: ; %bb.0:608; CHECK-NEXT: s_add_u32 s12, s12, s17609; CHECK-NEXT: s_mov_b32 s32, 0610; CHECK-NEXT: s_addc_u32 s13, s13, 0611; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12612; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13613; CHECK-NEXT: s_add_u32 s0, s0, s17614; CHECK-NEXT: s_addc_u32 s1, s1, 0615; CHECK-NEXT: s_add_u32 s8, s8, 8616; CHECK-NEXT: s_addc_u32 s9, s9, 0617; CHECK-NEXT: s_mov_b32 s13, s15618; CHECK-NEXT: s_mov_b32 s12, s14619; CHECK-NEXT: s_getpc_b64 s[14:15]620; CHECK-NEXT: s_add_u32 s14, s14, use_extern_overalign@gotpcrel32@lo+4621; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_overalign@gotpcrel32@hi+12622; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2623; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0624; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1625; CHECK-NEXT: v_mov_b32_e32 v3, 2626; CHECK-NEXT: v_mov_b32_e32 v4, 0627; CHECK-NEXT: s_mov_b32 s14, s16628; CHECK-NEXT: s_mov_b32 s15, 3629; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2630; CHECK-NEXT: ds_write_b16 v4, v3631; CHECK-NEXT: s_waitcnt lgkmcnt(0)632; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]633; CHECK-NEXT: s_endpgm634 store i16 2, ptr addrspace(3) @kernel_overalign635 636 call void @use_extern_overalign()637 ret void638}639 640define amdgpu_kernel void @module_1_kernel_overalign_indirect_extern_overalign(i32 %idx) {641; CHECK-LABEL: module_1_kernel_overalign_indirect_extern_overalign:642; CHECK: ; %bb.0:643; CHECK-NEXT: s_add_u32 s12, s12, s17644; CHECK-NEXT: s_mov_b32 s32, 0645; CHECK-NEXT: s_addc_u32 s13, s13, 0646; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12647; CHECK-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13648; CHECK-NEXT: s_add_u32 s0, s0, s17649; CHECK-NEXT: s_addc_u32 s1, s1, 0650; CHECK-NEXT: s_add_u32 s8, s8, 8651; CHECK-NEXT: s_addc_u32 s9, s9, 0652; CHECK-NEXT: s_mov_b32 s13, s15653; CHECK-NEXT: s_mov_b32 s12, s14654; CHECK-NEXT: s_getpc_b64 s[14:15]655; CHECK-NEXT: s_add_u32 s14, s14, use_module@gotpcrel32@lo+4656; CHECK-NEXT: s_addc_u32 s15, s15, use_module@gotpcrel32@hi+12657; CHECK-NEXT: v_lshlrev_b32_e32 v2, 20, v2658; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0659; CHECK-NEXT: v_lshlrev_b32_e32 v1, 10, v1660; CHECK-NEXT: s_mov_b32 s14, s16661; CHECK-NEXT: s_mov_b32 s15, 7662; CHECK-NEXT: v_or3_b32 v31, v0, v1, v2663; CHECK-NEXT: s_waitcnt lgkmcnt(0)664; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]665; CHECK-NEXT: s_getpc_b64 s[14:15]666; CHECK-NEXT: s_add_u32 s14, s14, use_extern_overalign@gotpcrel32@lo+4667; CHECK-NEXT: s_addc_u32 s15, s15, use_extern_overalign@gotpcrel32@hi+12668; CHECK-NEXT: v_mov_b32_e32 v0, 1669; CHECK-NEXT: s_load_dwordx2 s[18:19], s[14:15], 0x0670; CHECK-NEXT: v_mov_b32_e32 v1, 0671; CHECK-NEXT: v_mov_b32_e32 v2, 2672; CHECK-NEXT: s_mov_b32 s14, s16673; CHECK-NEXT: s_mov_b32 s15, 7674; CHECK-NEXT: ds_write_b16 v1, v0675; CHECK-NEXT: ds_write_b16 v1, v2 offset:4676; CHECK-NEXT: s_waitcnt lgkmcnt(0)677; CHECK-NEXT: s_swappc_b64 s[30:31], s[18:19]678; CHECK-NEXT: s_endpgm679 call void @use_module()680 store i16 1, ptr addrspace(3) @module_variable681 682 store i16 2, ptr addrspace(3) @kernel_overalign683 684 call void @use_extern_overalign()685 ret void686}687 688 689attributes #0 = { noinline }690 691