2109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes=amdgpu-attributor -mcpu=kaveri < %s | llc -mcpu=gfx90a -enable-ipra=0 | FileCheck -enable-var-scope -check-prefixes=GCN,GFX7 %s3; RUN: opt -passes=amdgpu-attributor -mcpu=gfx90a -mattr=-xnack < %s | llc -mcpu=gfx90a -mattr=-xnack -enable-ipra=0 | FileCheck -enable-var-scope -check-prefixes=GCN,GFX90A %s4 5target triple = "amdgcn-amd-amdhsa"6 7define void @use_workitem_id_x() #1 {8; GFX7-LABEL: use_workitem_id_x:9; GFX7: ; %bb.0:10; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX7-NEXT: v_and_b32_e32 v0, 0x3ff, v3112; GFX7-NEXT: flat_store_dword v[0:1], v013; GFX7-NEXT: s_waitcnt vmcnt(0)14; GFX7-NEXT: s_setpc_b64 s[30:31]15;16; GFX90A-LABEL: use_workitem_id_x:17; GFX90A: ; %bb.0:18; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)19; GFX90A-NEXT: v_and_b32_e32 v0, 0x3ff, v3120; GFX90A-NEXT: global_store_dword v[0:1], v0, off21; GFX90A-NEXT: s_waitcnt vmcnt(0)22; GFX90A-NEXT: s_setpc_b64 s[30:31]23 %val = call i32 @llvm.amdgcn.workitem.id.x()24 store volatile i32 %val, ptr addrspace(1) poison25 ret void26}27 28define void @use_workitem_id_y() #1 {29; GFX7-LABEL: use_workitem_id_y:30; GFX7: ; %bb.0:31; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)32; GFX7-NEXT: v_bfe_u32 v0, v31, 10, 1033; GFX7-NEXT: flat_store_dword v[0:1], v034; GFX7-NEXT: s_waitcnt vmcnt(0)35; GFX7-NEXT: s_setpc_b64 s[30:31]36;37; GFX90A-LABEL: use_workitem_id_y:38; GFX90A: ; %bb.0:39; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)40; GFX90A-NEXT: v_bfe_u32 v0, v31, 10, 1041; GFX90A-NEXT: global_store_dword v[0:1], v0, off42; GFX90A-NEXT: s_waitcnt vmcnt(0)43; GFX90A-NEXT: s_setpc_b64 s[30:31]44 %val = call i32 @llvm.amdgcn.workitem.id.y()45 store volatile i32 %val, ptr addrspace(1) poison46 ret void47}48 49define void @use_workitem_id_z() #1 {50; GFX7-LABEL: use_workitem_id_z:51; GFX7: ; %bb.0:52; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)53; GFX7-NEXT: v_bfe_u32 v0, v31, 20, 1054; GFX7-NEXT: flat_store_dword v[0:1], v055; GFX7-NEXT: s_waitcnt vmcnt(0)56; GFX7-NEXT: s_setpc_b64 s[30:31]57;58; GFX90A-LABEL: use_workitem_id_z:59; GFX90A: ; %bb.0:60; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX90A-NEXT: v_bfe_u32 v0, v31, 20, 1062; GFX90A-NEXT: global_store_dword v[0:1], v0, off63; GFX90A-NEXT: s_waitcnt vmcnt(0)64; GFX90A-NEXT: s_setpc_b64 s[30:31]65 %val = call i32 @llvm.amdgcn.workitem.id.z()66 store volatile i32 %val, ptr addrspace(1) poison67 ret void68}69 70define void @use_workitem_id_xy() #1 {71; GFX7-LABEL: use_workitem_id_xy:72; GFX7: ; %bb.0:73; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)74; GFX7-NEXT: v_and_b32_e32 v0, 0x3ff, v3175; GFX7-NEXT: flat_store_dword v[0:1], v076; GFX7-NEXT: s_waitcnt vmcnt(0)77; GFX7-NEXT: v_bfe_u32 v0, v31, 10, 1078; GFX7-NEXT: flat_store_dword v[0:1], v079; GFX7-NEXT: s_waitcnt vmcnt(0)80; GFX7-NEXT: s_setpc_b64 s[30:31]81;82; GFX90A-LABEL: use_workitem_id_xy:83; GFX90A: ; %bb.0:84; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX90A-NEXT: v_and_b32_e32 v0, 0x3ff, v3186; GFX90A-NEXT: global_store_dword v[0:1], v0, off87; GFX90A-NEXT: s_waitcnt vmcnt(0)88; GFX90A-NEXT: v_bfe_u32 v0, v31, 10, 1089; GFX90A-NEXT: global_store_dword v[0:1], v0, off90; GFX90A-NEXT: s_waitcnt vmcnt(0)91; GFX90A-NEXT: s_setpc_b64 s[30:31]92 %val0 = call i32 @llvm.amdgcn.workitem.id.x()93 %val1 = call i32 @llvm.amdgcn.workitem.id.y()94 store volatile i32 %val0, ptr addrspace(1) poison95 store volatile i32 %val1, ptr addrspace(1) poison96 ret void97}98 99define void @use_workitem_id_xyz() #1 {100; GFX7-LABEL: use_workitem_id_xyz:101; GFX7: ; %bb.0:102; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX7-NEXT: v_and_b32_e32 v0, 0x3ff, v31104; GFX7-NEXT: flat_store_dword v[0:1], v0105; GFX7-NEXT: s_waitcnt vmcnt(0)106; GFX7-NEXT: v_bfe_u32 v0, v31, 10, 10107; GFX7-NEXT: flat_store_dword v[0:1], v0108; GFX7-NEXT: s_waitcnt vmcnt(0)109; GFX7-NEXT: v_bfe_u32 v0, v31, 20, 10110; GFX7-NEXT: flat_store_dword v[0:1], v0111; GFX7-NEXT: s_waitcnt vmcnt(0)112; GFX7-NEXT: s_setpc_b64 s[30:31]113;114; GFX90A-LABEL: use_workitem_id_xyz:115; GFX90A: ; %bb.0:116; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX90A-NEXT: v_and_b32_e32 v0, 0x3ff, v31118; GFX90A-NEXT: global_store_dword v[0:1], v0, off119; GFX90A-NEXT: s_waitcnt vmcnt(0)120; GFX90A-NEXT: v_bfe_u32 v0, v31, 10, 10121; GFX90A-NEXT: global_store_dword v[0:1], v0, off122; GFX90A-NEXT: s_waitcnt vmcnt(0)123; GFX90A-NEXT: v_bfe_u32 v0, v31, 20, 10124; GFX90A-NEXT: global_store_dword v[0:1], v0, off125; GFX90A-NEXT: s_waitcnt vmcnt(0)126; GFX90A-NEXT: s_setpc_b64 s[30:31]127 %val0 = call i32 @llvm.amdgcn.workitem.id.x()128 %val1 = call i32 @llvm.amdgcn.workitem.id.y()129 %val2 = call i32 @llvm.amdgcn.workitem.id.z()130 store volatile i32 %val0, ptr addrspace(1) poison131 store volatile i32 %val1, ptr addrspace(1) poison132 store volatile i32 %val2, ptr addrspace(1) poison133 ret void134}135 136define void @use_workitem_id_xz() #1 {137; GFX7-LABEL: use_workitem_id_xz:138; GFX7: ; %bb.0:139; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)140; GFX7-NEXT: v_and_b32_e32 v0, 0x3ff, v31141; GFX7-NEXT: flat_store_dword v[0:1], v0142; GFX7-NEXT: s_waitcnt vmcnt(0)143; GFX7-NEXT: v_bfe_u32 v0, v31, 20, 10144; GFX7-NEXT: flat_store_dword v[0:1], v0145; GFX7-NEXT: s_waitcnt vmcnt(0)146; GFX7-NEXT: s_setpc_b64 s[30:31]147;148; GFX90A-LABEL: use_workitem_id_xz:149; GFX90A: ; %bb.0:150; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)151; GFX90A-NEXT: v_and_b32_e32 v0, 0x3ff, v31152; GFX90A-NEXT: global_store_dword v[0:1], v0, off153; GFX90A-NEXT: s_waitcnt vmcnt(0)154; GFX90A-NEXT: v_bfe_u32 v0, v31, 20, 10155; GFX90A-NEXT: global_store_dword v[0:1], v0, off156; GFX90A-NEXT: s_waitcnt vmcnt(0)157; GFX90A-NEXT: s_setpc_b64 s[30:31]158 %val0 = call i32 @llvm.amdgcn.workitem.id.x()159 %val1 = call i32 @llvm.amdgcn.workitem.id.z()160 store volatile i32 %val0, ptr addrspace(1) poison161 store volatile i32 %val1, ptr addrspace(1) poison162 ret void163}164 165define void @use_workitem_id_yz() #1 {166; GFX7-LABEL: use_workitem_id_yz:167; GFX7: ; %bb.0:168; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GFX7-NEXT: v_bfe_u32 v0, v31, 10, 10170; GFX7-NEXT: flat_store_dword v[0:1], v0171; GFX7-NEXT: s_waitcnt vmcnt(0)172; GFX7-NEXT: v_bfe_u32 v0, v31, 20, 10173; GFX7-NEXT: flat_store_dword v[0:1], v0174; GFX7-NEXT: s_waitcnt vmcnt(0)175; GFX7-NEXT: s_setpc_b64 s[30:31]176;177; GFX90A-LABEL: use_workitem_id_yz:178; GFX90A: ; %bb.0:179; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)180; GFX90A-NEXT: v_bfe_u32 v0, v31, 10, 10181; GFX90A-NEXT: global_store_dword v[0:1], v0, off182; GFX90A-NEXT: s_waitcnt vmcnt(0)183; GFX90A-NEXT: v_bfe_u32 v0, v31, 20, 10184; GFX90A-NEXT: global_store_dword v[0:1], v0, off185; GFX90A-NEXT: s_waitcnt vmcnt(0)186; GFX90A-NEXT: s_setpc_b64 s[30:31]187 %val0 = call i32 @llvm.amdgcn.workitem.id.y()188 %val1 = call i32 @llvm.amdgcn.workitem.id.z()189 store volatile i32 %val0, ptr addrspace(1) poison190 store volatile i32 %val1, ptr addrspace(1) poison191 ret void192}193 194define amdgpu_kernel void @kern_indirect_use_workitem_id_x() #1 {195; GCN-LABEL: kern_indirect_use_workitem_id_x:196; GCN: ; %bb.0:197; GCN-NEXT: s_add_u32 s0, s0, s5198; GCN-NEXT: s_addc_u32 s1, s1, 0199; GCN-NEXT: s_getpc_b64 s[4:5]200; GCN-NEXT: s_add_u32 s4, s4, use_workitem_id_x@gotpcrel32@lo+4201; GCN-NEXT: s_addc_u32 s5, s5, use_workitem_id_x@gotpcrel32@hi+12202; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0203; GCN-NEXT: v_mov_b32_e32 v31, v0204; GCN-NEXT: s_mov_b32 s32, 0205; GCN-NEXT: s_waitcnt lgkmcnt(0)206; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]207; GCN-NEXT: s_endpgm208 call void @use_workitem_id_x()209 ret void210}211; GCN: .amdhsa_system_vgpr_workitem_id 0212 213define amdgpu_kernel void @kern_indirect_use_workitem_id_y() #1 {214; GFX7-LABEL: kern_indirect_use_workitem_id_y:215; GFX7: ; %bb.0:216; GFX7-NEXT: s_add_u32 s0, s0, s5217; GFX7-NEXT: s_addc_u32 s1, s1, 0218; GFX7-NEXT: s_getpc_b64 s[4:5]219; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_y@gotpcrel32@lo+4220; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_y@gotpcrel32@hi+12221; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0222; GFX7-NEXT: v_lshlrev_b32_e32 v31, 10, v1223; GFX7-NEXT: s_mov_b32 s32, 0224; GFX7-NEXT: s_waitcnt lgkmcnt(0)225; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]226; GFX7-NEXT: s_endpgm227;228; GFX90A-LABEL: kern_indirect_use_workitem_id_y:229; GFX90A: ; %bb.0:230; GFX90A-NEXT: s_add_u32 s0, s0, s5231; GFX90A-NEXT: s_addc_u32 s1, s1, 0232; GFX90A-NEXT: s_getpc_b64 s[4:5]233; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_y@gotpcrel32@lo+4234; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_y@gotpcrel32@hi+12235; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0236; GFX90A-NEXT: v_mov_b32_e32 v31, v0237; GFX90A-NEXT: s_mov_b32 s32, 0238; GFX90A-NEXT: s_waitcnt lgkmcnt(0)239; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]240; GFX90A-NEXT: s_endpgm241 call void @use_workitem_id_y()242 ret void243}244; GCN: .amdhsa_system_vgpr_workitem_id 1245 246define amdgpu_kernel void @kern_indirect_use_workitem_id_z() #1 {247; GFX7-LABEL: kern_indirect_use_workitem_id_z:248; GFX7: ; %bb.0:249; GFX7-NEXT: s_add_u32 s0, s0, s5250; GFX7-NEXT: s_addc_u32 s1, s1, 0251; GFX7-NEXT: s_getpc_b64 s[4:5]252; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_z@gotpcrel32@lo+4253; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_z@gotpcrel32@hi+12254; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0255; GFX7-NEXT: v_lshlrev_b32_e32 v31, 20, v2256; GFX7-NEXT: s_mov_b32 s32, 0257; GFX7-NEXT: s_waitcnt lgkmcnt(0)258; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]259; GFX7-NEXT: s_endpgm260;261; GFX90A-LABEL: kern_indirect_use_workitem_id_z:262; GFX90A: ; %bb.0:263; GFX90A-NEXT: s_add_u32 s0, s0, s5264; GFX90A-NEXT: s_addc_u32 s1, s1, 0265; GFX90A-NEXT: s_getpc_b64 s[4:5]266; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_z@gotpcrel32@lo+4267; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_z@gotpcrel32@hi+12268; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0269; GFX90A-NEXT: v_mov_b32_e32 v31, v0270; GFX90A-NEXT: s_mov_b32 s32, 0271; GFX90A-NEXT: s_waitcnt lgkmcnt(0)272; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]273; GFX90A-NEXT: s_endpgm274 call void @use_workitem_id_z()275 ret void276}277; GCN: .amdhsa_system_vgpr_workitem_id 2278 279define amdgpu_kernel void @kern_indirect_use_workitem_id_xy() #1 {280; GFX7-LABEL: kern_indirect_use_workitem_id_xy:281; GFX7: ; %bb.0:282; GFX7-NEXT: s_add_u32 s0, s0, s5283; GFX7-NEXT: s_addc_u32 s1, s1, 0284; GFX7-NEXT: s_getpc_b64 s[4:5]285; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_xy@gotpcrel32@lo+4286; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_xy@gotpcrel32@hi+12287; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0288; GFX7-NEXT: v_lshlrev_b32_e32 v1, 10, v1289; GFX7-NEXT: v_or_b32_e32 v31, v0, v1290; GFX7-NEXT: s_mov_b32 s32, 0291; GFX7-NEXT: s_waitcnt lgkmcnt(0)292; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]293; GFX7-NEXT: s_endpgm294;295; GFX90A-LABEL: kern_indirect_use_workitem_id_xy:296; GFX90A: ; %bb.0:297; GFX90A-NEXT: s_add_u32 s0, s0, s5298; GFX90A-NEXT: s_addc_u32 s1, s1, 0299; GFX90A-NEXT: s_getpc_b64 s[4:5]300; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_xy@gotpcrel32@lo+4301; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_xy@gotpcrel32@hi+12302; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0303; GFX90A-NEXT: v_mov_b32_e32 v31, v0304; GFX90A-NEXT: s_mov_b32 s32, 0305; GFX90A-NEXT: s_waitcnt lgkmcnt(0)306; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]307; GFX90A-NEXT: s_endpgm308 call void @use_workitem_id_xy()309 ret void310}311 312define amdgpu_kernel void @kern_indirect_use_workitem_id_xz() #1 {313; GFX7-LABEL: kern_indirect_use_workitem_id_xz:314; GFX7: ; %bb.0:315; GFX7-NEXT: s_add_u32 s0, s0, s5316; GFX7-NEXT: s_addc_u32 s1, s1, 0317; GFX7-NEXT: s_getpc_b64 s[4:5]318; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_xz@gotpcrel32@lo+4319; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_xz@gotpcrel32@hi+12320; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0321; GFX7-NEXT: v_lshlrev_b32_e32 v1, 20, v2322; GFX7-NEXT: v_or_b32_e32 v31, v0, v1323; GFX7-NEXT: s_mov_b32 s32, 0324; GFX7-NEXT: s_waitcnt lgkmcnt(0)325; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]326; GFX7-NEXT: s_endpgm327;328; GFX90A-LABEL: kern_indirect_use_workitem_id_xz:329; GFX90A: ; %bb.0:330; GFX90A-NEXT: s_add_u32 s0, s0, s5331; GFX90A-NEXT: s_addc_u32 s1, s1, 0332; GFX90A-NEXT: s_getpc_b64 s[4:5]333; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_xz@gotpcrel32@lo+4334; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_xz@gotpcrel32@hi+12335; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0336; GFX90A-NEXT: v_mov_b32_e32 v31, v0337; GFX90A-NEXT: s_mov_b32 s32, 0338; GFX90A-NEXT: s_waitcnt lgkmcnt(0)339; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]340; GFX90A-NEXT: s_endpgm341 call void @use_workitem_id_xz()342 ret void343}344 345define amdgpu_kernel void @kern_indirect_use_workitem_id_yz() #1 {346; GFX7-LABEL: kern_indirect_use_workitem_id_yz:347; GFX7: ; %bb.0:348; GFX7-NEXT: s_add_u32 s0, s0, s5349; GFX7-NEXT: s_addc_u32 s1, s1, 0350; GFX7-NEXT: s_getpc_b64 s[4:5]351; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_yz@gotpcrel32@lo+4352; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_yz@gotpcrel32@hi+12353; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0354; GFX7-NEXT: v_lshlrev_b32_e32 v0, 20, v2355; GFX7-NEXT: v_lshlrev_b32_e32 v1, 10, v1356; GFX7-NEXT: v_or_b32_e32 v31, v1, v0357; GFX7-NEXT: s_mov_b32 s32, 0358; GFX7-NEXT: s_waitcnt lgkmcnt(0)359; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]360; GFX7-NEXT: s_endpgm361;362; GFX90A-LABEL: kern_indirect_use_workitem_id_yz:363; GFX90A: ; %bb.0:364; GFX90A-NEXT: s_add_u32 s0, s0, s5365; GFX90A-NEXT: s_addc_u32 s1, s1, 0366; GFX90A-NEXT: s_getpc_b64 s[4:5]367; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_yz@gotpcrel32@lo+4368; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_yz@gotpcrel32@hi+12369; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0370; GFX90A-NEXT: v_mov_b32_e32 v31, v0371; GFX90A-NEXT: s_mov_b32 s32, 0372; GFX90A-NEXT: s_waitcnt lgkmcnt(0)373; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]374; GFX90A-NEXT: s_endpgm375 call void @use_workitem_id_yz()376 ret void377}378 379define amdgpu_kernel void @kern_indirect_use_workitem_id_xyz() #1 {380; GFX7-LABEL: kern_indirect_use_workitem_id_xyz:381; GFX7: ; %bb.0:382; GFX7-NEXT: s_add_u32 s0, s0, s5383; GFX7-NEXT: s_addc_u32 s1, s1, 0384; GFX7-NEXT: s_getpc_b64 s[4:5]385; GFX7-NEXT: s_add_u32 s4, s4, use_workitem_id_xyz@gotpcrel32@lo+4386; GFX7-NEXT: s_addc_u32 s5, s5, use_workitem_id_xyz@gotpcrel32@hi+12387; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0388; GFX7-NEXT: v_lshlrev_b32_e32 v1, 10, v1389; GFX7-NEXT: v_lshlrev_b32_e32 v2, 20, v2390; GFX7-NEXT: v_or_b32_e32 v0, v0, v1391; GFX7-NEXT: v_or_b32_e32 v31, v0, v2392; GFX7-NEXT: s_mov_b32 s32, 0393; GFX7-NEXT: s_waitcnt lgkmcnt(0)394; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]395; GFX7-NEXT: s_endpgm396;397; GFX90A-LABEL: kern_indirect_use_workitem_id_xyz:398; GFX90A: ; %bb.0:399; GFX90A-NEXT: s_add_u32 s0, s0, s5400; GFX90A-NEXT: s_addc_u32 s1, s1, 0401; GFX90A-NEXT: s_getpc_b64 s[4:5]402; GFX90A-NEXT: s_add_u32 s4, s4, use_workitem_id_xyz@gotpcrel32@lo+4403; GFX90A-NEXT: s_addc_u32 s5, s5, use_workitem_id_xyz@gotpcrel32@hi+12404; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0405; GFX90A-NEXT: v_mov_b32_e32 v31, v0406; GFX90A-NEXT: s_mov_b32 s32, 0407; GFX90A-NEXT: s_waitcnt lgkmcnt(0)408; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]409; GFX90A-NEXT: s_endpgm410 call void @use_workitem_id_xyz()411 ret void412}413 414define void @func_indirect_use_workitem_id_x() #1 {415; GCN-LABEL: func_indirect_use_workitem_id_x:416; GCN: ; %bb.0:417; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)418; GCN-NEXT: s_mov_b32 s4, s33419; GCN-NEXT: s_mov_b32 s33, s32420; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1421; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill422; GCN-NEXT: s_mov_b64 exec, s[6:7]423; GCN-NEXT: s_addk_i32 s32, 0x400424; GCN-NEXT: v_writelane_b32 v40, s4, 2425; GCN-NEXT: s_getpc_b64 s[4:5]426; GCN-NEXT: s_add_u32 s4, s4, use_workitem_id_x@gotpcrel32@lo+4427; GCN-NEXT: s_addc_u32 s5, s5, use_workitem_id_x@gotpcrel32@hi+12428; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0429; GCN-NEXT: v_writelane_b32 v40, s30, 0430; GCN-NEXT: v_writelane_b32 v40, s31, 1431; GCN-NEXT: s_waitcnt lgkmcnt(0)432; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]433; GCN-NEXT: v_readlane_b32 s31, v40, 1434; GCN-NEXT: v_readlane_b32 s30, v40, 0435; GCN-NEXT: s_mov_b32 s32, s33436; GCN-NEXT: v_readlane_b32 s4, v40, 2437; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1438; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload439; GCN-NEXT: s_mov_b64 exec, s[6:7]440; GCN-NEXT: s_mov_b32 s33, s4441; GCN-NEXT: s_waitcnt vmcnt(0)442; GCN-NEXT: s_setpc_b64 s[30:31]443 call void @use_workitem_id_x()444 ret void445}446 447define void @func_indirect_use_workitem_id_y() #1 {448; GCN-LABEL: func_indirect_use_workitem_id_y:449; GCN: ; %bb.0:450; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)451; GCN-NEXT: s_mov_b32 s4, s33452; GCN-NEXT: s_mov_b32 s33, s32453; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1454; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill455; GCN-NEXT: s_mov_b64 exec, s[6:7]456; GCN-NEXT: s_addk_i32 s32, 0x400457; GCN-NEXT: v_writelane_b32 v40, s4, 2458; GCN-NEXT: s_getpc_b64 s[4:5]459; GCN-NEXT: s_add_u32 s4, s4, use_workitem_id_y@gotpcrel32@lo+4460; GCN-NEXT: s_addc_u32 s5, s5, use_workitem_id_y@gotpcrel32@hi+12461; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0462; GCN-NEXT: v_writelane_b32 v40, s30, 0463; GCN-NEXT: v_writelane_b32 v40, s31, 1464; GCN-NEXT: s_waitcnt lgkmcnt(0)465; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]466; GCN-NEXT: v_readlane_b32 s31, v40, 1467; GCN-NEXT: v_readlane_b32 s30, v40, 0468; GCN-NEXT: s_mov_b32 s32, s33469; GCN-NEXT: v_readlane_b32 s4, v40, 2470; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1471; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload472; GCN-NEXT: s_mov_b64 exec, s[6:7]473; GCN-NEXT: s_mov_b32 s33, s4474; GCN-NEXT: s_waitcnt vmcnt(0)475; GCN-NEXT: s_setpc_b64 s[30:31]476 call void @use_workitem_id_y()477 ret void478}479 480define void @func_indirect_use_workitem_id_z() #1 {481; GCN-LABEL: func_indirect_use_workitem_id_z:482; GCN: ; %bb.0:483; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GCN-NEXT: s_mov_b32 s4, s33485; GCN-NEXT: s_mov_b32 s33, s32486; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1487; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill488; GCN-NEXT: s_mov_b64 exec, s[6:7]489; GCN-NEXT: s_addk_i32 s32, 0x400490; GCN-NEXT: v_writelane_b32 v40, s4, 2491; GCN-NEXT: s_getpc_b64 s[4:5]492; GCN-NEXT: s_add_u32 s4, s4, use_workitem_id_z@gotpcrel32@lo+4493; GCN-NEXT: s_addc_u32 s5, s5, use_workitem_id_z@gotpcrel32@hi+12494; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0495; GCN-NEXT: v_writelane_b32 v40, s30, 0496; GCN-NEXT: v_writelane_b32 v40, s31, 1497; GCN-NEXT: s_waitcnt lgkmcnt(0)498; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]499; GCN-NEXT: v_readlane_b32 s31, v40, 1500; GCN-NEXT: v_readlane_b32 s30, v40, 0501; GCN-NEXT: s_mov_b32 s32, s33502; GCN-NEXT: v_readlane_b32 s4, v40, 2503; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1504; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload505; GCN-NEXT: s_mov_b64 exec, s[6:7]506; GCN-NEXT: s_mov_b32 s33, s4507; GCN-NEXT: s_waitcnt vmcnt(0)508; GCN-NEXT: s_setpc_b64 s[30:31]509 call void @use_workitem_id_z()510 ret void511}512 513define void @other_arg_use_workitem_id_x(i32 %arg0) #1 {514; GFX7-LABEL: other_arg_use_workitem_id_x:515; GFX7: ; %bb.0:516; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)517; GFX7-NEXT: flat_store_dword v[0:1], v0518; GFX7-NEXT: s_waitcnt vmcnt(0)519; GFX7-NEXT: v_and_b32_e32 v0, 0x3ff, v31520; GFX7-NEXT: flat_store_dword v[0:1], v0521; GFX7-NEXT: s_waitcnt vmcnt(0)522; GFX7-NEXT: s_setpc_b64 s[30:31]523;524; GFX90A-LABEL: other_arg_use_workitem_id_x:525; GFX90A: ; %bb.0:526; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)527; GFX90A-NEXT: global_store_dword v[0:1], v0, off528; GFX90A-NEXT: s_waitcnt vmcnt(0)529; GFX90A-NEXT: v_and_b32_e32 v0, 0x3ff, v31530; GFX90A-NEXT: global_store_dword v[0:1], v0, off531; GFX90A-NEXT: s_waitcnt vmcnt(0)532; GFX90A-NEXT: s_setpc_b64 s[30:31]533 %val = call i32 @llvm.amdgcn.workitem.id.x()534 store volatile i32 %arg0, ptr addrspace(1) poison535 store volatile i32 %val, ptr addrspace(1) poison536 ret void537}538 539define void @other_arg_use_workitem_id_y(i32 %arg0) #1 {540; GFX7-LABEL: other_arg_use_workitem_id_y:541; GFX7: ; %bb.0:542; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)543; GFX7-NEXT: flat_store_dword v[0:1], v0544; GFX7-NEXT: s_waitcnt vmcnt(0)545; GFX7-NEXT: v_bfe_u32 v0, v31, 10, 10546; GFX7-NEXT: flat_store_dword v[0:1], v0547; GFX7-NEXT: s_waitcnt vmcnt(0)548; GFX7-NEXT: s_setpc_b64 s[30:31]549;550; GFX90A-LABEL: other_arg_use_workitem_id_y:551; GFX90A: ; %bb.0:552; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)553; GFX90A-NEXT: global_store_dword v[0:1], v0, off554; GFX90A-NEXT: s_waitcnt vmcnt(0)555; GFX90A-NEXT: v_bfe_u32 v0, v31, 10, 10556; GFX90A-NEXT: global_store_dword v[0:1], v0, off557; GFX90A-NEXT: s_waitcnt vmcnt(0)558; GFX90A-NEXT: s_setpc_b64 s[30:31]559 %val = call i32 @llvm.amdgcn.workitem.id.y()560 store volatile i32 %arg0, ptr addrspace(1) poison561 store volatile i32 %val, ptr addrspace(1) poison562 ret void563}564 565define void @other_arg_use_workitem_id_z(i32 %arg0) #1 {566; GFX7-LABEL: other_arg_use_workitem_id_z:567; GFX7: ; %bb.0:568; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)569; GFX7-NEXT: flat_store_dword v[0:1], v0570; GFX7-NEXT: s_waitcnt vmcnt(0)571; GFX7-NEXT: v_bfe_u32 v0, v31, 20, 10572; GFX7-NEXT: flat_store_dword v[0:1], v0573; GFX7-NEXT: s_waitcnt vmcnt(0)574; GFX7-NEXT: s_setpc_b64 s[30:31]575;576; GFX90A-LABEL: other_arg_use_workitem_id_z:577; GFX90A: ; %bb.0:578; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; GFX90A-NEXT: global_store_dword v[0:1], v0, off580; GFX90A-NEXT: s_waitcnt vmcnt(0)581; GFX90A-NEXT: v_bfe_u32 v0, v31, 20, 10582; GFX90A-NEXT: global_store_dword v[0:1], v0, off583; GFX90A-NEXT: s_waitcnt vmcnt(0)584; GFX90A-NEXT: s_setpc_b64 s[30:31]585 %val = call i32 @llvm.amdgcn.workitem.id.z()586 store volatile i32 %arg0, ptr addrspace(1) poison587 store volatile i32 %val, ptr addrspace(1) poison588 ret void589}590 591define amdgpu_kernel void @kern_indirect_other_arg_use_workitem_id_x() #1 {592; GCN-LABEL: kern_indirect_other_arg_use_workitem_id_x:593; GCN: ; %bb.0:594; GCN-NEXT: s_add_u32 s0, s0, s5595; GCN-NEXT: s_addc_u32 s1, s1, 0596; GCN-NEXT: s_getpc_b64 s[4:5]597; GCN-NEXT: s_add_u32 s4, s4, other_arg_use_workitem_id_x@gotpcrel32@lo+4598; GCN-NEXT: s_addc_u32 s5, s5, other_arg_use_workitem_id_x@gotpcrel32@hi+12599; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0600; GCN-NEXT: v_mov_b32_e32 v31, v0601; GCN-NEXT: v_mov_b32_e32 v0, 0x22b602; GCN-NEXT: s_mov_b32 s32, 0603; GCN-NEXT: s_waitcnt lgkmcnt(0)604; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]605; GCN-NEXT: s_endpgm606 call void @other_arg_use_workitem_id_x(i32 555)607 ret void608}609; GCN: .amdhsa_system_vgpr_workitem_id 0610 611define amdgpu_kernel void @kern_indirect_other_arg_use_workitem_id_y() #1 {612; GFX7-LABEL: kern_indirect_other_arg_use_workitem_id_y:613; GFX7: ; %bb.0:614; GFX7-NEXT: s_add_u32 s0, s0, s5615; GFX7-NEXT: s_addc_u32 s1, s1, 0616; GFX7-NEXT: s_getpc_b64 s[4:5]617; GFX7-NEXT: s_add_u32 s4, s4, other_arg_use_workitem_id_y@gotpcrel32@lo+4618; GFX7-NEXT: s_addc_u32 s5, s5, other_arg_use_workitem_id_y@gotpcrel32@hi+12619; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0620; GFX7-NEXT: v_lshlrev_b32_e32 v31, 10, v1621; GFX7-NEXT: v_mov_b32_e32 v0, 0x22b622; GFX7-NEXT: s_mov_b32 s32, 0623; GFX7-NEXT: s_waitcnt lgkmcnt(0)624; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]625; GFX7-NEXT: s_endpgm626;627; GFX90A-LABEL: kern_indirect_other_arg_use_workitem_id_y:628; GFX90A: ; %bb.0:629; GFX90A-NEXT: s_add_u32 s0, s0, s5630; GFX90A-NEXT: s_addc_u32 s1, s1, 0631; GFX90A-NEXT: s_getpc_b64 s[4:5]632; GFX90A-NEXT: s_add_u32 s4, s4, other_arg_use_workitem_id_y@gotpcrel32@lo+4633; GFX90A-NEXT: s_addc_u32 s5, s5, other_arg_use_workitem_id_y@gotpcrel32@hi+12634; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0635; GFX90A-NEXT: v_mov_b32_e32 v31, v0636; GFX90A-NEXT: v_mov_b32_e32 v0, 0x22b637; GFX90A-NEXT: s_mov_b32 s32, 0638; GFX90A-NEXT: s_waitcnt lgkmcnt(0)639; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]640; GFX90A-NEXT: s_endpgm641 call void @other_arg_use_workitem_id_y(i32 555)642 ret void643}644; GCN: .amdhsa_system_vgpr_workitem_id 1645 646define amdgpu_kernel void @kern_indirect_other_arg_use_workitem_id_z() #1 {647; GFX7-LABEL: kern_indirect_other_arg_use_workitem_id_z:648; GFX7: ; %bb.0:649; GFX7-NEXT: s_add_u32 s0, s0, s5650; GFX7-NEXT: s_addc_u32 s1, s1, 0651; GFX7-NEXT: s_getpc_b64 s[4:5]652; GFX7-NEXT: s_add_u32 s4, s4, other_arg_use_workitem_id_z@gotpcrel32@lo+4653; GFX7-NEXT: s_addc_u32 s5, s5, other_arg_use_workitem_id_z@gotpcrel32@hi+12654; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0655; GFX7-NEXT: v_lshlrev_b32_e32 v31, 20, v2656; GFX7-NEXT: v_mov_b32_e32 v0, 0x22b657; GFX7-NEXT: s_mov_b32 s32, 0658; GFX7-NEXT: s_waitcnt lgkmcnt(0)659; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]660; GFX7-NEXT: s_endpgm661;662; GFX90A-LABEL: kern_indirect_other_arg_use_workitem_id_z:663; GFX90A: ; %bb.0:664; GFX90A-NEXT: s_add_u32 s0, s0, s5665; GFX90A-NEXT: s_addc_u32 s1, s1, 0666; GFX90A-NEXT: s_getpc_b64 s[4:5]667; GFX90A-NEXT: s_add_u32 s4, s4, other_arg_use_workitem_id_z@gotpcrel32@lo+4668; GFX90A-NEXT: s_addc_u32 s5, s5, other_arg_use_workitem_id_z@gotpcrel32@hi+12669; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0670; GFX90A-NEXT: v_mov_b32_e32 v31, v0671; GFX90A-NEXT: v_mov_b32_e32 v0, 0x22b672; GFX90A-NEXT: s_mov_b32 s32, 0673; GFX90A-NEXT: s_waitcnt lgkmcnt(0)674; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]675; GFX90A-NEXT: s_endpgm676 call void @other_arg_use_workitem_id_z(i32 555)677 ret void678}679; GCN: .amdhsa_system_vgpr_workitem_id 2680 681define void @too_many_args_use_workitem_id_x(682; GFX7-LABEL: too_many_args_use_workitem_id_x:683; GFX7: ; %bb.0:684; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)685; GFX7-NEXT: v_and_b32_e32 v31, 0x3ff, v31686; GFX7-NEXT: flat_store_dword v[0:1], v31687; GFX7-NEXT: s_waitcnt vmcnt(0)688; GFX7-NEXT: buffer_load_dword v31, off, s[0:3], s32689; GFX7-NEXT: flat_store_dword v[0:1], v0690; GFX7-NEXT: s_waitcnt vmcnt(0)691; GFX7-NEXT: flat_store_dword v[0:1], v1692; GFX7-NEXT: s_waitcnt vmcnt(0)693; GFX7-NEXT: flat_store_dword v[0:1], v2694; GFX7-NEXT: s_waitcnt vmcnt(0)695; GFX7-NEXT: flat_store_dword v[0:1], v3696; GFX7-NEXT: s_waitcnt vmcnt(0)697; GFX7-NEXT: flat_store_dword v[0:1], v4698; GFX7-NEXT: s_waitcnt vmcnt(0)699; GFX7-NEXT: flat_store_dword v[0:1], v5700; GFX7-NEXT: s_waitcnt vmcnt(0)701; GFX7-NEXT: flat_store_dword v[0:1], v6702; GFX7-NEXT: s_waitcnt vmcnt(0)703; GFX7-NEXT: flat_store_dword v[0:1], v7704; GFX7-NEXT: s_waitcnt vmcnt(0)705; GFX7-NEXT: flat_store_dword v[0:1], v8706; GFX7-NEXT: s_waitcnt vmcnt(0)707; GFX7-NEXT: flat_store_dword v[0:1], v9708; GFX7-NEXT: s_waitcnt vmcnt(0)709; GFX7-NEXT: flat_store_dword v[0:1], v10710; GFX7-NEXT: s_waitcnt vmcnt(0)711; GFX7-NEXT: flat_store_dword v[0:1], v11712; GFX7-NEXT: s_waitcnt vmcnt(0)713; GFX7-NEXT: flat_store_dword v[0:1], v12714; GFX7-NEXT: s_waitcnt vmcnt(0)715; GFX7-NEXT: flat_store_dword v[0:1], v13716; GFX7-NEXT: s_waitcnt vmcnt(0)717; GFX7-NEXT: flat_store_dword v[0:1], v14718; GFX7-NEXT: s_waitcnt vmcnt(0)719; GFX7-NEXT: flat_store_dword v[0:1], v15720; GFX7-NEXT: s_waitcnt vmcnt(0)721; GFX7-NEXT: flat_store_dword v[0:1], v16722; GFX7-NEXT: s_waitcnt vmcnt(0)723; GFX7-NEXT: flat_store_dword v[0:1], v17724; GFX7-NEXT: s_waitcnt vmcnt(0)725; GFX7-NEXT: flat_store_dword v[0:1], v18726; GFX7-NEXT: s_waitcnt vmcnt(0)727; GFX7-NEXT: flat_store_dword v[0:1], v19728; GFX7-NEXT: s_waitcnt vmcnt(0)729; GFX7-NEXT: flat_store_dword v[0:1], v20730; GFX7-NEXT: s_waitcnt vmcnt(0)731; GFX7-NEXT: flat_store_dword v[0:1], v21732; GFX7-NEXT: s_waitcnt vmcnt(0)733; GFX7-NEXT: flat_store_dword v[0:1], v22734; GFX7-NEXT: s_waitcnt vmcnt(0)735; GFX7-NEXT: flat_store_dword v[0:1], v23736; GFX7-NEXT: s_waitcnt vmcnt(0)737; GFX7-NEXT: flat_store_dword v[0:1], v24738; GFX7-NEXT: s_waitcnt vmcnt(0)739; GFX7-NEXT: flat_store_dword v[0:1], v25740; GFX7-NEXT: s_waitcnt vmcnt(0)741; GFX7-NEXT: flat_store_dword v[0:1], v26742; GFX7-NEXT: s_waitcnt vmcnt(0)743; GFX7-NEXT: flat_store_dword v[0:1], v27744; GFX7-NEXT: s_waitcnt vmcnt(0)745; GFX7-NEXT: flat_store_dword v[0:1], v28746; GFX7-NEXT: s_waitcnt vmcnt(0)747; GFX7-NEXT: flat_store_dword v[0:1], v29748; GFX7-NEXT: s_waitcnt vmcnt(0)749; GFX7-NEXT: flat_store_dword v[0:1], v30750; GFX7-NEXT: s_waitcnt vmcnt(0)751; GFX7-NEXT: flat_store_dword v[0:1], v31752; GFX7-NEXT: s_waitcnt vmcnt(0)753; GFX7-NEXT: s_setpc_b64 s[30:31]754;755; GFX90A-LABEL: too_many_args_use_workitem_id_x:756; GFX90A: ; %bb.0:757; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)758; GFX90A-NEXT: buffer_load_dword v32, off, s[0:3], s32759; GFX90A-NEXT: v_and_b32_e32 v31, 0x3ff, v31760; GFX90A-NEXT: global_store_dword v[0:1], v31, off761; GFX90A-NEXT: s_waitcnt vmcnt(0)762; GFX90A-NEXT: global_store_dword v[0:1], v0, off763; GFX90A-NEXT: s_waitcnt vmcnt(0)764; GFX90A-NEXT: global_store_dword v[0:1], v1, off765; GFX90A-NEXT: s_waitcnt vmcnt(0)766; GFX90A-NEXT: global_store_dword v[0:1], v2, off767; GFX90A-NEXT: s_waitcnt vmcnt(0)768; GFX90A-NEXT: global_store_dword v[0:1], v3, off769; GFX90A-NEXT: s_waitcnt vmcnt(0)770; GFX90A-NEXT: global_store_dword v[0:1], v4, off771; GFX90A-NEXT: s_waitcnt vmcnt(0)772; GFX90A-NEXT: global_store_dword v[0:1], v5, off773; GFX90A-NEXT: s_waitcnt vmcnt(0)774; GFX90A-NEXT: global_store_dword v[0:1], v6, off775; GFX90A-NEXT: s_waitcnt vmcnt(0)776; GFX90A-NEXT: global_store_dword v[0:1], v7, off777; GFX90A-NEXT: s_waitcnt vmcnt(0)778; GFX90A-NEXT: global_store_dword v[0:1], v8, off779; GFX90A-NEXT: s_waitcnt vmcnt(0)780; GFX90A-NEXT: global_store_dword v[0:1], v9, off781; GFX90A-NEXT: s_waitcnt vmcnt(0)782; GFX90A-NEXT: global_store_dword v[0:1], v10, off783; GFX90A-NEXT: s_waitcnt vmcnt(0)784; GFX90A-NEXT: global_store_dword v[0:1], v11, off785; GFX90A-NEXT: s_waitcnt vmcnt(0)786; GFX90A-NEXT: global_store_dword v[0:1], v12, off787; GFX90A-NEXT: s_waitcnt vmcnt(0)788; GFX90A-NEXT: global_store_dword v[0:1], v13, off789; GFX90A-NEXT: s_waitcnt vmcnt(0)790; GFX90A-NEXT: global_store_dword v[0:1], v14, off791; GFX90A-NEXT: s_waitcnt vmcnt(0)792; GFX90A-NEXT: global_store_dword v[0:1], v15, off793; GFX90A-NEXT: s_waitcnt vmcnt(0)794; GFX90A-NEXT: global_store_dword v[0:1], v16, off795; GFX90A-NEXT: s_waitcnt vmcnt(0)796; GFX90A-NEXT: global_store_dword v[0:1], v17, off797; GFX90A-NEXT: s_waitcnt vmcnt(0)798; GFX90A-NEXT: global_store_dword v[0:1], v18, off799; GFX90A-NEXT: s_waitcnt vmcnt(0)800; GFX90A-NEXT: global_store_dword v[0:1], v19, off801; GFX90A-NEXT: s_waitcnt vmcnt(0)802; GFX90A-NEXT: global_store_dword v[0:1], v20, off803; GFX90A-NEXT: s_waitcnt vmcnt(0)804; GFX90A-NEXT: global_store_dword v[0:1], v21, off805; GFX90A-NEXT: s_waitcnt vmcnt(0)806; GFX90A-NEXT: global_store_dword v[0:1], v22, off807; GFX90A-NEXT: s_waitcnt vmcnt(0)808; GFX90A-NEXT: global_store_dword v[0:1], v23, off809; GFX90A-NEXT: s_waitcnt vmcnt(0)810; GFX90A-NEXT: global_store_dword v[0:1], v24, off811; GFX90A-NEXT: s_waitcnt vmcnt(0)812; GFX90A-NEXT: global_store_dword v[0:1], v25, off813; GFX90A-NEXT: s_waitcnt vmcnt(0)814; GFX90A-NEXT: global_store_dword v[0:1], v26, off815; GFX90A-NEXT: s_waitcnt vmcnt(0)816; GFX90A-NEXT: global_store_dword v[0:1], v27, off817; GFX90A-NEXT: s_waitcnt vmcnt(0)818; GFX90A-NEXT: global_store_dword v[0:1], v28, off819; GFX90A-NEXT: s_waitcnt vmcnt(0)820; GFX90A-NEXT: global_store_dword v[0:1], v29, off821; GFX90A-NEXT: s_waitcnt vmcnt(0)822; GFX90A-NEXT: global_store_dword v[0:1], v30, off823; GFX90A-NEXT: s_waitcnt vmcnt(0)824; GFX90A-NEXT: global_store_dword v[0:1], v32, off825; GFX90A-NEXT: s_waitcnt vmcnt(0)826; GFX90A-NEXT: s_setpc_b64 s[30:31]827 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,828 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,829 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,830 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30, i32 %arg31) #1 {831 %val = call i32 @llvm.amdgcn.workitem.id.x()832 store volatile i32 %val, ptr addrspace(1) poison833 834 store volatile i32 %arg0, ptr addrspace(1) poison835 store volatile i32 %arg1, ptr addrspace(1) poison836 store volatile i32 %arg2, ptr addrspace(1) poison837 store volatile i32 %arg3, ptr addrspace(1) poison838 store volatile i32 %arg4, ptr addrspace(1) poison839 store volatile i32 %arg5, ptr addrspace(1) poison840 store volatile i32 %arg6, ptr addrspace(1) poison841 store volatile i32 %arg7, ptr addrspace(1) poison842 843 store volatile i32 %arg8, ptr addrspace(1) poison844 store volatile i32 %arg9, ptr addrspace(1) poison845 store volatile i32 %arg10, ptr addrspace(1) poison846 store volatile i32 %arg11, ptr addrspace(1) poison847 store volatile i32 %arg12, ptr addrspace(1) poison848 store volatile i32 %arg13, ptr addrspace(1) poison849 store volatile i32 %arg14, ptr addrspace(1) poison850 store volatile i32 %arg15, ptr addrspace(1) poison851 852 store volatile i32 %arg16, ptr addrspace(1) poison853 store volatile i32 %arg17, ptr addrspace(1) poison854 store volatile i32 %arg18, ptr addrspace(1) poison855 store volatile i32 %arg19, ptr addrspace(1) poison856 store volatile i32 %arg20, ptr addrspace(1) poison857 store volatile i32 %arg21, ptr addrspace(1) poison858 store volatile i32 %arg22, ptr addrspace(1) poison859 store volatile i32 %arg23, ptr addrspace(1) poison860 861 store volatile i32 %arg24, ptr addrspace(1) poison862 store volatile i32 %arg25, ptr addrspace(1) poison863 store volatile i32 %arg26, ptr addrspace(1) poison864 store volatile i32 %arg27, ptr addrspace(1) poison865 store volatile i32 %arg28, ptr addrspace(1) poison866 store volatile i32 %arg29, ptr addrspace(1) poison867 store volatile i32 %arg30, ptr addrspace(1) poison868 store volatile i32 %arg31, ptr addrspace(1) poison869 870 ret void871}872 873define amdgpu_kernel void @kern_call_too_many_args_use_workitem_id_x() #1 {874; GCN-LABEL: kern_call_too_many_args_use_workitem_id_x:875; GCN: ; %bb.0:876; GCN-NEXT: s_add_u32 s0, s0, s5877; GCN-NEXT: s_addc_u32 s1, s1, 0878; GCN-NEXT: s_getpc_b64 s[4:5]879; GCN-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x@gotpcrel32@lo+4880; GCN-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x@gotpcrel32@hi+12881; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0882; GCN-NEXT: s_mov_b32 s32, 0883; GCN-NEXT: v_mov_b32_e32 v1, 0x140884; GCN-NEXT: buffer_store_dword v1, off, s[0:3], s32885; GCN-NEXT: v_mov_b32_e32 v31, v0886; GCN-NEXT: v_mov_b32_e32 v0, 10887; GCN-NEXT: v_mov_b32_e32 v1, 20888; GCN-NEXT: v_mov_b32_e32 v2, 30889; GCN-NEXT: v_mov_b32_e32 v3, 40890; GCN-NEXT: v_mov_b32_e32 v4, 50891; GCN-NEXT: v_mov_b32_e32 v5, 60892; GCN-NEXT: v_mov_b32_e32 v6, 0x46893; GCN-NEXT: v_mov_b32_e32 v7, 0x50894; GCN-NEXT: v_mov_b32_e32 v8, 0x5a895; GCN-NEXT: v_mov_b32_e32 v9, 0x64896; GCN-NEXT: v_mov_b32_e32 v10, 0x6e897; GCN-NEXT: v_mov_b32_e32 v11, 0x78898; GCN-NEXT: v_mov_b32_e32 v12, 0x82899; GCN-NEXT: v_mov_b32_e32 v13, 0x8c900; GCN-NEXT: v_mov_b32_e32 v14, 0x96901; GCN-NEXT: v_mov_b32_e32 v15, 0xa0902; GCN-NEXT: v_mov_b32_e32 v16, 0xaa903; GCN-NEXT: v_mov_b32_e32 v17, 0xb4904; GCN-NEXT: v_mov_b32_e32 v18, 0xbe905; GCN-NEXT: v_mov_b32_e32 v19, 0xc8906; GCN-NEXT: v_mov_b32_e32 v20, 0xd2907; GCN-NEXT: v_mov_b32_e32 v21, 0xdc908; GCN-NEXT: v_mov_b32_e32 v22, 0xe6909; GCN-NEXT: v_mov_b32_e32 v23, 0xf0910; GCN-NEXT: v_mov_b32_e32 v24, 0xfa911; GCN-NEXT: v_mov_b32_e32 v25, 0x104912; GCN-NEXT: v_mov_b32_e32 v26, 0x10e913; GCN-NEXT: v_mov_b32_e32 v27, 0x118914; GCN-NEXT: v_mov_b32_e32 v28, 0x122915; GCN-NEXT: v_mov_b32_e32 v29, 0x12c916; GCN-NEXT: v_mov_b32_e32 v30, 0x136917; GCN-NEXT: s_waitcnt lgkmcnt(0)918; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]919; GCN-NEXT: s_endpgm920 call void @too_many_args_use_workitem_id_x(921 i32 10, i32 20, i32 30, i32 40,922 i32 50, i32 60, i32 70, i32 80,923 i32 90, i32 100, i32 110, i32 120,924 i32 130, i32 140, i32 150, i32 160,925 i32 170, i32 180, i32 190, i32 200,926 i32 210, i32 220, i32 230, i32 240,927 i32 250, i32 260, i32 270, i32 280,928 i32 290, i32 300, i32 310, i32 320)929 ret void930}931; GCN: .amdhsa_system_vgpr_workitem_id 0932 933define void @func_call_too_many_args_use_workitem_id_x(i32 %arg0) #1 {934; GFX7-LABEL: func_call_too_many_args_use_workitem_id_x:935; GFX7: ; %bb.0:936; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)937; GFX7-NEXT: s_mov_b32 s4, s33938; GFX7-NEXT: s_mov_b32 s33, s32939; GFX7-NEXT: s_or_saveexec_b64 s[6:7], -1940; GFX7-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill941; GFX7-NEXT: s_mov_b64 exec, s[6:7]942; GFX7-NEXT: s_addk_i32 s32, 0x400943; GFX7-NEXT: v_writelane_b32 v40, s4, 2944; GFX7-NEXT: s_getpc_b64 s[4:5]945; GFX7-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x@gotpcrel32@lo+4946; GFX7-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x@gotpcrel32@hi+12947; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0948; GFX7-NEXT: flat_store_dword v[0:1], v0949; GFX7-NEXT: s_waitcnt vmcnt(0)950; GFX7-NEXT: v_mov_b32_e32 v0, 0x140951; GFX7-NEXT: v_writelane_b32 v40, s30, 0952; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], s32953; GFX7-NEXT: v_mov_b32_e32 v0, 10954; GFX7-NEXT: v_mov_b32_e32 v1, 20955; GFX7-NEXT: v_mov_b32_e32 v2, 30956; GFX7-NEXT: v_mov_b32_e32 v3, 40957; GFX7-NEXT: v_mov_b32_e32 v4, 50958; GFX7-NEXT: v_mov_b32_e32 v5, 60959; GFX7-NEXT: v_mov_b32_e32 v6, 0x46960; GFX7-NEXT: v_mov_b32_e32 v7, 0x50961; GFX7-NEXT: v_mov_b32_e32 v8, 0x5a962; GFX7-NEXT: v_mov_b32_e32 v9, 0x64963; GFX7-NEXT: v_mov_b32_e32 v10, 0x6e964; GFX7-NEXT: v_mov_b32_e32 v11, 0x78965; GFX7-NEXT: v_mov_b32_e32 v12, 0x82966; GFX7-NEXT: v_mov_b32_e32 v13, 0x8c967; GFX7-NEXT: v_mov_b32_e32 v14, 0x96968; GFX7-NEXT: v_mov_b32_e32 v15, 0xa0969; GFX7-NEXT: v_mov_b32_e32 v16, 0xaa970; GFX7-NEXT: v_mov_b32_e32 v17, 0xb4971; GFX7-NEXT: v_mov_b32_e32 v18, 0xbe972; GFX7-NEXT: v_mov_b32_e32 v19, 0xc8973; GFX7-NEXT: v_mov_b32_e32 v20, 0xd2974; GFX7-NEXT: v_mov_b32_e32 v21, 0xdc975; GFX7-NEXT: v_mov_b32_e32 v22, 0xe6976; GFX7-NEXT: v_mov_b32_e32 v23, 0xf0977; GFX7-NEXT: v_mov_b32_e32 v24, 0xfa978; GFX7-NEXT: v_mov_b32_e32 v25, 0x104979; GFX7-NEXT: v_mov_b32_e32 v26, 0x10e980; GFX7-NEXT: v_mov_b32_e32 v27, 0x118981; GFX7-NEXT: v_mov_b32_e32 v28, 0x122982; GFX7-NEXT: v_mov_b32_e32 v29, 0x12c983; GFX7-NEXT: v_mov_b32_e32 v30, 0x136984; GFX7-NEXT: v_writelane_b32 v40, s31, 1985; GFX7-NEXT: s_waitcnt lgkmcnt(0)986; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]987; GFX7-NEXT: v_readlane_b32 s31, v40, 1988; GFX7-NEXT: v_readlane_b32 s30, v40, 0989; GFX7-NEXT: s_mov_b32 s32, s33990; GFX7-NEXT: v_readlane_b32 s4, v40, 2991; GFX7-NEXT: s_or_saveexec_b64 s[6:7], -1992; GFX7-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload993; GFX7-NEXT: s_mov_b64 exec, s[6:7]994; GFX7-NEXT: s_mov_b32 s33, s4995; GFX7-NEXT: s_waitcnt vmcnt(0)996; GFX7-NEXT: s_setpc_b64 s[30:31]997;998; GFX90A-LABEL: func_call_too_many_args_use_workitem_id_x:999; GFX90A: ; %bb.0:1000; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1001; GFX90A-NEXT: s_mov_b32 s4, s331002; GFX90A-NEXT: s_mov_b32 s33, s321003; GFX90A-NEXT: s_or_saveexec_b64 s[6:7], -11004; GFX90A-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill1005; GFX90A-NEXT: s_mov_b64 exec, s[6:7]1006; GFX90A-NEXT: s_addk_i32 s32, 0x4001007; GFX90A-NEXT: v_writelane_b32 v40, s4, 21008; GFX90A-NEXT: s_getpc_b64 s[4:5]1009; GFX90A-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x@gotpcrel32@lo+41010; GFX90A-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x@gotpcrel32@hi+121011; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01012; GFX90A-NEXT: global_store_dword v[0:1], v0, off1013; GFX90A-NEXT: s_waitcnt vmcnt(0)1014; GFX90A-NEXT: v_mov_b32_e32 v0, 0x1401015; GFX90A-NEXT: v_writelane_b32 v40, s30, 01016; GFX90A-NEXT: buffer_store_dword v0, off, s[0:3], s321017; GFX90A-NEXT: v_mov_b32_e32 v0, 101018; GFX90A-NEXT: v_mov_b32_e32 v1, 201019; GFX90A-NEXT: v_mov_b32_e32 v2, 301020; GFX90A-NEXT: v_mov_b32_e32 v3, 401021; GFX90A-NEXT: v_mov_b32_e32 v4, 501022; GFX90A-NEXT: v_mov_b32_e32 v5, 601023; GFX90A-NEXT: v_mov_b32_e32 v6, 0x461024; GFX90A-NEXT: v_mov_b32_e32 v7, 0x501025; GFX90A-NEXT: v_mov_b32_e32 v8, 0x5a1026; GFX90A-NEXT: v_mov_b32_e32 v9, 0x641027; GFX90A-NEXT: v_mov_b32_e32 v10, 0x6e1028; GFX90A-NEXT: v_mov_b32_e32 v11, 0x781029; GFX90A-NEXT: v_mov_b32_e32 v12, 0x821030; GFX90A-NEXT: v_mov_b32_e32 v13, 0x8c1031; GFX90A-NEXT: v_mov_b32_e32 v14, 0x961032; GFX90A-NEXT: v_mov_b32_e32 v15, 0xa01033; GFX90A-NEXT: v_mov_b32_e32 v16, 0xaa1034; GFX90A-NEXT: v_mov_b32_e32 v17, 0xb41035; GFX90A-NEXT: v_mov_b32_e32 v18, 0xbe1036; GFX90A-NEXT: v_mov_b32_e32 v19, 0xc81037; GFX90A-NEXT: v_mov_b32_e32 v20, 0xd21038; GFX90A-NEXT: v_mov_b32_e32 v21, 0xdc1039; GFX90A-NEXT: v_mov_b32_e32 v22, 0xe61040; GFX90A-NEXT: v_mov_b32_e32 v23, 0xf01041; GFX90A-NEXT: v_mov_b32_e32 v24, 0xfa1042; GFX90A-NEXT: v_mov_b32_e32 v25, 0x1041043; GFX90A-NEXT: v_mov_b32_e32 v26, 0x10e1044; GFX90A-NEXT: v_mov_b32_e32 v27, 0x1181045; GFX90A-NEXT: v_mov_b32_e32 v28, 0x1221046; GFX90A-NEXT: v_mov_b32_e32 v29, 0x12c1047; GFX90A-NEXT: v_mov_b32_e32 v30, 0x1361048; GFX90A-NEXT: v_writelane_b32 v40, s31, 11049; GFX90A-NEXT: s_waitcnt lgkmcnt(0)1050; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]1051; GFX90A-NEXT: v_readlane_b32 s31, v40, 11052; GFX90A-NEXT: v_readlane_b32 s30, v40, 01053; GFX90A-NEXT: s_mov_b32 s32, s331054; GFX90A-NEXT: v_readlane_b32 s4, v40, 21055; GFX90A-NEXT: s_or_saveexec_b64 s[6:7], -11056; GFX90A-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload1057; GFX90A-NEXT: s_mov_b64 exec, s[6:7]1058; GFX90A-NEXT: s_mov_b32 s33, s41059; GFX90A-NEXT: s_waitcnt vmcnt(0)1060; GFX90A-NEXT: s_setpc_b64 s[30:31]1061 store volatile i32 %arg0, ptr addrspace(1) poison1062 call void @too_many_args_use_workitem_id_x(1063 i32 10, i32 20, i32 30, i32 40,1064 i32 50, i32 60, i32 70, i32 80,1065 i32 90, i32 100, i32 110, i32 120,1066 i32 130, i32 140, i32 150, i32 160,1067 i32 170, i32 180, i32 190, i32 200,1068 i32 210, i32 220, i32 230, i32 240,1069 i32 250, i32 260, i32 270, i32 280,1070 i32 290, i32 300, i32 310, i32 320)1071 ret void1072}1073 1074; Requires loading and storing to stack slot.1075define void @too_many_args_call_too_many_args_use_workitem_id_x(1076; GCN-LABEL: too_many_args_call_too_many_args_use_workitem_id_x:1077; GCN: ; %bb.0:1078; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GCN-NEXT: s_mov_b32 s4, s331080; GCN-NEXT: s_mov_b32 s33, s321081; GCN-NEXT: s_or_saveexec_b64 s[6:7], -11082; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill1083; GCN-NEXT: s_mov_b64 exec, s[6:7]1084; GCN-NEXT: buffer_load_dword v32, off, s[0:3], s331085; GCN-NEXT: s_addk_i32 s32, 0x4001086; GCN-NEXT: v_writelane_b32 v40, s4, 21087; GCN-NEXT: s_getpc_b64 s[4:5]1088; GCN-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x@gotpcrel32@lo+41089; GCN-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x@gotpcrel32@hi+121090; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01091; GCN-NEXT: v_writelane_b32 v40, s30, 01092; GCN-NEXT: v_writelane_b32 v40, s31, 11093; GCN-NEXT: s_waitcnt vmcnt(0)1094; GCN-NEXT: buffer_store_dword v32, off, s[0:3], s321095; GCN-NEXT: s_waitcnt lgkmcnt(0)1096; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]1097; GCN-NEXT: v_readlane_b32 s31, v40, 11098; GCN-NEXT: v_readlane_b32 s30, v40, 01099; GCN-NEXT: s_mov_b32 s32, s331100; GCN-NEXT: v_readlane_b32 s4, v40, 21101; GCN-NEXT: s_or_saveexec_b64 s[6:7], -11102; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload1103; GCN-NEXT: s_mov_b64 exec, s[6:7]1104; GCN-NEXT: s_mov_b32 s33, s41105; GCN-NEXT: s_waitcnt vmcnt(0)1106; GCN-NEXT: s_setpc_b64 s[30:31]1107 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,1108 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,1109 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,1110 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30, i32 %arg31) #1 {1111 call void @too_many_args_use_workitem_id_x(1112 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,1113 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,1114 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,1115 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30, i32 %arg31)1116 ret void1117}1118 1119; stack layout:1120; frame[0] = stack passed arg231121; frame[1] = byval arg321122define void @too_many_args_use_workitem_id_x_byval(1123; GFX7-LABEL: too_many_args_use_workitem_id_x_byval:1124; GFX7: ; %bb.0:1125; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1126; GFX7-NEXT: v_and_b32_e32 v31, 0x3ff, v311127; GFX7-NEXT: flat_store_dword v[0:1], v311128; GFX7-NEXT: s_waitcnt vmcnt(0)1129; GFX7-NEXT: buffer_load_dword v31, off, s[0:3], s321130; GFX7-NEXT: flat_store_dword v[0:1], v01131; GFX7-NEXT: s_waitcnt vmcnt(0)1132; GFX7-NEXT: flat_store_dword v[0:1], v11133; GFX7-NEXT: s_waitcnt vmcnt(0)1134; GFX7-NEXT: flat_store_dword v[0:1], v21135; GFX7-NEXT: s_waitcnt vmcnt(0)1136; GFX7-NEXT: flat_store_dword v[0:1], v31137; GFX7-NEXT: s_waitcnt vmcnt(0)1138; GFX7-NEXT: flat_store_dword v[0:1], v41139; GFX7-NEXT: s_waitcnt vmcnt(0)1140; GFX7-NEXT: flat_store_dword v[0:1], v51141; GFX7-NEXT: s_waitcnt vmcnt(0)1142; GFX7-NEXT: flat_store_dword v[0:1], v61143; GFX7-NEXT: s_waitcnt vmcnt(0)1144; GFX7-NEXT: flat_store_dword v[0:1], v71145; GFX7-NEXT: s_waitcnt vmcnt(0)1146; GFX7-NEXT: flat_store_dword v[0:1], v81147; GFX7-NEXT: s_waitcnt vmcnt(0)1148; GFX7-NEXT: flat_store_dword v[0:1], v91149; GFX7-NEXT: s_waitcnt vmcnt(0)1150; GFX7-NEXT: flat_store_dword v[0:1], v101151; GFX7-NEXT: s_waitcnt vmcnt(0)1152; GFX7-NEXT: flat_store_dword v[0:1], v111153; GFX7-NEXT: s_waitcnt vmcnt(0)1154; GFX7-NEXT: flat_store_dword v[0:1], v121155; GFX7-NEXT: s_waitcnt vmcnt(0)1156; GFX7-NEXT: flat_store_dword v[0:1], v131157; GFX7-NEXT: s_waitcnt vmcnt(0)1158; GFX7-NEXT: flat_store_dword v[0:1], v141159; GFX7-NEXT: s_waitcnt vmcnt(0)1160; GFX7-NEXT: flat_store_dword v[0:1], v151161; GFX7-NEXT: s_waitcnt vmcnt(0)1162; GFX7-NEXT: flat_store_dword v[0:1], v161163; GFX7-NEXT: s_waitcnt vmcnt(0)1164; GFX7-NEXT: flat_store_dword v[0:1], v171165; GFX7-NEXT: s_waitcnt vmcnt(0)1166; GFX7-NEXT: flat_store_dword v[0:1], v181167; GFX7-NEXT: s_waitcnt vmcnt(0)1168; GFX7-NEXT: flat_store_dword v[0:1], v191169; GFX7-NEXT: s_waitcnt vmcnt(0)1170; GFX7-NEXT: flat_store_dword v[0:1], v201171; GFX7-NEXT: s_waitcnt vmcnt(0)1172; GFX7-NEXT: flat_store_dword v[0:1], v211173; GFX7-NEXT: s_waitcnt vmcnt(0)1174; GFX7-NEXT: flat_store_dword v[0:1], v221175; GFX7-NEXT: s_waitcnt vmcnt(0)1176; GFX7-NEXT: flat_store_dword v[0:1], v231177; GFX7-NEXT: s_waitcnt vmcnt(0)1178; GFX7-NEXT: flat_store_dword v[0:1], v241179; GFX7-NEXT: s_waitcnt vmcnt(0)1180; GFX7-NEXT: flat_store_dword v[0:1], v251181; GFX7-NEXT: s_waitcnt vmcnt(0)1182; GFX7-NEXT: flat_store_dword v[0:1], v261183; GFX7-NEXT: s_waitcnt vmcnt(0)1184; GFX7-NEXT: flat_store_dword v[0:1], v271185; GFX7-NEXT: s_waitcnt vmcnt(0)1186; GFX7-NEXT: flat_store_dword v[0:1], v281187; GFX7-NEXT: s_waitcnt vmcnt(0)1188; GFX7-NEXT: flat_store_dword v[0:1], v291189; GFX7-NEXT: s_waitcnt vmcnt(0)1190; GFX7-NEXT: flat_store_dword v[0:1], v301191; GFX7-NEXT: s_waitcnt vmcnt(0)1192; GFX7-NEXT: flat_store_dword v[0:1], v311193; GFX7-NEXT: s_waitcnt vmcnt(0)1194; GFX7-NEXT: buffer_load_dword v0, off, s[0:3], s32 offset:4 glc1195; GFX7-NEXT: s_waitcnt vmcnt(0)1196; GFX7-NEXT: s_setpc_b64 s[30:31]1197;1198; GFX90A-LABEL: too_many_args_use_workitem_id_x_byval:1199; GFX90A: ; %bb.0:1200; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX90A-NEXT: buffer_load_dword v32, off, s[0:3], s321202; GFX90A-NEXT: v_and_b32_e32 v31, 0x3ff, v311203; GFX90A-NEXT: global_store_dword v[0:1], v31, off1204; GFX90A-NEXT: s_waitcnt vmcnt(0)1205; GFX90A-NEXT: global_store_dword v[0:1], v0, off1206; GFX90A-NEXT: s_waitcnt vmcnt(0)1207; GFX90A-NEXT: global_store_dword v[0:1], v1, off1208; GFX90A-NEXT: s_waitcnt vmcnt(0)1209; GFX90A-NEXT: global_store_dword v[0:1], v2, off1210; GFX90A-NEXT: s_waitcnt vmcnt(0)1211; GFX90A-NEXT: global_store_dword v[0:1], v3, off1212; GFX90A-NEXT: s_waitcnt vmcnt(0)1213; GFX90A-NEXT: global_store_dword v[0:1], v4, off1214; GFX90A-NEXT: s_waitcnt vmcnt(0)1215; GFX90A-NEXT: global_store_dword v[0:1], v5, off1216; GFX90A-NEXT: s_waitcnt vmcnt(0)1217; GFX90A-NEXT: global_store_dword v[0:1], v6, off1218; GFX90A-NEXT: s_waitcnt vmcnt(0)1219; GFX90A-NEXT: global_store_dword v[0:1], v7, off1220; GFX90A-NEXT: s_waitcnt vmcnt(0)1221; GFX90A-NEXT: global_store_dword v[0:1], v8, off1222; GFX90A-NEXT: s_waitcnt vmcnt(0)1223; GFX90A-NEXT: global_store_dword v[0:1], v9, off1224; GFX90A-NEXT: s_waitcnt vmcnt(0)1225; GFX90A-NEXT: global_store_dword v[0:1], v10, off1226; GFX90A-NEXT: s_waitcnt vmcnt(0)1227; GFX90A-NEXT: global_store_dword v[0:1], v11, off1228; GFX90A-NEXT: s_waitcnt vmcnt(0)1229; GFX90A-NEXT: global_store_dword v[0:1], v12, off1230; GFX90A-NEXT: s_waitcnt vmcnt(0)1231; GFX90A-NEXT: global_store_dword v[0:1], v13, off1232; GFX90A-NEXT: s_waitcnt vmcnt(0)1233; GFX90A-NEXT: global_store_dword v[0:1], v14, off1234; GFX90A-NEXT: s_waitcnt vmcnt(0)1235; GFX90A-NEXT: global_store_dword v[0:1], v15, off1236; GFX90A-NEXT: s_waitcnt vmcnt(0)1237; GFX90A-NEXT: global_store_dword v[0:1], v16, off1238; GFX90A-NEXT: s_waitcnt vmcnt(0)1239; GFX90A-NEXT: global_store_dword v[0:1], v17, off1240; GFX90A-NEXT: s_waitcnt vmcnt(0)1241; GFX90A-NEXT: global_store_dword v[0:1], v18, off1242; GFX90A-NEXT: s_waitcnt vmcnt(0)1243; GFX90A-NEXT: global_store_dword v[0:1], v19, off1244; GFX90A-NEXT: s_waitcnt vmcnt(0)1245; GFX90A-NEXT: global_store_dword v[0:1], v20, off1246; GFX90A-NEXT: s_waitcnt vmcnt(0)1247; GFX90A-NEXT: global_store_dword v[0:1], v21, off1248; GFX90A-NEXT: s_waitcnt vmcnt(0)1249; GFX90A-NEXT: global_store_dword v[0:1], v22, off1250; GFX90A-NEXT: s_waitcnt vmcnt(0)1251; GFX90A-NEXT: global_store_dword v[0:1], v23, off1252; GFX90A-NEXT: s_waitcnt vmcnt(0)1253; GFX90A-NEXT: global_store_dword v[0:1], v24, off1254; GFX90A-NEXT: s_waitcnt vmcnt(0)1255; GFX90A-NEXT: global_store_dword v[0:1], v25, off1256; GFX90A-NEXT: s_waitcnt vmcnt(0)1257; GFX90A-NEXT: global_store_dword v[0:1], v26, off1258; GFX90A-NEXT: s_waitcnt vmcnt(0)1259; GFX90A-NEXT: global_store_dword v[0:1], v27, off1260; GFX90A-NEXT: s_waitcnt vmcnt(0)1261; GFX90A-NEXT: global_store_dword v[0:1], v28, off1262; GFX90A-NEXT: s_waitcnt vmcnt(0)1263; GFX90A-NEXT: global_store_dword v[0:1], v29, off1264; GFX90A-NEXT: s_waitcnt vmcnt(0)1265; GFX90A-NEXT: global_store_dword v[0:1], v30, off1266; GFX90A-NEXT: s_waitcnt vmcnt(0)1267; GFX90A-NEXT: global_store_dword v[0:1], v32, off1268; GFX90A-NEXT: s_waitcnt vmcnt(0)1269; GFX90A-NEXT: buffer_load_dword v0, off, s[0:3], s32 offset:4 glc1270; GFX90A-NEXT: s_waitcnt vmcnt(0)1271; GFX90A-NEXT: s_setpc_b64 s[30:31]1272 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,1273 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,1274 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,1275 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30, i32 %arg31, ptr addrspace(5) byval(i32) %arg32) #1 {1276 %val = call i32 @llvm.amdgcn.workitem.id.x()1277 store volatile i32 %val, ptr addrspace(1) poison1278 1279 store volatile i32 %arg0, ptr addrspace(1) poison1280 store volatile i32 %arg1, ptr addrspace(1) poison1281 store volatile i32 %arg2, ptr addrspace(1) poison1282 store volatile i32 %arg3, ptr addrspace(1) poison1283 store volatile i32 %arg4, ptr addrspace(1) poison1284 store volatile i32 %arg5, ptr addrspace(1) poison1285 store volatile i32 %arg6, ptr addrspace(1) poison1286 store volatile i32 %arg7, ptr addrspace(1) poison1287 1288 store volatile i32 %arg8, ptr addrspace(1) poison1289 store volatile i32 %arg9, ptr addrspace(1) poison1290 store volatile i32 %arg10, ptr addrspace(1) poison1291 store volatile i32 %arg11, ptr addrspace(1) poison1292 store volatile i32 %arg12, ptr addrspace(1) poison1293 store volatile i32 %arg13, ptr addrspace(1) poison1294 store volatile i32 %arg14, ptr addrspace(1) poison1295 store volatile i32 %arg15, ptr addrspace(1) poison1296 1297 store volatile i32 %arg16, ptr addrspace(1) poison1298 store volatile i32 %arg17, ptr addrspace(1) poison1299 store volatile i32 %arg18, ptr addrspace(1) poison1300 store volatile i32 %arg19, ptr addrspace(1) poison1301 store volatile i32 %arg20, ptr addrspace(1) poison1302 store volatile i32 %arg21, ptr addrspace(1) poison1303 store volatile i32 %arg22, ptr addrspace(1) poison1304 store volatile i32 %arg23, ptr addrspace(1) poison1305 1306 store volatile i32 %arg24, ptr addrspace(1) poison1307 store volatile i32 %arg25, ptr addrspace(1) poison1308 store volatile i32 %arg26, ptr addrspace(1) poison1309 store volatile i32 %arg27, ptr addrspace(1) poison1310 store volatile i32 %arg28, ptr addrspace(1) poison1311 store volatile i32 %arg29, ptr addrspace(1) poison1312 store volatile i32 %arg30, ptr addrspace(1) poison1313 store volatile i32 %arg31, ptr addrspace(1) poison1314 %private = load volatile i32, ptr addrspace(5) %arg321315 ret void1316}1317 1318; sp[0] = stack passed %arg311319; sp[1] = byval1320; Local stack object initialize. Offset 0 is the emergency spill slot.1321define amdgpu_kernel void @kern_call_too_many_args_use_workitem_id_x_byval() #1 {1322; GCN-LABEL: kern_call_too_many_args_use_workitem_id_x_byval:1323; GCN: ; %bb.0:1324; GCN-NEXT: s_add_u32 s0, s0, s51325; GCN-NEXT: s_addc_u32 s1, s1, 01326; GCN-NEXT: v_mov_b32_e32 v31, v01327; GCN-NEXT: v_mov_b32_e32 v0, 0x3e71328; GCN-NEXT: s_movk_i32 s32, 0x4001329; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 01330; GCN-NEXT: s_waitcnt vmcnt(0)1331; GCN-NEXT: v_mov_b32_e32 v0, 0x1401332; GCN-NEXT: buffer_store_dword v0, off, s[0:3], s321333; GCN-NEXT: buffer_load_dword v0, off, s[0:3], 01334; GCN-NEXT: s_getpc_b64 s[4:5]1335; GCN-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x_byval@gotpcrel32@lo+41336; GCN-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x_byval@gotpcrel32@hi+121337; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01338; GCN-NEXT: v_mov_b32_e32 v1, 201339; GCN-NEXT: v_mov_b32_e32 v2, 301340; GCN-NEXT: v_mov_b32_e32 v3, 401341; GCN-NEXT: v_mov_b32_e32 v4, 501342; GCN-NEXT: v_mov_b32_e32 v5, 601343; GCN-NEXT: v_mov_b32_e32 v6, 0x461344; GCN-NEXT: v_mov_b32_e32 v7, 0x501345; GCN-NEXT: v_mov_b32_e32 v8, 0x5a1346; GCN-NEXT: v_mov_b32_e32 v9, 0x641347; GCN-NEXT: v_mov_b32_e32 v10, 0x6e1348; GCN-NEXT: v_mov_b32_e32 v11, 0x781349; GCN-NEXT: v_mov_b32_e32 v12, 0x821350; GCN-NEXT: v_mov_b32_e32 v13, 0x8c1351; GCN-NEXT: v_mov_b32_e32 v14, 0x961352; GCN-NEXT: v_mov_b32_e32 v15, 0xa01353; GCN-NEXT: v_mov_b32_e32 v16, 0xaa1354; GCN-NEXT: v_mov_b32_e32 v17, 0xb41355; GCN-NEXT: v_mov_b32_e32 v18, 0xbe1356; GCN-NEXT: v_mov_b32_e32 v19, 0xc81357; GCN-NEXT: v_mov_b32_e32 v20, 0xd21358; GCN-NEXT: v_mov_b32_e32 v21, 0xdc1359; GCN-NEXT: v_mov_b32_e32 v22, 0xe61360; GCN-NEXT: v_mov_b32_e32 v23, 0xf01361; GCN-NEXT: v_mov_b32_e32 v24, 0xfa1362; GCN-NEXT: v_mov_b32_e32 v25, 0x1041363; GCN-NEXT: v_mov_b32_e32 v26, 0x10e1364; GCN-NEXT: v_mov_b32_e32 v27, 0x1181365; GCN-NEXT: v_mov_b32_e32 v28, 0x1221366; GCN-NEXT: v_mov_b32_e32 v29, 0x12c1367; GCN-NEXT: v_mov_b32_e32 v30, 0x1361368; GCN-NEXT: s_waitcnt vmcnt(0)1369; GCN-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:41370; GCN-NEXT: v_mov_b32_e32 v0, 101371; GCN-NEXT: s_waitcnt lgkmcnt(0)1372; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]1373; GCN-NEXT: s_endpgm1374 %alloca = alloca i32, align 4, addrspace(5)1375 store volatile i32 999, ptr addrspace(5) %alloca1376 call void @too_many_args_use_workitem_id_x_byval(1377 i32 10, i32 20, i32 30, i32 40,1378 i32 50, i32 60, i32 70, i32 80,1379 i32 90, i32 100, i32 110, i32 120,1380 i32 130, i32 140, i32 150, i32 160,1381 i32 170, i32 180, i32 190, i32 200,1382 i32 210, i32 220, i32 230, i32 240,1383 i32 250, i32 260, i32 270, i32 280,1384 i32 290, i32 300, i32 310, i32 320,1385 ptr addrspace(5) byval(i32) %alloca)1386 ret void1387}1388; GCN: .amdhsa_system_vgpr_workitem_id 01389 1390define void @func_call_too_many_args_use_workitem_id_x_byval() #1 {1391; GCN-LABEL: func_call_too_many_args_use_workitem_id_x_byval:1392; GCN: ; %bb.0:1393; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1394; GCN-NEXT: s_mov_b32 s4, s331395; GCN-NEXT: s_mov_b32 s33, s321396; GCN-NEXT: s_or_saveexec_b64 s[6:7], -11397; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill1398; GCN-NEXT: s_mov_b64 exec, s[6:7]1399; GCN-NEXT: v_mov_b32_e32 v0, 0x3e71400; GCN-NEXT: s_addk_i32 s32, 0x4001401; GCN-NEXT: buffer_store_dword v0, off, s[0:3], s331402; GCN-NEXT: s_waitcnt vmcnt(0)1403; GCN-NEXT: v_mov_b32_e32 v0, 0x1401404; GCN-NEXT: buffer_store_dword v0, off, s[0:3], s321405; GCN-NEXT: buffer_load_dword v0, off, s[0:3], s331406; GCN-NEXT: v_writelane_b32 v40, s4, 21407; GCN-NEXT: s_getpc_b64 s[4:5]1408; GCN-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x_byval@gotpcrel32@lo+41409; GCN-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x_byval@gotpcrel32@hi+121410; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01411; GCN-NEXT: v_writelane_b32 v40, s30, 01412; GCN-NEXT: v_mov_b32_e32 v1, 201413; GCN-NEXT: v_mov_b32_e32 v2, 301414; GCN-NEXT: v_mov_b32_e32 v3, 401415; GCN-NEXT: v_mov_b32_e32 v4, 501416; GCN-NEXT: v_mov_b32_e32 v5, 601417; GCN-NEXT: v_mov_b32_e32 v6, 0x461418; GCN-NEXT: v_mov_b32_e32 v7, 0x501419; GCN-NEXT: v_mov_b32_e32 v8, 0x5a1420; GCN-NEXT: v_mov_b32_e32 v9, 0x641421; GCN-NEXT: v_mov_b32_e32 v10, 0x6e1422; GCN-NEXT: v_mov_b32_e32 v11, 0x781423; GCN-NEXT: v_mov_b32_e32 v12, 0x821424; GCN-NEXT: v_mov_b32_e32 v13, 0x8c1425; GCN-NEXT: v_mov_b32_e32 v14, 0x961426; GCN-NEXT: v_mov_b32_e32 v15, 0xa01427; GCN-NEXT: v_mov_b32_e32 v16, 0xaa1428; GCN-NEXT: v_mov_b32_e32 v17, 0xb41429; GCN-NEXT: v_mov_b32_e32 v18, 0xbe1430; GCN-NEXT: v_mov_b32_e32 v19, 0xc81431; GCN-NEXT: v_mov_b32_e32 v20, 0xd21432; GCN-NEXT: v_mov_b32_e32 v21, 0xdc1433; GCN-NEXT: v_mov_b32_e32 v22, 0xe61434; GCN-NEXT: v_mov_b32_e32 v23, 0xf01435; GCN-NEXT: v_mov_b32_e32 v24, 0xfa1436; GCN-NEXT: v_mov_b32_e32 v25, 0x1041437; GCN-NEXT: v_mov_b32_e32 v26, 0x10e1438; GCN-NEXT: v_mov_b32_e32 v27, 0x1181439; GCN-NEXT: v_mov_b32_e32 v28, 0x1221440; GCN-NEXT: v_mov_b32_e32 v29, 0x12c1441; GCN-NEXT: v_mov_b32_e32 v30, 0x1361442; GCN-NEXT: v_writelane_b32 v40, s31, 11443; GCN-NEXT: s_waitcnt vmcnt(0)1444; GCN-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:41445; GCN-NEXT: v_mov_b32_e32 v0, 101446; GCN-NEXT: s_waitcnt lgkmcnt(0)1447; GCN-NEXT: s_swappc_b64 s[30:31], s[4:5]1448; GCN-NEXT: v_readlane_b32 s31, v40, 11449; GCN-NEXT: v_readlane_b32 s30, v40, 01450; GCN-NEXT: s_mov_b32 s32, s331451; GCN-NEXT: v_readlane_b32 s4, v40, 21452; GCN-NEXT: s_or_saveexec_b64 s[6:7], -11453; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload1454; GCN-NEXT: s_mov_b64 exec, s[6:7]1455; GCN-NEXT: s_mov_b32 s33, s41456; GCN-NEXT: s_waitcnt vmcnt(0)1457; GCN-NEXT: s_setpc_b64 s[30:31]1458 %alloca = alloca i32, align 4, addrspace(5)1459 store volatile i32 999, ptr addrspace(5) %alloca1460 call void @too_many_args_use_workitem_id_x_byval(1461 i32 10, i32 20, i32 30, i32 40,1462 i32 50, i32 60, i32 70, i32 80,1463 i32 90, i32 100, i32 110, i32 120,1464 i32 130, i32 140, i32 150, i32 160,1465 i32 170, i32 180, i32 190, i32 200,1466 i32 210, i32 220, i32 230, i32 240,1467 i32 250, i32 260, i32 270, i32 280,1468 i32 290, i32 300, i32 310, i32 320,1469 ptr addrspace(5) byval(i32) %alloca)1470 ret void1471}1472 1473define void @too_many_args_use_workitem_id_xyz(1474; GFX7-LABEL: too_many_args_use_workitem_id_xyz:1475; GFX7: ; %bb.0:1476; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1477; GFX7-NEXT: v_and_b32_e32 v32, 0x3ff, v311478; GFX7-NEXT: flat_store_dword v[0:1], v321479; GFX7-NEXT: s_waitcnt vmcnt(0)1480; GFX7-NEXT: v_bfe_u32 v32, v31, 10, 101481; GFX7-NEXT: v_bfe_u32 v31, v31, 20, 101482; GFX7-NEXT: flat_store_dword v[0:1], v321483; GFX7-NEXT: s_waitcnt vmcnt(0)1484; GFX7-NEXT: flat_store_dword v[0:1], v311485; GFX7-NEXT: s_waitcnt vmcnt(0)1486; GFX7-NEXT: buffer_load_dword v31, off, s[0:3], s321487; GFX7-NEXT: flat_store_dword v[0:1], v01488; GFX7-NEXT: s_waitcnt vmcnt(0)1489; GFX7-NEXT: flat_store_dword v[0:1], v11490; GFX7-NEXT: s_waitcnt vmcnt(0)1491; GFX7-NEXT: flat_store_dword v[0:1], v21492; GFX7-NEXT: s_waitcnt vmcnt(0)1493; GFX7-NEXT: flat_store_dword v[0:1], v31494; GFX7-NEXT: s_waitcnt vmcnt(0)1495; GFX7-NEXT: flat_store_dword v[0:1], v41496; GFX7-NEXT: s_waitcnt vmcnt(0)1497; GFX7-NEXT: flat_store_dword v[0:1], v51498; GFX7-NEXT: s_waitcnt vmcnt(0)1499; GFX7-NEXT: flat_store_dword v[0:1], v61500; GFX7-NEXT: s_waitcnt vmcnt(0)1501; GFX7-NEXT: flat_store_dword v[0:1], v71502; GFX7-NEXT: s_waitcnt vmcnt(0)1503; GFX7-NEXT: flat_store_dword v[0:1], v81504; GFX7-NEXT: s_waitcnt vmcnt(0)1505; GFX7-NEXT: flat_store_dword v[0:1], v91506; GFX7-NEXT: s_waitcnt vmcnt(0)1507; GFX7-NEXT: flat_store_dword v[0:1], v101508; GFX7-NEXT: s_waitcnt vmcnt(0)1509; GFX7-NEXT: flat_store_dword v[0:1], v111510; GFX7-NEXT: s_waitcnt vmcnt(0)1511; GFX7-NEXT: flat_store_dword v[0:1], v121512; GFX7-NEXT: s_waitcnt vmcnt(0)1513; GFX7-NEXT: flat_store_dword v[0:1], v131514; GFX7-NEXT: s_waitcnt vmcnt(0)1515; GFX7-NEXT: flat_store_dword v[0:1], v141516; GFX7-NEXT: s_waitcnt vmcnt(0)1517; GFX7-NEXT: flat_store_dword v[0:1], v151518; GFX7-NEXT: s_waitcnt vmcnt(0)1519; GFX7-NEXT: flat_store_dword v[0:1], v161520; GFX7-NEXT: s_waitcnt vmcnt(0)1521; GFX7-NEXT: flat_store_dword v[0:1], v171522; GFX7-NEXT: s_waitcnt vmcnt(0)1523; GFX7-NEXT: flat_store_dword v[0:1], v181524; GFX7-NEXT: s_waitcnt vmcnt(0)1525; GFX7-NEXT: flat_store_dword v[0:1], v191526; GFX7-NEXT: s_waitcnt vmcnt(0)1527; GFX7-NEXT: flat_store_dword v[0:1], v201528; GFX7-NEXT: s_waitcnt vmcnt(0)1529; GFX7-NEXT: flat_store_dword v[0:1], v211530; GFX7-NEXT: s_waitcnt vmcnt(0)1531; GFX7-NEXT: flat_store_dword v[0:1], v221532; GFX7-NEXT: s_waitcnt vmcnt(0)1533; GFX7-NEXT: flat_store_dword v[0:1], v231534; GFX7-NEXT: s_waitcnt vmcnt(0)1535; GFX7-NEXT: flat_store_dword v[0:1], v241536; GFX7-NEXT: s_waitcnt vmcnt(0)1537; GFX7-NEXT: flat_store_dword v[0:1], v251538; GFX7-NEXT: s_waitcnt vmcnt(0)1539; GFX7-NEXT: flat_store_dword v[0:1], v261540; GFX7-NEXT: s_waitcnt vmcnt(0)1541; GFX7-NEXT: flat_store_dword v[0:1], v271542; GFX7-NEXT: s_waitcnt vmcnt(0)1543; GFX7-NEXT: flat_store_dword v[0:1], v281544; GFX7-NEXT: s_waitcnt vmcnt(0)1545; GFX7-NEXT: flat_store_dword v[0:1], v291546; GFX7-NEXT: s_waitcnt vmcnt(0)1547; GFX7-NEXT: flat_store_dword v[0:1], v301548; GFX7-NEXT: s_waitcnt vmcnt(0)1549; GFX7-NEXT: flat_store_dword v[0:1], v311550; GFX7-NEXT: s_waitcnt vmcnt(0)1551; GFX7-NEXT: s_setpc_b64 s[30:31]1552;1553; GFX90A-LABEL: too_many_args_use_workitem_id_xyz:1554; GFX90A: ; %bb.0:1555; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1556; GFX90A-NEXT: buffer_load_dword v33, off, s[0:3], s321557; GFX90A-NEXT: v_and_b32_e32 v32, 0x3ff, v311558; GFX90A-NEXT: global_store_dword v[0:1], v32, off1559; GFX90A-NEXT: s_waitcnt vmcnt(0)1560; GFX90A-NEXT: v_bfe_u32 v32, v31, 10, 101561; GFX90A-NEXT: v_bfe_u32 v31, v31, 20, 101562; GFX90A-NEXT: global_store_dword v[0:1], v32, off1563; GFX90A-NEXT: s_waitcnt vmcnt(0)1564; GFX90A-NEXT: global_store_dword v[0:1], v31, off1565; GFX90A-NEXT: s_waitcnt vmcnt(0)1566; GFX90A-NEXT: global_store_dword v[0:1], v0, off1567; GFX90A-NEXT: s_waitcnt vmcnt(0)1568; GFX90A-NEXT: global_store_dword v[0:1], v1, off1569; GFX90A-NEXT: s_waitcnt vmcnt(0)1570; GFX90A-NEXT: global_store_dword v[0:1], v2, off1571; GFX90A-NEXT: s_waitcnt vmcnt(0)1572; GFX90A-NEXT: global_store_dword v[0:1], v3, off1573; GFX90A-NEXT: s_waitcnt vmcnt(0)1574; GFX90A-NEXT: global_store_dword v[0:1], v4, off1575; GFX90A-NEXT: s_waitcnt vmcnt(0)1576; GFX90A-NEXT: global_store_dword v[0:1], v5, off1577; GFX90A-NEXT: s_waitcnt vmcnt(0)1578; GFX90A-NEXT: global_store_dword v[0:1], v6, off1579; GFX90A-NEXT: s_waitcnt vmcnt(0)1580; GFX90A-NEXT: global_store_dword v[0:1], v7, off1581; GFX90A-NEXT: s_waitcnt vmcnt(0)1582; GFX90A-NEXT: global_store_dword v[0:1], v8, off1583; GFX90A-NEXT: s_waitcnt vmcnt(0)1584; GFX90A-NEXT: global_store_dword v[0:1], v9, off1585; GFX90A-NEXT: s_waitcnt vmcnt(0)1586; GFX90A-NEXT: global_store_dword v[0:1], v10, off1587; GFX90A-NEXT: s_waitcnt vmcnt(0)1588; GFX90A-NEXT: global_store_dword v[0:1], v11, off1589; GFX90A-NEXT: s_waitcnt vmcnt(0)1590; GFX90A-NEXT: global_store_dword v[0:1], v12, off1591; GFX90A-NEXT: s_waitcnt vmcnt(0)1592; GFX90A-NEXT: global_store_dword v[0:1], v13, off1593; GFX90A-NEXT: s_waitcnt vmcnt(0)1594; GFX90A-NEXT: global_store_dword v[0:1], v14, off1595; GFX90A-NEXT: s_waitcnt vmcnt(0)1596; GFX90A-NEXT: global_store_dword v[0:1], v15, off1597; GFX90A-NEXT: s_waitcnt vmcnt(0)1598; GFX90A-NEXT: global_store_dword v[0:1], v16, off1599; GFX90A-NEXT: s_waitcnt vmcnt(0)1600; GFX90A-NEXT: global_store_dword v[0:1], v17, off1601; GFX90A-NEXT: s_waitcnt vmcnt(0)1602; GFX90A-NEXT: global_store_dword v[0:1], v18, off1603; GFX90A-NEXT: s_waitcnt vmcnt(0)1604; GFX90A-NEXT: global_store_dword v[0:1], v19, off1605; GFX90A-NEXT: s_waitcnt vmcnt(0)1606; GFX90A-NEXT: global_store_dword v[0:1], v20, off1607; GFX90A-NEXT: s_waitcnt vmcnt(0)1608; GFX90A-NEXT: global_store_dword v[0:1], v21, off1609; GFX90A-NEXT: s_waitcnt vmcnt(0)1610; GFX90A-NEXT: global_store_dword v[0:1], v22, off1611; GFX90A-NEXT: s_waitcnt vmcnt(0)1612; GFX90A-NEXT: global_store_dword v[0:1], v23, off1613; GFX90A-NEXT: s_waitcnt vmcnt(0)1614; GFX90A-NEXT: global_store_dword v[0:1], v24, off1615; GFX90A-NEXT: s_waitcnt vmcnt(0)1616; GFX90A-NEXT: global_store_dword v[0:1], v25, off1617; GFX90A-NEXT: s_waitcnt vmcnt(0)1618; GFX90A-NEXT: global_store_dword v[0:1], v26, off1619; GFX90A-NEXT: s_waitcnt vmcnt(0)1620; GFX90A-NEXT: global_store_dword v[0:1], v27, off1621; GFX90A-NEXT: s_waitcnt vmcnt(0)1622; GFX90A-NEXT: global_store_dword v[0:1], v28, off1623; GFX90A-NEXT: s_waitcnt vmcnt(0)1624; GFX90A-NEXT: global_store_dword v[0:1], v29, off1625; GFX90A-NEXT: s_waitcnt vmcnt(0)1626; GFX90A-NEXT: global_store_dword v[0:1], v30, off1627; GFX90A-NEXT: s_waitcnt vmcnt(0)1628; GFX90A-NEXT: global_store_dword v[0:1], v33, off1629; GFX90A-NEXT: s_waitcnt vmcnt(0)1630; GFX90A-NEXT: s_setpc_b64 s[30:31]1631 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,1632 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,1633 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,1634 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30, i32 %arg31) #1 {1635 %val0 = call i32 @llvm.amdgcn.workitem.id.x()1636 store volatile i32 %val0, ptr addrspace(1) poison1637 %val1 = call i32 @llvm.amdgcn.workitem.id.y()1638 store volatile i32 %val1, ptr addrspace(1) poison1639 %val2 = call i32 @llvm.amdgcn.workitem.id.z()1640 store volatile i32 %val2, ptr addrspace(1) poison1641 1642 store volatile i32 %arg0, ptr addrspace(1) poison1643 store volatile i32 %arg1, ptr addrspace(1) poison1644 store volatile i32 %arg2, ptr addrspace(1) poison1645 store volatile i32 %arg3, ptr addrspace(1) poison1646 store volatile i32 %arg4, ptr addrspace(1) poison1647 store volatile i32 %arg5, ptr addrspace(1) poison1648 store volatile i32 %arg6, ptr addrspace(1) poison1649 store volatile i32 %arg7, ptr addrspace(1) poison1650 1651 store volatile i32 %arg8, ptr addrspace(1) poison1652 store volatile i32 %arg9, ptr addrspace(1) poison1653 store volatile i32 %arg10, ptr addrspace(1) poison1654 store volatile i32 %arg11, ptr addrspace(1) poison1655 store volatile i32 %arg12, ptr addrspace(1) poison1656 store volatile i32 %arg13, ptr addrspace(1) poison1657 store volatile i32 %arg14, ptr addrspace(1) poison1658 store volatile i32 %arg15, ptr addrspace(1) poison1659 1660 store volatile i32 %arg16, ptr addrspace(1) poison1661 store volatile i32 %arg17, ptr addrspace(1) poison1662 store volatile i32 %arg18, ptr addrspace(1) poison1663 store volatile i32 %arg19, ptr addrspace(1) poison1664 store volatile i32 %arg20, ptr addrspace(1) poison1665 store volatile i32 %arg21, ptr addrspace(1) poison1666 store volatile i32 %arg22, ptr addrspace(1) poison1667 store volatile i32 %arg23, ptr addrspace(1) poison1668 1669 store volatile i32 %arg24, ptr addrspace(1) poison1670 store volatile i32 %arg25, ptr addrspace(1) poison1671 store volatile i32 %arg26, ptr addrspace(1) poison1672 store volatile i32 %arg27, ptr addrspace(1) poison1673 store volatile i32 %arg28, ptr addrspace(1) poison1674 store volatile i32 %arg29, ptr addrspace(1) poison1675 store volatile i32 %arg30, ptr addrspace(1) poison1676 store volatile i32 %arg31, ptr addrspace(1) poison1677 1678 ret void1679}1680 1681; frame[0] = ID { Z, Y, X }1682define amdgpu_kernel void @kern_call_too_many_args_use_workitem_id_xyz() #1 {1683; GFX7-LABEL: kern_call_too_many_args_use_workitem_id_xyz:1684; GFX7: ; %bb.0:1685; GFX7-NEXT: s_add_u32 s0, s0, s51686; GFX7-NEXT: s_addc_u32 s1, s1, 01687; GFX7-NEXT: s_getpc_b64 s[4:5]1688; GFX7-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_xyz@gotpcrel32@lo+41689; GFX7-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_xyz@gotpcrel32@hi+121690; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01691; GFX7-NEXT: v_lshlrev_b32_e32 v1, 10, v11692; GFX7-NEXT: s_mov_b32 s32, 01693; GFX7-NEXT: v_mov_b32_e32 v3, 0x1401694; GFX7-NEXT: v_lshlrev_b32_e32 v2, 20, v21695; GFX7-NEXT: v_or_b32_e32 v0, v0, v11696; GFX7-NEXT: buffer_store_dword v3, off, s[0:3], s321697; GFX7-NEXT: v_or_b32_e32 v31, v0, v21698; GFX7-NEXT: v_mov_b32_e32 v0, 101699; GFX7-NEXT: v_mov_b32_e32 v1, 201700; GFX7-NEXT: v_mov_b32_e32 v2, 301701; GFX7-NEXT: v_mov_b32_e32 v3, 401702; GFX7-NEXT: v_mov_b32_e32 v4, 501703; GFX7-NEXT: v_mov_b32_e32 v5, 601704; GFX7-NEXT: v_mov_b32_e32 v6, 0x461705; GFX7-NEXT: v_mov_b32_e32 v7, 0x501706; GFX7-NEXT: v_mov_b32_e32 v8, 0x5a1707; GFX7-NEXT: v_mov_b32_e32 v9, 0x641708; GFX7-NEXT: v_mov_b32_e32 v10, 0x6e1709; GFX7-NEXT: v_mov_b32_e32 v11, 0x781710; GFX7-NEXT: v_mov_b32_e32 v12, 0x821711; GFX7-NEXT: v_mov_b32_e32 v13, 0x8c1712; GFX7-NEXT: v_mov_b32_e32 v14, 0x961713; GFX7-NEXT: v_mov_b32_e32 v15, 0xa01714; GFX7-NEXT: v_mov_b32_e32 v16, 0xaa1715; GFX7-NEXT: v_mov_b32_e32 v17, 0xb41716; GFX7-NEXT: v_mov_b32_e32 v18, 0xbe1717; GFX7-NEXT: v_mov_b32_e32 v19, 0xc81718; GFX7-NEXT: v_mov_b32_e32 v20, 0xd21719; GFX7-NEXT: v_mov_b32_e32 v21, 0xdc1720; GFX7-NEXT: v_mov_b32_e32 v22, 0xe61721; GFX7-NEXT: v_mov_b32_e32 v23, 0xf01722; GFX7-NEXT: v_mov_b32_e32 v24, 0xfa1723; GFX7-NEXT: v_mov_b32_e32 v25, 0x1041724; GFX7-NEXT: v_mov_b32_e32 v26, 0x10e1725; GFX7-NEXT: v_mov_b32_e32 v27, 0x1181726; GFX7-NEXT: v_mov_b32_e32 v28, 0x1221727; GFX7-NEXT: v_mov_b32_e32 v29, 0x12c1728; GFX7-NEXT: v_mov_b32_e32 v30, 0x1361729; GFX7-NEXT: s_waitcnt lgkmcnt(0)1730; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]1731; GFX7-NEXT: s_endpgm1732;1733; GFX90A-LABEL: kern_call_too_many_args_use_workitem_id_xyz:1734; GFX90A: ; %bb.0:1735; GFX90A-NEXT: s_add_u32 s0, s0, s51736; GFX90A-NEXT: s_addc_u32 s1, s1, 01737; GFX90A-NEXT: s_getpc_b64 s[4:5]1738; GFX90A-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_xyz@gotpcrel32@lo+41739; GFX90A-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_xyz@gotpcrel32@hi+121740; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01741; GFX90A-NEXT: s_mov_b32 s32, 01742; GFX90A-NEXT: v_mov_b32_e32 v1, 0x1401743; GFX90A-NEXT: buffer_store_dword v1, off, s[0:3], s321744; GFX90A-NEXT: v_mov_b32_e32 v31, v01745; GFX90A-NEXT: v_mov_b32_e32 v0, 101746; GFX90A-NEXT: v_mov_b32_e32 v1, 201747; GFX90A-NEXT: v_mov_b32_e32 v2, 301748; GFX90A-NEXT: v_mov_b32_e32 v3, 401749; GFX90A-NEXT: v_mov_b32_e32 v4, 501750; GFX90A-NEXT: v_mov_b32_e32 v5, 601751; GFX90A-NEXT: v_mov_b32_e32 v6, 0x461752; GFX90A-NEXT: v_mov_b32_e32 v7, 0x501753; GFX90A-NEXT: v_mov_b32_e32 v8, 0x5a1754; GFX90A-NEXT: v_mov_b32_e32 v9, 0x641755; GFX90A-NEXT: v_mov_b32_e32 v10, 0x6e1756; GFX90A-NEXT: v_mov_b32_e32 v11, 0x781757; GFX90A-NEXT: v_mov_b32_e32 v12, 0x821758; GFX90A-NEXT: v_mov_b32_e32 v13, 0x8c1759; GFX90A-NEXT: v_mov_b32_e32 v14, 0x961760; GFX90A-NEXT: v_mov_b32_e32 v15, 0xa01761; GFX90A-NEXT: v_mov_b32_e32 v16, 0xaa1762; GFX90A-NEXT: v_mov_b32_e32 v17, 0xb41763; GFX90A-NEXT: v_mov_b32_e32 v18, 0xbe1764; GFX90A-NEXT: v_mov_b32_e32 v19, 0xc81765; GFX90A-NEXT: v_mov_b32_e32 v20, 0xd21766; GFX90A-NEXT: v_mov_b32_e32 v21, 0xdc1767; GFX90A-NEXT: v_mov_b32_e32 v22, 0xe61768; GFX90A-NEXT: v_mov_b32_e32 v23, 0xf01769; GFX90A-NEXT: v_mov_b32_e32 v24, 0xfa1770; GFX90A-NEXT: v_mov_b32_e32 v25, 0x1041771; GFX90A-NEXT: v_mov_b32_e32 v26, 0x10e1772; GFX90A-NEXT: v_mov_b32_e32 v27, 0x1181773; GFX90A-NEXT: v_mov_b32_e32 v28, 0x1221774; GFX90A-NEXT: v_mov_b32_e32 v29, 0x12c1775; GFX90A-NEXT: v_mov_b32_e32 v30, 0x1361776; GFX90A-NEXT: s_waitcnt lgkmcnt(0)1777; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]1778; GFX90A-NEXT: s_endpgm1779 call void @too_many_args_use_workitem_id_xyz(1780 i32 10, i32 20, i32 30, i32 40,1781 i32 50, i32 60, i32 70, i32 80,1782 i32 90, i32 100, i32 110, i32 120,1783 i32 130, i32 140, i32 150, i32 160,1784 i32 170, i32 180, i32 190, i32 200,1785 i32 210, i32 220, i32 230, i32 240,1786 i32 250, i32 260, i32 270, i32 280,1787 i32 290, i32 300, i32 310, i32 320)1788 ret void1789}1790; GCN: .amdhsa_system_vgpr_workitem_id 21791 1792; workitem ID X in register, yz on stack1793; v31 = workitem ID X1794; frame[0] = workitem { Z, Y, X }1795define void @too_many_args_use_workitem_id_x_stack_yz(1796; GFX7-LABEL: too_many_args_use_workitem_id_x_stack_yz:1797; GFX7: ; %bb.0:1798; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1799; GFX7-NEXT: v_and_b32_e32 v32, 0x3ff, v311800; GFX7-NEXT: flat_store_dword v[0:1], v321801; GFX7-NEXT: s_waitcnt vmcnt(0)1802; GFX7-NEXT: v_bfe_u32 v32, v31, 10, 101803; GFX7-NEXT: v_bfe_u32 v31, v31, 20, 101804; GFX7-NEXT: flat_store_dword v[0:1], v321805; GFX7-NEXT: s_waitcnt vmcnt(0)1806; GFX7-NEXT: flat_store_dword v[0:1], v311807; GFX7-NEXT: s_waitcnt vmcnt(0)1808; GFX7-NEXT: flat_store_dword v[0:1], v01809; GFX7-NEXT: s_waitcnt vmcnt(0)1810; GFX7-NEXT: flat_store_dword v[0:1], v11811; GFX7-NEXT: s_waitcnt vmcnt(0)1812; GFX7-NEXT: flat_store_dword v[0:1], v21813; GFX7-NEXT: s_waitcnt vmcnt(0)1814; GFX7-NEXT: flat_store_dword v[0:1], v31815; GFX7-NEXT: s_waitcnt vmcnt(0)1816; GFX7-NEXT: flat_store_dword v[0:1], v41817; GFX7-NEXT: s_waitcnt vmcnt(0)1818; GFX7-NEXT: flat_store_dword v[0:1], v51819; GFX7-NEXT: s_waitcnt vmcnt(0)1820; GFX7-NEXT: flat_store_dword v[0:1], v61821; GFX7-NEXT: s_waitcnt vmcnt(0)1822; GFX7-NEXT: flat_store_dword v[0:1], v71823; GFX7-NEXT: s_waitcnt vmcnt(0)1824; GFX7-NEXT: flat_store_dword v[0:1], v81825; GFX7-NEXT: s_waitcnt vmcnt(0)1826; GFX7-NEXT: flat_store_dword v[0:1], v91827; GFX7-NEXT: s_waitcnt vmcnt(0)1828; GFX7-NEXT: flat_store_dword v[0:1], v101829; GFX7-NEXT: s_waitcnt vmcnt(0)1830; GFX7-NEXT: flat_store_dword v[0:1], v111831; GFX7-NEXT: s_waitcnt vmcnt(0)1832; GFX7-NEXT: flat_store_dword v[0:1], v121833; GFX7-NEXT: s_waitcnt vmcnt(0)1834; GFX7-NEXT: flat_store_dword v[0:1], v131835; GFX7-NEXT: s_waitcnt vmcnt(0)1836; GFX7-NEXT: flat_store_dword v[0:1], v141837; GFX7-NEXT: s_waitcnt vmcnt(0)1838; GFX7-NEXT: flat_store_dword v[0:1], v151839; GFX7-NEXT: s_waitcnt vmcnt(0)1840; GFX7-NEXT: flat_store_dword v[0:1], v161841; GFX7-NEXT: s_waitcnt vmcnt(0)1842; GFX7-NEXT: flat_store_dword v[0:1], v171843; GFX7-NEXT: s_waitcnt vmcnt(0)1844; GFX7-NEXT: flat_store_dword v[0:1], v181845; GFX7-NEXT: s_waitcnt vmcnt(0)1846; GFX7-NEXT: flat_store_dword v[0:1], v191847; GFX7-NEXT: s_waitcnt vmcnt(0)1848; GFX7-NEXT: flat_store_dword v[0:1], v201849; GFX7-NEXT: s_waitcnt vmcnt(0)1850; GFX7-NEXT: flat_store_dword v[0:1], v211851; GFX7-NEXT: s_waitcnt vmcnt(0)1852; GFX7-NEXT: flat_store_dword v[0:1], v221853; GFX7-NEXT: s_waitcnt vmcnt(0)1854; GFX7-NEXT: flat_store_dword v[0:1], v231855; GFX7-NEXT: s_waitcnt vmcnt(0)1856; GFX7-NEXT: flat_store_dword v[0:1], v241857; GFX7-NEXT: s_waitcnt vmcnt(0)1858; GFX7-NEXT: flat_store_dword v[0:1], v251859; GFX7-NEXT: s_waitcnt vmcnt(0)1860; GFX7-NEXT: flat_store_dword v[0:1], v261861; GFX7-NEXT: s_waitcnt vmcnt(0)1862; GFX7-NEXT: flat_store_dword v[0:1], v271863; GFX7-NEXT: s_waitcnt vmcnt(0)1864; GFX7-NEXT: flat_store_dword v[0:1], v281865; GFX7-NEXT: s_waitcnt vmcnt(0)1866; GFX7-NEXT: flat_store_dword v[0:1], v291867; GFX7-NEXT: s_waitcnt vmcnt(0)1868; GFX7-NEXT: flat_store_dword v[0:1], v301869; GFX7-NEXT: s_waitcnt vmcnt(0)1870; GFX7-NEXT: s_setpc_b64 s[30:31]1871;1872; GFX90A-LABEL: too_many_args_use_workitem_id_x_stack_yz:1873; GFX90A: ; %bb.0:1874; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1875; GFX90A-NEXT: v_and_b32_e32 v32, 0x3ff, v311876; GFX90A-NEXT: global_store_dword v[0:1], v32, off1877; GFX90A-NEXT: s_waitcnt vmcnt(0)1878; GFX90A-NEXT: v_bfe_u32 v32, v31, 10, 101879; GFX90A-NEXT: v_bfe_u32 v31, v31, 20, 101880; GFX90A-NEXT: global_store_dword v[0:1], v32, off1881; GFX90A-NEXT: s_waitcnt vmcnt(0)1882; GFX90A-NEXT: global_store_dword v[0:1], v31, off1883; GFX90A-NEXT: s_waitcnt vmcnt(0)1884; GFX90A-NEXT: global_store_dword v[0:1], v0, off1885; GFX90A-NEXT: s_waitcnt vmcnt(0)1886; GFX90A-NEXT: global_store_dword v[0:1], v1, off1887; GFX90A-NEXT: s_waitcnt vmcnt(0)1888; GFX90A-NEXT: global_store_dword v[0:1], v2, off1889; GFX90A-NEXT: s_waitcnt vmcnt(0)1890; GFX90A-NEXT: global_store_dword v[0:1], v3, off1891; GFX90A-NEXT: s_waitcnt vmcnt(0)1892; GFX90A-NEXT: global_store_dword v[0:1], v4, off1893; GFX90A-NEXT: s_waitcnt vmcnt(0)1894; GFX90A-NEXT: global_store_dword v[0:1], v5, off1895; GFX90A-NEXT: s_waitcnt vmcnt(0)1896; GFX90A-NEXT: global_store_dword v[0:1], v6, off1897; GFX90A-NEXT: s_waitcnt vmcnt(0)1898; GFX90A-NEXT: global_store_dword v[0:1], v7, off1899; GFX90A-NEXT: s_waitcnt vmcnt(0)1900; GFX90A-NEXT: global_store_dword v[0:1], v8, off1901; GFX90A-NEXT: s_waitcnt vmcnt(0)1902; GFX90A-NEXT: global_store_dword v[0:1], v9, off1903; GFX90A-NEXT: s_waitcnt vmcnt(0)1904; GFX90A-NEXT: global_store_dword v[0:1], v10, off1905; GFX90A-NEXT: s_waitcnt vmcnt(0)1906; GFX90A-NEXT: global_store_dword v[0:1], v11, off1907; GFX90A-NEXT: s_waitcnt vmcnt(0)1908; GFX90A-NEXT: global_store_dword v[0:1], v12, off1909; GFX90A-NEXT: s_waitcnt vmcnt(0)1910; GFX90A-NEXT: global_store_dword v[0:1], v13, off1911; GFX90A-NEXT: s_waitcnt vmcnt(0)1912; GFX90A-NEXT: global_store_dword v[0:1], v14, off1913; GFX90A-NEXT: s_waitcnt vmcnt(0)1914; GFX90A-NEXT: global_store_dword v[0:1], v15, off1915; GFX90A-NEXT: s_waitcnt vmcnt(0)1916; GFX90A-NEXT: global_store_dword v[0:1], v16, off1917; GFX90A-NEXT: s_waitcnt vmcnt(0)1918; GFX90A-NEXT: global_store_dword v[0:1], v17, off1919; GFX90A-NEXT: s_waitcnt vmcnt(0)1920; GFX90A-NEXT: global_store_dword v[0:1], v18, off1921; GFX90A-NEXT: s_waitcnt vmcnt(0)1922; GFX90A-NEXT: global_store_dword v[0:1], v19, off1923; GFX90A-NEXT: s_waitcnt vmcnt(0)1924; GFX90A-NEXT: global_store_dword v[0:1], v20, off1925; GFX90A-NEXT: s_waitcnt vmcnt(0)1926; GFX90A-NEXT: global_store_dword v[0:1], v21, off1927; GFX90A-NEXT: s_waitcnt vmcnt(0)1928; GFX90A-NEXT: global_store_dword v[0:1], v22, off1929; GFX90A-NEXT: s_waitcnt vmcnt(0)1930; GFX90A-NEXT: global_store_dword v[0:1], v23, off1931; GFX90A-NEXT: s_waitcnt vmcnt(0)1932; GFX90A-NEXT: global_store_dword v[0:1], v24, off1933; GFX90A-NEXT: s_waitcnt vmcnt(0)1934; GFX90A-NEXT: global_store_dword v[0:1], v25, off1935; GFX90A-NEXT: s_waitcnt vmcnt(0)1936; GFX90A-NEXT: global_store_dword v[0:1], v26, off1937; GFX90A-NEXT: s_waitcnt vmcnt(0)1938; GFX90A-NEXT: global_store_dword v[0:1], v27, off1939; GFX90A-NEXT: s_waitcnt vmcnt(0)1940; GFX90A-NEXT: global_store_dword v[0:1], v28, off1941; GFX90A-NEXT: s_waitcnt vmcnt(0)1942; GFX90A-NEXT: global_store_dword v[0:1], v29, off1943; GFX90A-NEXT: s_waitcnt vmcnt(0)1944; GFX90A-NEXT: global_store_dword v[0:1], v30, off1945; GFX90A-NEXT: s_waitcnt vmcnt(0)1946; GFX90A-NEXT: s_setpc_b64 s[30:31]1947 i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7,1948 i32 %arg8, i32 %arg9, i32 %arg10, i32 %arg11, i32 %arg12, i32 %arg13, i32 %arg14, i32 %arg15,1949 i32 %arg16, i32 %arg17, i32 %arg18, i32 %arg19, i32 %arg20, i32 %arg21, i32 %arg22, i32 %arg23,1950 i32 %arg24, i32 %arg25, i32 %arg26, i32 %arg27, i32 %arg28, i32 %arg29, i32 %arg30) #1 {1951 %val0 = call i32 @llvm.amdgcn.workitem.id.x()1952 store volatile i32 %val0, ptr addrspace(1) poison1953 %val1 = call i32 @llvm.amdgcn.workitem.id.y()1954 store volatile i32 %val1, ptr addrspace(1) poison1955 %val2 = call i32 @llvm.amdgcn.workitem.id.z()1956 store volatile i32 %val2, ptr addrspace(1) poison1957 1958 store volatile i32 %arg0, ptr addrspace(1) poison1959 store volatile i32 %arg1, ptr addrspace(1) poison1960 store volatile i32 %arg2, ptr addrspace(1) poison1961 store volatile i32 %arg3, ptr addrspace(1) poison1962 store volatile i32 %arg4, ptr addrspace(1) poison1963 store volatile i32 %arg5, ptr addrspace(1) poison1964 store volatile i32 %arg6, ptr addrspace(1) poison1965 store volatile i32 %arg7, ptr addrspace(1) poison1966 1967 store volatile i32 %arg8, ptr addrspace(1) poison1968 store volatile i32 %arg9, ptr addrspace(1) poison1969 store volatile i32 %arg10, ptr addrspace(1) poison1970 store volatile i32 %arg11, ptr addrspace(1) poison1971 store volatile i32 %arg12, ptr addrspace(1) poison1972 store volatile i32 %arg13, ptr addrspace(1) poison1973 store volatile i32 %arg14, ptr addrspace(1) poison1974 store volatile i32 %arg15, ptr addrspace(1) poison1975 1976 store volatile i32 %arg16, ptr addrspace(1) poison1977 store volatile i32 %arg17, ptr addrspace(1) poison1978 store volatile i32 %arg18, ptr addrspace(1) poison1979 store volatile i32 %arg19, ptr addrspace(1) poison1980 store volatile i32 %arg20, ptr addrspace(1) poison1981 store volatile i32 %arg21, ptr addrspace(1) poison1982 store volatile i32 %arg22, ptr addrspace(1) poison1983 store volatile i32 %arg23, ptr addrspace(1) poison1984 1985 store volatile i32 %arg24, ptr addrspace(1) poison1986 store volatile i32 %arg25, ptr addrspace(1) poison1987 store volatile i32 %arg26, ptr addrspace(1) poison1988 store volatile i32 %arg27, ptr addrspace(1) poison1989 store volatile i32 %arg28, ptr addrspace(1) poison1990 store volatile i32 %arg29, ptr addrspace(1) poison1991 store volatile i32 %arg30, ptr addrspace(1) poison1992 1993 ret void1994}1995; GCN: ScratchSize: 01996 1997define amdgpu_kernel void @kern_call_too_many_args_use_workitem_id_x_stack_yz() #1 {1998; GFX7-LABEL: kern_call_too_many_args_use_workitem_id_x_stack_yz:1999; GFX7: ; %bb.0:2000; GFX7-NEXT: s_add_u32 s0, s0, s52001; GFX7-NEXT: s_addc_u32 s1, s1, 02002; GFX7-NEXT: s_getpc_b64 s[4:5]2003; GFX7-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x_stack_yz@gotpcrel32@lo+42004; GFX7-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x_stack_yz@gotpcrel32@hi+122005; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x02006; GFX7-NEXT: v_lshlrev_b32_e32 v1, 10, v12007; GFX7-NEXT: v_lshlrev_b32_e32 v2, 20, v22008; GFX7-NEXT: v_or_b32_e32 v0, v0, v12009; GFX7-NEXT: v_or_b32_e32 v31, v0, v22010; GFX7-NEXT: v_mov_b32_e32 v0, 102011; GFX7-NEXT: v_mov_b32_e32 v1, 202012; GFX7-NEXT: v_mov_b32_e32 v2, 302013; GFX7-NEXT: v_mov_b32_e32 v3, 402014; GFX7-NEXT: v_mov_b32_e32 v4, 502015; GFX7-NEXT: v_mov_b32_e32 v5, 602016; GFX7-NEXT: v_mov_b32_e32 v6, 0x462017; GFX7-NEXT: v_mov_b32_e32 v7, 0x502018; GFX7-NEXT: v_mov_b32_e32 v8, 0x5a2019; GFX7-NEXT: v_mov_b32_e32 v9, 0x642020; GFX7-NEXT: v_mov_b32_e32 v10, 0x6e2021; GFX7-NEXT: v_mov_b32_e32 v11, 0x782022; GFX7-NEXT: v_mov_b32_e32 v12, 0x822023; GFX7-NEXT: v_mov_b32_e32 v13, 0x8c2024; GFX7-NEXT: v_mov_b32_e32 v14, 0x962025; GFX7-NEXT: v_mov_b32_e32 v15, 0xa02026; GFX7-NEXT: v_mov_b32_e32 v16, 0xaa2027; GFX7-NEXT: v_mov_b32_e32 v17, 0xb42028; GFX7-NEXT: v_mov_b32_e32 v18, 0xbe2029; GFX7-NEXT: v_mov_b32_e32 v19, 0xc82030; GFX7-NEXT: v_mov_b32_e32 v20, 0xd22031; GFX7-NEXT: v_mov_b32_e32 v21, 0xdc2032; GFX7-NEXT: v_mov_b32_e32 v22, 0xe62033; GFX7-NEXT: v_mov_b32_e32 v23, 0xf02034; GFX7-NEXT: v_mov_b32_e32 v24, 0xfa2035; GFX7-NEXT: v_mov_b32_e32 v25, 0x1042036; GFX7-NEXT: v_mov_b32_e32 v26, 0x10e2037; GFX7-NEXT: v_mov_b32_e32 v27, 0x1182038; GFX7-NEXT: v_mov_b32_e32 v28, 0x1222039; GFX7-NEXT: v_mov_b32_e32 v29, 0x12c2040; GFX7-NEXT: v_mov_b32_e32 v30, 0x1362041; GFX7-NEXT: s_mov_b32 s32, 02042; GFX7-NEXT: s_waitcnt lgkmcnt(0)2043; GFX7-NEXT: s_swappc_b64 s[30:31], s[4:5]2044; GFX7-NEXT: s_endpgm2045;2046; GFX90A-LABEL: kern_call_too_many_args_use_workitem_id_x_stack_yz:2047; GFX90A: ; %bb.0:2048; GFX90A-NEXT: s_add_u32 s0, s0, s52049; GFX90A-NEXT: s_addc_u32 s1, s1, 02050; GFX90A-NEXT: s_getpc_b64 s[4:5]2051; GFX90A-NEXT: s_add_u32 s4, s4, too_many_args_use_workitem_id_x_stack_yz@gotpcrel32@lo+42052; GFX90A-NEXT: s_addc_u32 s5, s5, too_many_args_use_workitem_id_x_stack_yz@gotpcrel32@hi+122053; GFX90A-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x02054; GFX90A-NEXT: v_mov_b32_e32 v31, v02055; GFX90A-NEXT: v_mov_b32_e32 v0, 102056; GFX90A-NEXT: v_mov_b32_e32 v1, 202057; GFX90A-NEXT: v_mov_b32_e32 v2, 302058; GFX90A-NEXT: v_mov_b32_e32 v3, 402059; GFX90A-NEXT: v_mov_b32_e32 v4, 502060; GFX90A-NEXT: v_mov_b32_e32 v5, 602061; GFX90A-NEXT: v_mov_b32_e32 v6, 0x462062; GFX90A-NEXT: v_mov_b32_e32 v7, 0x502063; GFX90A-NEXT: v_mov_b32_e32 v8, 0x5a2064; GFX90A-NEXT: v_mov_b32_e32 v9, 0x642065; GFX90A-NEXT: v_mov_b32_e32 v10, 0x6e2066; GFX90A-NEXT: v_mov_b32_e32 v11, 0x782067; GFX90A-NEXT: v_mov_b32_e32 v12, 0x822068; GFX90A-NEXT: v_mov_b32_e32 v13, 0x8c2069; GFX90A-NEXT: v_mov_b32_e32 v14, 0x962070; GFX90A-NEXT: v_mov_b32_e32 v15, 0xa02071; GFX90A-NEXT: v_mov_b32_e32 v16, 0xaa2072; GFX90A-NEXT: v_mov_b32_e32 v17, 0xb42073; GFX90A-NEXT: v_mov_b32_e32 v18, 0xbe2074; GFX90A-NEXT: v_mov_b32_e32 v19, 0xc82075; GFX90A-NEXT: v_mov_b32_e32 v20, 0xd22076; GFX90A-NEXT: v_mov_b32_e32 v21, 0xdc2077; GFX90A-NEXT: v_mov_b32_e32 v22, 0xe62078; GFX90A-NEXT: v_mov_b32_e32 v23, 0xf02079; GFX90A-NEXT: v_mov_b32_e32 v24, 0xfa2080; GFX90A-NEXT: v_mov_b32_e32 v25, 0x1042081; GFX90A-NEXT: v_mov_b32_e32 v26, 0x10e2082; GFX90A-NEXT: v_mov_b32_e32 v27, 0x1182083; GFX90A-NEXT: v_mov_b32_e32 v28, 0x1222084; GFX90A-NEXT: v_mov_b32_e32 v29, 0x12c2085; GFX90A-NEXT: v_mov_b32_e32 v30, 0x1362086; GFX90A-NEXT: s_mov_b32 s32, 02087; GFX90A-NEXT: s_waitcnt lgkmcnt(0)2088; GFX90A-NEXT: s_swappc_b64 s[30:31], s[4:5]2089; GFX90A-NEXT: s_endpgm2090 call void @too_many_args_use_workitem_id_x_stack_yz(2091 i32 10, i32 20, i32 30, i32 40,2092 i32 50, i32 60, i32 70, i32 80,2093 i32 90, i32 100, i32 110, i32 120,2094 i32 130, i32 140, i32 150, i32 160,2095 i32 170, i32 180, i32 190, i32 200,2096 i32 210, i32 220, i32 230, i32 240,2097 i32 250, i32 260, i32 270, i32 280,2098 i32 290, i32 300, i32 310)2099 ret void2100}2101; GCN: .amdhsa_system_vgpr_workitem_id 22102 2103declare i32 @llvm.amdgcn.workitem.id.x() #02104declare i32 @llvm.amdgcn.workitem.id.y() #02105declare i32 @llvm.amdgcn.workitem.id.z() #02106 2107attributes #0 = { nounwind readnone speculatable "amdgpu-flat-work-group-size"="1,512" }2108attributes #1 = { nounwind noinline "amdgpu-flat-work-group-size"="1,512" }2109