1005 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -global-isel=1 -mtriple=amdgcn--amdpal -mcpu=gfx1100 < %s | FileCheck -check-prefix=GISEL-GFX11 %s3; RUN: llc -global-isel=1 -mtriple=amdgcn--amdpal -mcpu=gfx1030 < %s | FileCheck -check-prefix=GISEL-GFX10 %s4; RUN: llc -global-isel=0 -mtriple=amdgcn--amdpal -mcpu=gfx1100 < %s | FileCheck -check-prefix=DAGISEL-GFX11 %s5; RUN: llc -global-isel=0 -mtriple=amdgcn--amdpal -mcpu=gfx1030 < %s | FileCheck -check-prefix=DAGISEL-GFX10 %s6 7declare amdgpu_gfx void @use(...)8 9define amdgpu_cs_chain void @amdgpu_cs_chain_no_stack({ptr, i32, <4 x i32>} inreg %a, {ptr, i32, <4 x i32>} %b) {10; GISEL-GFX11-LABEL: amdgpu_cs_chain_no_stack:11; GISEL-GFX11: ; %bb.0:12; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13; GISEL-GFX11-NEXT: s_endpgm14;15; GISEL-GFX10-LABEL: amdgpu_cs_chain_no_stack:16; GISEL-GFX10: ; %bb.0:17; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GISEL-GFX10-NEXT: s_endpgm19;20; DAGISEL-GFX11-LABEL: amdgpu_cs_chain_no_stack:21; DAGISEL-GFX11: ; %bb.0:22; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; DAGISEL-GFX11-NEXT: s_endpgm24;25; DAGISEL-GFX10-LABEL: amdgpu_cs_chain_no_stack:26; DAGISEL-GFX10: ; %bb.0:27; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; DAGISEL-GFX10-NEXT: s_endpgm29 ret void30}31 32define amdgpu_cs_chain void @amdgpu_cs_chain_simple_call(<4 x i32> inreg %sgpr, <4 x i32> %vgpr) {33; GISEL-GFX11-LABEL: amdgpu_cs_chain_simple_call:34; GISEL-GFX11: ; %bb.0:35; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)36; GISEL-GFX11-NEXT: v_dual_mov_b32 v4, v8 :: v_dual_mov_b32 v5, v937; GISEL-GFX11-NEXT: v_dual_mov_b32 v6, v10 :: v_dual_mov_b32 v7, v1138; GISEL-GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s139; GISEL-GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s340; GISEL-GFX11-NEXT: s_mov_b32 s4, use@abs32@lo41; GISEL-GFX11-NEXT: s_mov_b32 s5, use@abs32@hi42; GISEL-GFX11-NEXT: s_mov_b32 s32, 043; GISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[4:5]44; GISEL-GFX11-NEXT: s_endpgm45;46; GISEL-GFX10-LABEL: amdgpu_cs_chain_simple_call:47; GISEL-GFX10: ; %bb.0:48; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)49; GISEL-GFX10-NEXT: v_mov_b32_e32 v4, v850; GISEL-GFX10-NEXT: v_mov_b32_e32 v5, v951; GISEL-GFX10-NEXT: v_mov_b32_e32 v6, v1052; GISEL-GFX10-NEXT: v_mov_b32_e32 v7, v1153; GISEL-GFX10-NEXT: v_mov_b32_e32 v0, s054; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, s155; GISEL-GFX10-NEXT: v_mov_b32_e32 v2, s256; GISEL-GFX10-NEXT: v_mov_b32_e32 v3, s357; GISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]58; GISEL-GFX10-NEXT: s_mov_b32 s4, use@abs32@lo59; GISEL-GFX10-NEXT: s_mov_b32 s5, use@abs32@hi60; GISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]61; GISEL-GFX10-NEXT: s_mov_b32 s32, 062; GISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[4:5]63; GISEL-GFX10-NEXT: s_endpgm64;65; DAGISEL-GFX11-LABEL: amdgpu_cs_chain_simple_call:66; DAGISEL-GFX11: ; %bb.0:67; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)68; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v7, v11 :: v_dual_mov_b32 v6, v1069; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v5, v9 :: v_dual_mov_b32 v4, v870; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s171; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s372; DAGISEL-GFX11-NEXT: s_mov_b32 s5, use@abs32@hi73; DAGISEL-GFX11-NEXT: s_mov_b32 s4, use@abs32@lo74; DAGISEL-GFX11-NEXT: s_mov_b32 s32, 075; DAGISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[4:5]76; DAGISEL-GFX11-NEXT: s_endpgm77;78; DAGISEL-GFX10-LABEL: amdgpu_cs_chain_simple_call:79; DAGISEL-GFX10: ; %bb.0:80; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)81; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v7, v1182; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v6, v1083; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v5, v984; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v4, v885; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v0, s086; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v1, s187; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v2, s288; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v3, s389; DAGISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]90; DAGISEL-GFX10-NEXT: s_mov_b32 s5, use@abs32@hi91; DAGISEL-GFX10-NEXT: s_mov_b32 s4, use@abs32@lo92; DAGISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]93; DAGISEL-GFX10-NEXT: s_mov_b32 s32, 094; DAGISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[4:5]95; DAGISEL-GFX10-NEXT: s_endpgm96 call amdgpu_gfx void @use(<4 x i32> %sgpr, <4 x i32> %vgpr)97 ret void98}99 100define amdgpu_cs_chain void @amdgpu_cs_chain_spill(<24 x i32> inreg %sgprs, <24 x i32> %vgprs) {101; GISEL-GFX11-LABEL: amdgpu_cs_chain_spill:102; GISEL-GFX11: ; %bb.0:103; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)104; GISEL-GFX11-NEXT: s_mov_b32 s32, 0105; GISEL-GFX11-NEXT: v_dual_mov_b32 v32, v8 :: v_dual_mov_b32 v33, v9106; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 4107; GISEL-GFX11-NEXT: scratch_store_b32 off, v16, s32108; GISEL-GFX11-NEXT: scratch_store_b32 off, v17, s24109; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 8110; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 12111; GISEL-GFX11-NEXT: scratch_store_b32 off, v18, s24112; GISEL-GFX11-NEXT: scratch_store_b32 off, v19, s25113; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 16114; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 20115; GISEL-GFX11-NEXT: scratch_store_b32 off, v20, s24116; GISEL-GFX11-NEXT: scratch_store_b32 off, v21, s25117; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 24118; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 28119; GISEL-GFX11-NEXT: scratch_store_b32 off, v22, s24120; GISEL-GFX11-NEXT: scratch_store_b32 off, v23, s25121; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 32122; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 36123; GISEL-GFX11-NEXT: scratch_store_b32 off, v24, s24124; GISEL-GFX11-NEXT: scratch_store_b32 off, v25, s25125; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 40126; GISEL-GFX11-NEXT: v_dual_mov_b32 v34, v10 :: v_dual_mov_b32 v35, v11127; GISEL-GFX11-NEXT: v_dual_mov_b32 v36, v12 :: v_dual_mov_b32 v37, v13128; GISEL-GFX11-NEXT: v_dual_mov_b32 v38, v14 :: v_dual_mov_b32 v39, v15129; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 44130; GISEL-GFX11-NEXT: scratch_store_b32 off, v26, s24131; GISEL-GFX11-NEXT: scratch_store_b32 off, v27, s25132; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 48133; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 52134; GISEL-GFX11-NEXT: scratch_store_b32 off, v28, s24135; GISEL-GFX11-NEXT: scratch_store_b32 off, v29, s25136; GISEL-GFX11-NEXT: s_add_u32 s24, s32, 56137; GISEL-GFX11-NEXT: s_add_u32 s25, s32, 60138; GISEL-GFX11-NEXT: scratch_store_b32 off, v30, s24139; GISEL-GFX11-NEXT: scratch_store_b32 off, v31, s25140; GISEL-GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1141; GISEL-GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3142; GISEL-GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5143; GISEL-GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7144; GISEL-GFX11-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9145; GISEL-GFX11-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11146; GISEL-GFX11-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13147; GISEL-GFX11-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15148; GISEL-GFX11-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17149; GISEL-GFX11-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19150; GISEL-GFX11-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21151; GISEL-GFX11-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23152; GISEL-GFX11-NEXT: v_dual_mov_b32 v24, v32 :: v_dual_mov_b32 v25, v33153; GISEL-GFX11-NEXT: v_dual_mov_b32 v26, v34 :: v_dual_mov_b32 v27, v35154; GISEL-GFX11-NEXT: v_dual_mov_b32 v28, v36 :: v_dual_mov_b32 v29, v37155; GISEL-GFX11-NEXT: v_dual_mov_b32 v30, v38 :: v_dual_mov_b32 v31, v39156; GISEL-GFX11-NEXT: s_mov_b32 s24, use@abs32@lo157; GISEL-GFX11-NEXT: s_mov_b32 s25, use@abs32@hi158; GISEL-GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)159; GISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[24:25]160; GISEL-GFX11-NEXT: s_endpgm161;162; GISEL-GFX10-LABEL: amdgpu_cs_chain_spill:163; GISEL-GFX10: ; %bb.0:164; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)165; GISEL-GFX10-NEXT: v_mov_b32_e32 v32, v8166; GISEL-GFX10-NEXT: v_mov_b32_e32 v33, v9167; GISEL-GFX10-NEXT: v_mov_b32_e32 v34, v10168; GISEL-GFX10-NEXT: v_mov_b32_e32 v35, v11169; GISEL-GFX10-NEXT: v_mov_b32_e32 v36, v12170; GISEL-GFX10-NEXT: v_mov_b32_e32 v37, v13171; GISEL-GFX10-NEXT: v_mov_b32_e32 v38, v14172; GISEL-GFX10-NEXT: v_mov_b32_e32 v39, v15173; GISEL-GFX10-NEXT: s_mov_b32 s32, 0174; GISEL-GFX10-NEXT: buffer_store_dword v16, off, s[48:51], s32175; GISEL-GFX10-NEXT: buffer_store_dword v17, off, s[48:51], s32 offset:4176; GISEL-GFX10-NEXT: buffer_store_dword v18, off, s[48:51], s32 offset:8177; GISEL-GFX10-NEXT: buffer_store_dword v19, off, s[48:51], s32 offset:12178; GISEL-GFX10-NEXT: buffer_store_dword v20, off, s[48:51], s32 offset:16179; GISEL-GFX10-NEXT: buffer_store_dword v21, off, s[48:51], s32 offset:20180; GISEL-GFX10-NEXT: buffer_store_dword v22, off, s[48:51], s32 offset:24181; GISEL-GFX10-NEXT: buffer_store_dword v23, off, s[48:51], s32 offset:28182; GISEL-GFX10-NEXT: buffer_store_dword v24, off, s[48:51], s32 offset:32183; GISEL-GFX10-NEXT: buffer_store_dword v25, off, s[48:51], s32 offset:36184; GISEL-GFX10-NEXT: buffer_store_dword v26, off, s[48:51], s32 offset:40185; GISEL-GFX10-NEXT: buffer_store_dword v27, off, s[48:51], s32 offset:44186; GISEL-GFX10-NEXT: buffer_store_dword v28, off, s[48:51], s32 offset:48187; GISEL-GFX10-NEXT: buffer_store_dword v29, off, s[48:51], s32 offset:52188; GISEL-GFX10-NEXT: buffer_store_dword v30, off, s[48:51], s32 offset:56189; GISEL-GFX10-NEXT: buffer_store_dword v31, off, s[48:51], s32 offset:60190; GISEL-GFX10-NEXT: v_mov_b32_e32 v0, s0191; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, s1192; GISEL-GFX10-NEXT: v_mov_b32_e32 v2, s2193; GISEL-GFX10-NEXT: v_mov_b32_e32 v3, s3194; GISEL-GFX10-NEXT: v_mov_b32_e32 v4, s4195; GISEL-GFX10-NEXT: v_mov_b32_e32 v5, s5196; GISEL-GFX10-NEXT: v_mov_b32_e32 v6, s6197; GISEL-GFX10-NEXT: v_mov_b32_e32 v7, s7198; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, s8199; GISEL-GFX10-NEXT: v_mov_b32_e32 v9, s9200; GISEL-GFX10-NEXT: v_mov_b32_e32 v10, s10201; GISEL-GFX10-NEXT: v_mov_b32_e32 v11, s11202; GISEL-GFX10-NEXT: v_mov_b32_e32 v12, s12203; GISEL-GFX10-NEXT: v_mov_b32_e32 v13, s13204; GISEL-GFX10-NEXT: v_mov_b32_e32 v14, s14205; GISEL-GFX10-NEXT: v_mov_b32_e32 v15, s15206; GISEL-GFX10-NEXT: v_mov_b32_e32 v16, s16207; GISEL-GFX10-NEXT: v_mov_b32_e32 v17, s17208; GISEL-GFX10-NEXT: v_mov_b32_e32 v18, s18209; GISEL-GFX10-NEXT: v_mov_b32_e32 v19, s19210; GISEL-GFX10-NEXT: v_mov_b32_e32 v20, s20211; GISEL-GFX10-NEXT: v_mov_b32_e32 v21, s21212; GISEL-GFX10-NEXT: v_mov_b32_e32 v22, s22213; GISEL-GFX10-NEXT: v_mov_b32_e32 v23, s23214; GISEL-GFX10-NEXT: v_mov_b32_e32 v24, v32215; GISEL-GFX10-NEXT: v_mov_b32_e32 v25, v33216; GISEL-GFX10-NEXT: v_mov_b32_e32 v26, v34217; GISEL-GFX10-NEXT: v_mov_b32_e32 v27, v35218; GISEL-GFX10-NEXT: v_mov_b32_e32 v28, v36219; GISEL-GFX10-NEXT: v_mov_b32_e32 v29, v37220; GISEL-GFX10-NEXT: v_mov_b32_e32 v30, v38221; GISEL-GFX10-NEXT: v_mov_b32_e32 v31, v39222; GISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]223; GISEL-GFX10-NEXT: s_mov_b32 s24, use@abs32@lo224; GISEL-GFX10-NEXT: s_mov_b32 s25, use@abs32@hi225; GISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]226; GISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[24:25]227; GISEL-GFX10-NEXT: s_endpgm228;229; DAGISEL-GFX11-LABEL: amdgpu_cs_chain_spill:230; DAGISEL-GFX11: ; %bb.0:231; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)232; DAGISEL-GFX11-NEXT: s_mov_b32 s32, 0233; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v32, v15 :: v_dual_mov_b32 v33, v14234; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 60235; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v16, s32236; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v31, s24237; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 56238; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 52239; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v30, s24240; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v29, s25241; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 48242; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 44243; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v28, s24244; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v27, s25245; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 40246; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 36247; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v26, s24248; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v25, s25249; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 32250; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 28251; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v24, s24252; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v23, s25253; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 24254; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v34, v13 :: v_dual_mov_b32 v35, v12255; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v36, v11 :: v_dual_mov_b32 v37, v10256; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v38, v9 :: v_dual_mov_b32 v39, v8257; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 20258; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v22, s24259; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v21, s25260; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 16261; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 12262; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v20, s24263; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v19, s25264; DAGISEL-GFX11-NEXT: s_add_i32 s24, s32, 8265; DAGISEL-GFX11-NEXT: s_add_i32 s25, s32, 4266; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v18, s24267; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v17, s25268; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1269; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3270; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5271; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7272; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9273; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11274; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13275; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15276; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17277; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19278; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21279; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23280; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v24, v39 :: v_dual_mov_b32 v25, v38281; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v26, v37 :: v_dual_mov_b32 v27, v36282; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v28, v35 :: v_dual_mov_b32 v29, v34283; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v30, v33 :: v_dual_mov_b32 v31, v32284; DAGISEL-GFX11-NEXT: s_mov_b32 s25, use@abs32@hi285; DAGISEL-GFX11-NEXT: s_mov_b32 s24, use@abs32@lo286; DAGISEL-GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)287; DAGISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[24:25]288; DAGISEL-GFX11-NEXT: s_endpgm289;290; DAGISEL-GFX10-LABEL: amdgpu_cs_chain_spill:291; DAGISEL-GFX10: ; %bb.0:292; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)293; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v32, v15294; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v33, v14295; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v34, v13296; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v35, v12297; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v36, v11298; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v37, v10299; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v38, v9300; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v39, v8301; DAGISEL-GFX10-NEXT: s_mov_b32 s32, 0302; DAGISEL-GFX10-NEXT: buffer_store_dword v16, off, s[48:51], s32303; DAGISEL-GFX10-NEXT: buffer_store_dword v17, off, s[48:51], s32 offset:4304; DAGISEL-GFX10-NEXT: buffer_store_dword v18, off, s[48:51], s32 offset:8305; DAGISEL-GFX10-NEXT: buffer_store_dword v19, off, s[48:51], s32 offset:12306; DAGISEL-GFX10-NEXT: buffer_store_dword v20, off, s[48:51], s32 offset:16307; DAGISEL-GFX10-NEXT: buffer_store_dword v21, off, s[48:51], s32 offset:20308; DAGISEL-GFX10-NEXT: buffer_store_dword v22, off, s[48:51], s32 offset:24309; DAGISEL-GFX10-NEXT: buffer_store_dword v23, off, s[48:51], s32 offset:28310; DAGISEL-GFX10-NEXT: buffer_store_dword v24, off, s[48:51], s32 offset:32311; DAGISEL-GFX10-NEXT: buffer_store_dword v25, off, s[48:51], s32 offset:36312; DAGISEL-GFX10-NEXT: buffer_store_dword v26, off, s[48:51], s32 offset:40313; DAGISEL-GFX10-NEXT: buffer_store_dword v27, off, s[48:51], s32 offset:44314; DAGISEL-GFX10-NEXT: buffer_store_dword v28, off, s[48:51], s32 offset:48315; DAGISEL-GFX10-NEXT: buffer_store_dword v29, off, s[48:51], s32 offset:52316; DAGISEL-GFX10-NEXT: buffer_store_dword v30, off, s[48:51], s32 offset:56317; DAGISEL-GFX10-NEXT: buffer_store_dword v31, off, s[48:51], s32 offset:60318; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v0, s0319; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v1, s1320; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v2, s2321; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v3, s3322; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v4, s4323; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v5, s5324; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v6, s6325; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v7, s7326; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, s8327; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v9, s9328; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v10, s10329; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v11, s11330; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v12, s12331; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v13, s13332; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v14, s14333; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v15, s15334; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v16, s16335; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v17, s17336; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v18, s18337; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v19, s19338; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v20, s20339; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v21, s21340; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v22, s22341; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v23, s23342; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v24, v39343; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v25, v38344; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v26, v37345; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v27, v36346; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v28, v35347; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v29, v34348; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v30, v33349; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v31, v32350; DAGISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]351; DAGISEL-GFX10-NEXT: s_mov_b32 s25, use@abs32@hi352; DAGISEL-GFX10-NEXT: s_mov_b32 s24, use@abs32@lo353; DAGISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]354; DAGISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[24:25]355; DAGISEL-GFX10-NEXT: s_endpgm356 call amdgpu_gfx void @use(<24 x i32> %sgprs, <24 x i32> %vgprs)357 ret void358}359 360define amdgpu_cs_chain void @alloca_and_call() {361; GISEL-GFX11-LABEL: alloca_and_call:362; GISEL-GFX11: ; %bb.0: ; %.entry363; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)364; GISEL-GFX11-NEXT: v_mov_b32_e32 v0, 42365; GISEL-GFX11-NEXT: s_mov_b32 s0, use@abs32@lo366; GISEL-GFX11-NEXT: s_mov_b32 s1, use@abs32@hi367; GISEL-GFX11-NEXT: s_mov_b32 s32, 16368; GISEL-GFX11-NEXT: scratch_store_b32 off, v0, off369; GISEL-GFX11-NEXT: v_mov_b32_e32 v0, 0370; GISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]371; GISEL-GFX11-NEXT: s_endpgm372;373; GISEL-GFX10-LABEL: alloca_and_call:374; GISEL-GFX10: ; %bb.0: ; %.entry375; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GISEL-GFX10-NEXT: v_mov_b32_e32 v0, 42377; GISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]378; GISEL-GFX10-NEXT: s_mov_b32 s4, use@abs32@lo379; GISEL-GFX10-NEXT: s_mov_b32 s5, use@abs32@hi380; GISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]381; GISEL-GFX10-NEXT: buffer_store_dword v0, off, s[48:51], 0382; GISEL-GFX10-NEXT: v_mov_b32_e32 v0, 0383; GISEL-GFX10-NEXT: s_movk_i32 s32, 0x200384; GISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[4:5]385; GISEL-GFX10-NEXT: s_endpgm386;387; DAGISEL-GFX11-LABEL: alloca_and_call:388; DAGISEL-GFX11: ; %bb.0: ; %.entry389; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v0, 42391; DAGISEL-GFX11-NEXT: s_mov_b32 s1, use@abs32@hi392; DAGISEL-GFX11-NEXT: s_mov_b32 s0, use@abs32@lo393; DAGISEL-GFX11-NEXT: s_mov_b32 s32, 16394; DAGISEL-GFX11-NEXT: scratch_store_b32 off, v0, off395; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v0, 0396; DAGISEL-GFX11-NEXT: s_swappc_b64 s[30:31], s[0:1]397; DAGISEL-GFX11-NEXT: s_endpgm398;399; DAGISEL-GFX10-LABEL: alloca_and_call:400; DAGISEL-GFX10: ; %bb.0: ; %.entry401; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)402; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v0, 42403; DAGISEL-GFX10-NEXT: s_mov_b64 s[0:1], s[48:49]404; DAGISEL-GFX10-NEXT: s_mov_b32 s5, use@abs32@hi405; DAGISEL-GFX10-NEXT: s_mov_b32 s4, use@abs32@lo406; DAGISEL-GFX10-NEXT: s_mov_b64 s[2:3], s[50:51]407; DAGISEL-GFX10-NEXT: buffer_store_dword v0, off, s[48:51], 0408; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v0, 0409; DAGISEL-GFX10-NEXT: s_movk_i32 s32, 0x200410; DAGISEL-GFX10-NEXT: s_swappc_b64 s[30:31], s[4:5]411; DAGISEL-GFX10-NEXT: s_endpgm412.entry:413 %v = alloca [3 x i32], addrspace(5)414 store i32 42, ptr addrspace(5) %v415 call amdgpu_gfx void @use(ptr addrspace(5) %v)416 ret void417}418 419define amdgpu_cs void @cs_to_chain(<3 x i32> inreg %a, <3 x i32> %b) {420; GISEL-GFX11-LABEL: cs_to_chain:421; GISEL-GFX11: ; %bb.0:422; GISEL-GFX11-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v10, v2423; GISEL-GFX11-NEXT: s_mov_b32 s3, s0424; GISEL-GFX11-NEXT: ;;#ASMSTART425; GISEL-GFX11-NEXT: s_nop426; GISEL-GFX11-NEXT: ;;#ASMEND427; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo428; GISEL-GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)429; GISEL-GFX11-NEXT: v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v9, v1430; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi431; GISEL-GFX11-NEXT: s_mov_b32 s0, s3432; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1433; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]434;435; GISEL-GFX10-LABEL: cs_to_chain:436; GISEL-GFX10: ; %bb.0:437; GISEL-GFX10-NEXT: s_getpc_b64 s[100:101]438; GISEL-GFX10-NEXT: s_mov_b32 s100, s0439; GISEL-GFX10-NEXT: v_mov_b32_e32 v3, v0440; GISEL-GFX10-NEXT: s_load_dwordx4 s[100:103], s[100:101], 0x10441; GISEL-GFX10-NEXT: v_mov_b32_e32 v9, v1442; GISEL-GFX10-NEXT: v_mov_b32_e32 v10, v2443; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo444; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi445; GISEL-GFX10-NEXT: s_waitcnt lgkmcnt(0)446; GISEL-GFX10-NEXT: s_bitset0_b32 s103, 21447; GISEL-GFX10-NEXT: s_add_u32 s100, s100, s3448; GISEL-GFX10-NEXT: s_mov_b32 s3, s0449; GISEL-GFX10-NEXT: ;;#ASMSTART450; GISEL-GFX10-NEXT: s_nop451; GISEL-GFX10-NEXT: ;;#ASMEND452; GISEL-GFX10-NEXT: s_addc_u32 s101, s101, 0453; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v3454; GISEL-GFX10-NEXT: s_mov_b64 s[48:49], s[100:101]455; GISEL-GFX10-NEXT: s_mov_b32 s0, s3456; GISEL-GFX10-NEXT: s_mov_b64 s[50:51], s[102:103]457; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1458; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]459;460; DAGISEL-GFX11-LABEL: cs_to_chain:461; DAGISEL-GFX11: ; %bb.0:462; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v10, v2463; DAGISEL-GFX11-NEXT: s_mov_b32 s3, s0464; DAGISEL-GFX11-NEXT: ;;#ASMSTART465; DAGISEL-GFX11-NEXT: s_nop466; DAGISEL-GFX11-NEXT: ;;#ASMEND467; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi468; DAGISEL-GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)469; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v9, v1470; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo471; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s3472; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1473; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]474;475; DAGISEL-GFX10-LABEL: cs_to_chain:476; DAGISEL-GFX10: ; %bb.0:477; DAGISEL-GFX10-NEXT: s_getpc_b64 s[100:101]478; DAGISEL-GFX10-NEXT: s_mov_b32 s100, s0479; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v3, v0480; DAGISEL-GFX10-NEXT: s_load_dwordx4 s[100:103], s[100:101], 0x10481; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v9, v1482; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v10, v2483; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi484; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo485; DAGISEL-GFX10-NEXT: s_waitcnt lgkmcnt(0)486; DAGISEL-GFX10-NEXT: s_bitset0_b32 s103, 21487; DAGISEL-GFX10-NEXT: s_add_u32 s100, s100, s3488; DAGISEL-GFX10-NEXT: s_mov_b32 s3, s0489; DAGISEL-GFX10-NEXT: ;;#ASMSTART490; DAGISEL-GFX10-NEXT: s_nop491; DAGISEL-GFX10-NEXT: ;;#ASMEND492; DAGISEL-GFX10-NEXT: s_addc_u32 s101, s101, 0493; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v3494; DAGISEL-GFX10-NEXT: s_mov_b64 s[48:49], s[100:101]495; DAGISEL-GFX10-NEXT: s_mov_b64 s[50:51], s[102:103]496; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s3497; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1498; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]499 call void asm "s_nop", "~{v0},~{v8},~{v16},~{s0}"()500 call void(ptr, i32, <3 x i32>, <3 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v3i32(ptr @chain_callee, i32 -1, <3 x i32> inreg %a, <3 x i32> %b, i32 0)501 unreachable502}503 504; Chain call with SGPR arguments that we cannot prove are uniform.505define amdgpu_cs void @cs_to_chain_nonuniform(<3 x i32> %a, <3 x i32> %b) {506; GISEL-GFX11-LABEL: cs_to_chain_nonuniform:507; GISEL-GFX11: ; %bb.0:508; GISEL-GFX11-NEXT: v_readfirstlane_b32 s0, v0509; GISEL-GFX11-NEXT: v_readfirstlane_b32 s1, v1510; GISEL-GFX11-NEXT: v_readfirstlane_b32 s2, v2511; GISEL-GFX11-NEXT: v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v9, v4512; GISEL-GFX11-NEXT: v_mov_b32_e32 v10, v5513; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo514; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi515; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1516; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]517;518; GISEL-GFX10-LABEL: cs_to_chain_nonuniform:519; GISEL-GFX10: ; %bb.0:520; GISEL-GFX10-NEXT: s_getpc_b64 s[100:101]521; GISEL-GFX10-NEXT: s_mov_b32 s100, s0522; GISEL-GFX10-NEXT: v_readfirstlane_b32 s1, v1523; GISEL-GFX10-NEXT: s_load_dwordx4 s[100:103], s[100:101], 0x10524; GISEL-GFX10-NEXT: v_readfirstlane_b32 s2, v2525; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v3526; GISEL-GFX10-NEXT: v_mov_b32_e32 v9, v4527; GISEL-GFX10-NEXT: v_mov_b32_e32 v10, v5528; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo529; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi530; GISEL-GFX10-NEXT: s_waitcnt lgkmcnt(0)531; GISEL-GFX10-NEXT: s_bitset0_b32 s103, 21532; GISEL-GFX10-NEXT: s_add_u32 s100, s100, s0533; GISEL-GFX10-NEXT: s_addc_u32 s101, s101, 0534; GISEL-GFX10-NEXT: v_readfirstlane_b32 s0, v0535; GISEL-GFX10-NEXT: s_mov_b64 s[48:49], s[100:101]536; GISEL-GFX10-NEXT: s_mov_b64 s[50:51], s[102:103]537; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1538; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]539;540; DAGISEL-GFX11-LABEL: cs_to_chain_nonuniform:541; DAGISEL-GFX11: ; %bb.0:542; DAGISEL-GFX11-NEXT: v_readfirstlane_b32 s0, v0543; DAGISEL-GFX11-NEXT: v_readfirstlane_b32 s1, v1544; DAGISEL-GFX11-NEXT: v_readfirstlane_b32 s2, v2545; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v9, v4546; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v10, v5547; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi548; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo549; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1550; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]551;552; DAGISEL-GFX10-LABEL: cs_to_chain_nonuniform:553; DAGISEL-GFX10: ; %bb.0:554; DAGISEL-GFX10-NEXT: s_getpc_b64 s[100:101]555; DAGISEL-GFX10-NEXT: s_mov_b32 s100, s0556; DAGISEL-GFX10-NEXT: v_readfirstlane_b32 s1, v1557; DAGISEL-GFX10-NEXT: s_load_dwordx4 s[100:103], s[100:101], 0x10558; DAGISEL-GFX10-NEXT: v_readfirstlane_b32 s2, v2559; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v3560; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v9, v4561; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v10, v5562; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi563; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo564; DAGISEL-GFX10-NEXT: s_waitcnt lgkmcnt(0)565; DAGISEL-GFX10-NEXT: s_bitset0_b32 s103, 21566; DAGISEL-GFX10-NEXT: s_add_u32 s100, s100, s0567; DAGISEL-GFX10-NEXT: s_addc_u32 s101, s101, 0568; DAGISEL-GFX10-NEXT: v_readfirstlane_b32 s0, v0569; DAGISEL-GFX10-NEXT: s_mov_b64 s[48:49], s[100:101]570; DAGISEL-GFX10-NEXT: s_mov_b64 s[50:51], s[102:103]571; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1572; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]573 call void(ptr, i32, <3 x i32>, <3 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v3i32(ptr @chain_callee, i32 -1, <3 x i32> inreg %a, <3 x i32> %b, i32 0)574 unreachable575}576 577define amdgpu_cs_chain void @chain_to_chain(<3 x i32> inreg %a, <3 x i32> %b) {578; GISEL-GFX11-LABEL: chain_to_chain:579; GISEL-GFX11: ; %bb.0:580; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)581; GISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8582; GISEL-GFX11-NEXT: s_mov_b32 s3, s0583; GISEL-GFX11-NEXT: ;;#ASMSTART584; GISEL-GFX11-NEXT: s_nop585; GISEL-GFX11-NEXT: ;;#ASMEND586; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo587; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi588; GISEL-GFX11-NEXT: v_mov_b32_e32 v8, v1589; GISEL-GFX11-NEXT: s_mov_b32 s0, s3590; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1591; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]592;593; GISEL-GFX10-LABEL: chain_to_chain:594; GISEL-GFX10: ; %bb.0:595; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)596; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8597; GISEL-GFX10-NEXT: s_mov_b32 s3, s0598; GISEL-GFX10-NEXT: ;;#ASMSTART599; GISEL-GFX10-NEXT: s_nop600; GISEL-GFX10-NEXT: ;;#ASMEND601; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo602; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi603; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1604; GISEL-GFX10-NEXT: s_mov_b32 s0, s3605; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1606; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]607;608; DAGISEL-GFX11-LABEL: chain_to_chain:609; DAGISEL-GFX11: ; %bb.0:610; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)611; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8612; DAGISEL-GFX11-NEXT: s_mov_b32 s3, s0613; DAGISEL-GFX11-NEXT: ;;#ASMSTART614; DAGISEL-GFX11-NEXT: s_nop615; DAGISEL-GFX11-NEXT: ;;#ASMEND616; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi617; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo618; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v8, v1619; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s3620; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1621; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]622;623; DAGISEL-GFX10-LABEL: chain_to_chain:624; DAGISEL-GFX10: ; %bb.0:625; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)626; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8627; DAGISEL-GFX10-NEXT: s_mov_b32 s3, s0628; DAGISEL-GFX10-NEXT: ;;#ASMSTART629; DAGISEL-GFX10-NEXT: s_nop630; DAGISEL-GFX10-NEXT: ;;#ASMEND631; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi632; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo633; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1634; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s3635; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1636; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]637 call void asm "s_nop", "~{v0},~{v8},~{v16},~{s0}"()638 call void(ptr, i32, <3 x i32>, <3 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v3i32(ptr @chain_callee, i32 -1, <3 x i32> inreg %a, <3 x i32> %b, i32 0)639 unreachable640}641 642define amdgpu_cs_chain void @chain_to_chain_wwm(<3 x i32> inreg %a, <3 x i32> %b) {643; GISEL-GFX11-LABEL: chain_to_chain_wwm:644; GISEL-GFX11: ; %bb.0:645; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)646; GISEL-GFX11-NEXT: s_mov_b32 s3, s0647; GISEL-GFX11-NEXT: s_or_saveexec_b32 s0, -1648; GISEL-GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)649; GISEL-GFX11-NEXT: v_cndmask_b32_e64 v1, 4, 3, s0650; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, s0651; GISEL-GFX11-NEXT: v_mov_b32_e32 v2, v1652; GISEL-GFX11-NEXT: ;;#ASMSTART653; GISEL-GFX11-NEXT: s_nop654; GISEL-GFX11-NEXT: ;;#ASMEND655; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo656; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi657; GISEL-GFX11-NEXT: s_mov_b32 s0, s3658; GISEL-GFX11-NEXT: v_mov_b32_e32 v8, v2659; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1660; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]661;662; GISEL-GFX10-LABEL: chain_to_chain_wwm:663; GISEL-GFX10: ; %bb.0:664; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)665; GISEL-GFX10-NEXT: s_mov_b32 s3, s0666; GISEL-GFX10-NEXT: s_or_saveexec_b32 s0, -1667; GISEL-GFX10-NEXT: v_cndmask_b32_e64 v1, 4, 3, s0668; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, s0669; GISEL-GFX10-NEXT: v_mov_b32_e32 v2, v1670; GISEL-GFX10-NEXT: ;;#ASMSTART671; GISEL-GFX10-NEXT: s_nop672; GISEL-GFX10-NEXT: ;;#ASMEND673; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo674; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi675; GISEL-GFX10-NEXT: s_mov_b32 s0, s3676; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v2677; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1678; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]679;680; DAGISEL-GFX11-LABEL: chain_to_chain_wwm:681; DAGISEL-GFX11: ; %bb.0:682; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)683; DAGISEL-GFX11-NEXT: s_or_saveexec_b32 s4, -1684; DAGISEL-GFX11-NEXT: s_mov_b32 s3, s0685; DAGISEL-GFX11-NEXT: v_cndmask_b32_e64 v1, 4, 3, s4686; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, s4687; DAGISEL-GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)688; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v2, v1689; DAGISEL-GFX11-NEXT: ;;#ASMSTART690; DAGISEL-GFX11-NEXT: s_nop691; DAGISEL-GFX11-NEXT: ;;#ASMEND692; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi693; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo694; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s3695; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v8, v2696; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1697; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]698;699; DAGISEL-GFX10-LABEL: chain_to_chain_wwm:700; DAGISEL-GFX10: ; %bb.0:701; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)702; DAGISEL-GFX10-NEXT: s_or_saveexec_b32 s4, -1703; DAGISEL-GFX10-NEXT: s_mov_b32 s3, s0704; DAGISEL-GFX10-NEXT: v_cndmask_b32_e64 v1, 4, 3, s4705; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, s4706; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v2, v1707; DAGISEL-GFX10-NEXT: ;;#ASMSTART708; DAGISEL-GFX10-NEXT: s_nop709; DAGISEL-GFX10-NEXT: ;;#ASMEND710; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi711; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo712; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s3713; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v2714; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1715; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]716 %i = call i32 @llvm.amdgcn.set.inactive(i32 3, i32 4)717 call void asm "s_nop", "~{v0},~{v8},~{v16},~{s0}"()718 %w = call i32 @llvm.amdgcn.wwm(i32 %i)719 %c = insertelement <3 x i32> %b, i32 %w, i32 0720 call void(ptr, i32, <3 x i32>, <3 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v3i32(ptr @chain_callee, i32 -1, <3 x i32> inreg %a, <3 x i32> %c, i32 0)721 unreachable722}723 724define amdgpu_cs_chain void @chain_to_chain_use_all_v0_v7(<3 x i32> inreg %a, <3 x i32> %b) {725; GISEL-GFX11-LABEL: chain_to_chain_use_all_v0_v7:726; GISEL-GFX11: ; %bb.0:727; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)728; GISEL-GFX11-NEXT: v_mov_b32_e32 v11, v8729; GISEL-GFX11-NEXT: s_mov_b32 s3, s0730; GISEL-GFX11-NEXT: ;;#ASMSTART731; GISEL-GFX11-NEXT: s_nop732; GISEL-GFX11-NEXT: ;;#ASMEND733; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo734; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi735; GISEL-GFX11-NEXT: v_mov_b32_e32 v8, v11736; GISEL-GFX11-NEXT: s_mov_b32 s0, s3737; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1738; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]739;740; GISEL-GFX10-LABEL: chain_to_chain_use_all_v0_v7:741; GISEL-GFX10: ; %bb.0:742; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)743; GISEL-GFX10-NEXT: v_mov_b32_e32 v11, v8744; GISEL-GFX10-NEXT: s_mov_b32 s3, s0745; GISEL-GFX10-NEXT: ;;#ASMSTART746; GISEL-GFX10-NEXT: s_nop747; GISEL-GFX10-NEXT: ;;#ASMEND748; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo749; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi750; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v11751; GISEL-GFX10-NEXT: s_mov_b32 s0, s3752; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1753; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]754;755; DAGISEL-GFX11-LABEL: chain_to_chain_use_all_v0_v7:756; DAGISEL-GFX11: ; %bb.0:757; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)758; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v11, v8759; DAGISEL-GFX11-NEXT: s_mov_b32 s3, s0760; DAGISEL-GFX11-NEXT: ;;#ASMSTART761; DAGISEL-GFX11-NEXT: s_nop762; DAGISEL-GFX11-NEXT: ;;#ASMEND763; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee@abs32@hi764; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee@abs32@lo765; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v8, v11766; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s3767; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1768; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]769;770; DAGISEL-GFX10-LABEL: chain_to_chain_use_all_v0_v7:771; DAGISEL-GFX10: ; %bb.0:772; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)773; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v11, v8774; DAGISEL-GFX10-NEXT: s_mov_b32 s3, s0775; DAGISEL-GFX10-NEXT: ;;#ASMSTART776; DAGISEL-GFX10-NEXT: s_nop777; DAGISEL-GFX10-NEXT: ;;#ASMEND778; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee@abs32@hi779; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee@abs32@lo780; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v11781; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s3782; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1783; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]784 call void asm "s_nop", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7},~{v8},~{v16},~{s0}"()785 call void(ptr, i32, <3 x i32>, <3 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v3i32(ptr @chain_callee, i32 -1, <3 x i32> inreg %a, <3 x i32> %b, i32 0)786 unreachable787}788 789define amdgpu_cs_chain void @chain_to_chain_fewer_args(<3 x i32> inreg %a, <3 x i32> %b) {790; GISEL-GFX11-LABEL: chain_to_chain_fewer_args:791; GISEL-GFX11: ; %bb.0:792; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)793; GISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8794; GISEL-GFX11-NEXT: s_mov_b32 s2, s0795; GISEL-GFX11-NEXT: ;;#ASMSTART796; GISEL-GFX11-NEXT: s_nop797; GISEL-GFX11-NEXT: ;;#ASMEND798; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo799; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi800; GISEL-GFX11-NEXT: v_mov_b32_e32 v8, v1801; GISEL-GFX11-NEXT: s_mov_b32 s0, s2802; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1803; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]804;805; GISEL-GFX10-LABEL: chain_to_chain_fewer_args:806; GISEL-GFX10: ; %bb.0:807; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)808; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8809; GISEL-GFX10-NEXT: s_mov_b32 s2, s0810; GISEL-GFX10-NEXT: ;;#ASMSTART811; GISEL-GFX10-NEXT: s_nop812; GISEL-GFX10-NEXT: ;;#ASMEND813; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo814; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi815; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1816; GISEL-GFX10-NEXT: s_mov_b32 s0, s2817; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1818; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]819;820; DAGISEL-GFX11-LABEL: chain_to_chain_fewer_args:821; DAGISEL-GFX11: ; %bb.0:822; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)823; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8824; DAGISEL-GFX11-NEXT: s_mov_b32 s2, s0825; DAGISEL-GFX11-NEXT: ;;#ASMSTART826; DAGISEL-GFX11-NEXT: s_nop827; DAGISEL-GFX11-NEXT: ;;#ASMEND828; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi829; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo830; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v8, v1831; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s2832; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1833; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]834;835; DAGISEL-GFX10-LABEL: chain_to_chain_fewer_args:836; DAGISEL-GFX10: ; %bb.0:837; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)838; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8839; DAGISEL-GFX10-NEXT: s_mov_b32 s2, s0840; DAGISEL-GFX10-NEXT: ;;#ASMSTART841; DAGISEL-GFX10-NEXT: s_nop842; DAGISEL-GFX10-NEXT: ;;#ASMEND843; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi844; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo845; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1846; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s2847; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1848; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]849 %s = shufflevector <3 x i32> %a, <3 x i32> zeroinitializer, <2 x i32> <i32 0, i32 1>850 %v = shufflevector <3 x i32> %b, <3 x i32> zeroinitializer, <2 x i32> <i32 0, i32 1>851 call void asm "s_nop", "~{v0},~{v8},~{v16},~{s0}"()852 call void(ptr, i32, <2 x i32>, <2 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v2i32(ptr @chain_callee_2, i32 -1, <2 x i32> inreg %s, <2 x i32> %v, i32 0)853 unreachable854}855 856define amdgpu_cs_chain void @chain_to_chain_more_args(<3 x i32> inreg %a, <3 x i32> %b) {857; GISEL-GFX11-LABEL: chain_to_chain_more_args:858; GISEL-GFX11: ; %bb.0:859; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8861; GISEL-GFX11-NEXT: s_mov_b32 s3, s0862; GISEL-GFX11-NEXT: ;;#ASMSTART863; GISEL-GFX11-NEXT: s_nop864; GISEL-GFX11-NEXT: ;;#ASMEND865; GISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo866; GISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi867; GISEL-GFX11-NEXT: v_dual_mov_b32 v8, v1 :: v_dual_mov_b32 v11, 0868; GISEL-GFX11-NEXT: s_mov_b32 s0, s3869; GISEL-GFX11-NEXT: s_mov_b32 s3, 0870; GISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1871; GISEL-GFX11-NEXT: s_setpc_b64 s[4:5]872;873; GISEL-GFX10-LABEL: chain_to_chain_more_args:874; GISEL-GFX10: ; %bb.0:875; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)876; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8877; GISEL-GFX10-NEXT: s_mov_b32 s3, s0878; GISEL-GFX10-NEXT: ;;#ASMSTART879; GISEL-GFX10-NEXT: s_nop880; GISEL-GFX10-NEXT: ;;#ASMEND881; GISEL-GFX10-NEXT: v_mov_b32_e32 v11, 0882; GISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo883; GISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1884; GISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi885; GISEL-GFX10-NEXT: s_mov_b32 s0, s3886; GISEL-GFX10-NEXT: s_mov_b32 s3, 0887; GISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1888; GISEL-GFX10-NEXT: s_setpc_b64 s[4:5]889;890; DAGISEL-GFX11-LABEL: chain_to_chain_more_args:891; DAGISEL-GFX11: ; %bb.0:892; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)893; DAGISEL-GFX11-NEXT: v_mov_b32_e32 v1, v8894; DAGISEL-GFX11-NEXT: s_mov_b32 s3, s0895; DAGISEL-GFX11-NEXT: ;;#ASMSTART896; DAGISEL-GFX11-NEXT: s_nop897; DAGISEL-GFX11-NEXT: ;;#ASMEND898; DAGISEL-GFX11-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi899; DAGISEL-GFX11-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo900; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v8, v1 :: v_dual_mov_b32 v11, 0901; DAGISEL-GFX11-NEXT: s_mov_b32 s0, s3902; DAGISEL-GFX11-NEXT: s_mov_b32 s3, 0903; DAGISEL-GFX11-NEXT: s_mov_b32 exec_lo, -1904; DAGISEL-GFX11-NEXT: s_setpc_b64 s[4:5]905;906; DAGISEL-GFX10-LABEL: chain_to_chain_more_args:907; DAGISEL-GFX10: ; %bb.0:908; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)909; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v1, v8910; DAGISEL-GFX10-NEXT: s_mov_b32 s3, s0911; DAGISEL-GFX10-NEXT: ;;#ASMSTART912; DAGISEL-GFX10-NEXT: s_nop913; DAGISEL-GFX10-NEXT: ;;#ASMEND914; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v11, 0915; DAGISEL-GFX10-NEXT: s_mov_b32 s5, chain_callee_2@abs32@hi916; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v8, v1917; DAGISEL-GFX10-NEXT: s_mov_b32 s4, chain_callee_2@abs32@lo918; DAGISEL-GFX10-NEXT: s_mov_b32 s0, s3919; DAGISEL-GFX10-NEXT: s_mov_b32 s3, 0920; DAGISEL-GFX10-NEXT: s_mov_b32 exec_lo, -1921; DAGISEL-GFX10-NEXT: s_setpc_b64 s[4:5]922 %s = shufflevector <3 x i32> %a, <3 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>923 %v = shufflevector <3 x i32> %b, <3 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>924 call void asm "s_nop", "~{v0},~{v8},~{v16},~{s0}"()925 call void(ptr, i32, <4 x i32>, <4 x i32>, i32, ...) @llvm.amdgcn.cs.chain.v4i32(ptr @chain_callee_2, i32 -1, <4 x i32> inreg %s, <4 x i32> %v, i32 0)926 unreachable927}928 929define amdgpu_cs_chain void @amdgpu_cs_chain_dont_realign_stack(i32 %idx) {930; GISEL-GFX11-LABEL: amdgpu_cs_chain_dont_realign_stack:931; GISEL-GFX11: ; %bb.0:932; GISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GISEL-GFX11-NEXT: s_mov_b32 s3, 4934; GISEL-GFX11-NEXT: s_mov_b32 s2, 3935; GISEL-GFX11-NEXT: s_mov_b32 s1, 2936; GISEL-GFX11-NEXT: s_mov_b32 s0, 1937; GISEL-GFX11-NEXT: v_lshlrev_b32_e32 v0, 4, v8938; GISEL-GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)939; GISEL-GFX11-NEXT: v_mov_b32_e32 v4, v0940; GISEL-GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1941; GISEL-GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3942; GISEL-GFX11-NEXT: scratch_store_b128 v4, v[0:3], off dlc943; GISEL-GFX11-NEXT: s_waitcnt_vscnt null, 0x0944; GISEL-GFX11-NEXT: s_endpgm945;946; GISEL-GFX10-LABEL: amdgpu_cs_chain_dont_realign_stack:947; GISEL-GFX10: ; %bb.0:948; GISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)949; GISEL-GFX10-NEXT: v_lshlrev_b32_e32 v0, 4, v8950; GISEL-GFX10-NEXT: v_mov_b32_e32 v1, 1951; GISEL-GFX10-NEXT: v_mov_b32_e32 v2, 2952; GISEL-GFX10-NEXT: v_mov_b32_e32 v3, 3953; GISEL-GFX10-NEXT: v_mov_b32_e32 v4, 4954; GISEL-GFX10-NEXT: buffer_store_dword v1, v0, s[48:51], 0 offen955; GISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0956; GISEL-GFX10-NEXT: buffer_store_dword v2, v0, s[48:51], 0 offen offset:4957; GISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0958; GISEL-GFX10-NEXT: buffer_store_dword v3, v0, s[48:51], 0 offen offset:8959; GISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0960; GISEL-GFX10-NEXT: buffer_store_dword v4, v0, s[48:51], 0 offen offset:12961; GISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0962; GISEL-GFX10-NEXT: s_endpgm963;964; DAGISEL-GFX11-LABEL: amdgpu_cs_chain_dont_realign_stack:965; DAGISEL-GFX11: ; %bb.0:966; DAGISEL-GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)967; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2968; DAGISEL-GFX11-NEXT: v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 4969; DAGISEL-GFX11-NEXT: v_lshl_add_u32 v4, v8, 4, 0970; DAGISEL-GFX11-NEXT: scratch_store_b128 v4, v[0:3], off dlc971; DAGISEL-GFX11-NEXT: s_waitcnt_vscnt null, 0x0972; DAGISEL-GFX11-NEXT: s_endpgm973;974; DAGISEL-GFX10-LABEL: amdgpu_cs_chain_dont_realign_stack:975; DAGISEL-GFX10: ; %bb.0:976; DAGISEL-GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)977; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v0, 4978; DAGISEL-GFX10-NEXT: v_lshl_add_u32 v1, v8, 4, 0979; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v2, 3980; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v3, 2981; DAGISEL-GFX10-NEXT: v_mov_b32_e32 v4, 1982; DAGISEL-GFX10-NEXT: buffer_store_dword v0, v1, s[48:51], 0 offen offset:12983; DAGISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0984; DAGISEL-GFX10-NEXT: buffer_store_dword v2, v1, s[48:51], 0 offen offset:8985; DAGISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0986; DAGISEL-GFX10-NEXT: buffer_store_dword v3, v1, s[48:51], 0 offen offset:4987; DAGISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0988; DAGISEL-GFX10-NEXT: buffer_store_dword v4, v1, s[48:51], 0 offen989; DAGISEL-GFX10-NEXT: s_waitcnt_vscnt null, 0x0990; DAGISEL-GFX10-NEXT: s_endpgm991 %alloca.align32 = alloca [8 x <4 x i32>], align 32, addrspace(5)992 %gep0 = getelementptr inbounds [8 x <4 x i32>], ptr addrspace(5) %alloca.align32, i32 0, i32 %idx993 store volatile <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr addrspace(5) %gep0, align 32994 ret void995}996 997declare void @llvm.amdgcn.cs.chain.v2i32(ptr, i32, <2 x i32>, <2 x i32>, i32, ...)998declare void @llvm.amdgcn.cs.chain.v3i32(ptr, i32, <3 x i32>, <3 x i32>, i32, ...)999declare void @llvm.amdgcn.cs.chain.v4i32(ptr, i32, <4 x i32>, <4 x i32>, i32, ...)1000declare amdgpu_cs_chain void @chain_callee_2(<2 x i32> inreg, <2 x i32>)1001declare amdgpu_cs_chain void @chain_callee(<3 x i32> inreg, <3 x i32>)1002declare amdgpu_cs_chain void @chain_callee_4(<4 x i32> inreg, <4 x i32>)1003declare i32 @llvm.amdgcn.set.inactive(i32, i32)1004declare i32 @llvm.amdgcn.wwm(i32)1005