942 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,SDAG %s3; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,SDAG %s4; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GISEL %s5; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GISEL %s6 7declare hidden void @external_void_func_i8_inreg(i8 inreg) #08declare hidden void @external_void_func_i16_inreg(i32 inreg) #09declare hidden void @external_void_func_i32_inreg(i32 inreg) #010declare hidden void @external_void_func_i64_inreg(i64 inreg) #011declare hidden void @external_void_func_v2i32_inreg(<2 x i32> inreg) #012declare hidden void @external_void_func_v3i32_inreg(<3 x i32> inreg) #013declare hidden void @external_void_func_v4i32_inreg(<4 x i32> inreg) #014declare hidden void @external_void_func_v8i32_inreg(<8 x i32> inreg) #015declare hidden void @external_void_func_v16i32_inreg(<16 x i32> inreg) #016declare hidden void @external_void_func_f16_inreg(half inreg) #017declare hidden void @external_void_func_f32_inreg(float inreg) #018declare hidden void @external_void_func_f64_inreg(double inreg) #019declare hidden void @external_void_func_v2f16_inreg(<2 x half> inreg) #020declare hidden void @external_void_func_v3f16_inreg(<3 x half> inreg) #021declare hidden void @external_void_func_v4f16_inreg(<4 x half> inreg) #022 23declare hidden void @external_void_func_p0_inreg(ptr inreg) #024declare hidden void @external_void_func_p1_inreg(ptr addrspace(1) inreg) #025declare hidden void @external_void_func_p3_inreg(ptr addrspace(3) inreg) #026declare hidden void @external_void_func_v2p1_inreg(<2 x ptr addrspace(1)> inreg) #027declare hidden void @external_void_func_v2p5_inreg(<2 x ptr addrspace(5)> inreg) #028 29declare hidden void @external_void_func_i64_inreg_i32_inreg_i64_inreg(i64 inreg, i32 inreg, i64 inreg) #030 31declare hidden void @external_void_func_a15i32_inreg([13 x i32] inreg) #032declare hidden void @external_void_func_a15i32_inreg_i32_inreg__noimplicit([13 x i32] inreg, i32 inreg) #133 34define void @test_call_external_void_func_i8_inreg(i8 inreg %arg) #0 {35; GFX9-LABEL: test_call_external_void_func_i8_inreg:36; GFX9: ; %bb.0:37; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX9-NEXT: s_mov_b32 s17, s3339; GFX9-NEXT: s_mov_b32 s33, s3240; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -141; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill42; GFX9-NEXT: s_mov_b64 exec, s[18:19]43; GFX9-NEXT: v_writelane_b32 v40, s17, 244; GFX9-NEXT: s_addk_i32 s32, 0x40045; GFX9-NEXT: v_writelane_b32 v40, s30, 046; GFX9-NEXT: s_getpc_b64 s[18:19]47; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_i8_inreg@rel32@lo+448; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_i8_inreg@rel32@hi+1249; GFX9-NEXT: s_mov_b32 s0, s1650; GFX9-NEXT: v_writelane_b32 v40, s31, 151; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]52; GFX9-NEXT: v_readlane_b32 s31, v40, 153; GFX9-NEXT: v_readlane_b32 s30, v40, 054; GFX9-NEXT: s_mov_b32 s32, s3355; GFX9-NEXT: v_readlane_b32 s4, v40, 256; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -157; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload58; GFX9-NEXT: s_mov_b64 exec, s[6:7]59; GFX9-NEXT: s_mov_b32 s33, s460; GFX9-NEXT: s_waitcnt vmcnt(0)61; GFX9-NEXT: s_setpc_b64 s[30:31]62;63; GFX11-LABEL: test_call_external_void_func_i8_inreg:64; GFX11: ; %bb.0:65; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX11-NEXT: s_mov_b32 s1, s3367; GFX11-NEXT: s_mov_b32 s33, s3268; GFX11-NEXT: s_or_saveexec_b32 s2, -169; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill70; GFX11-NEXT: s_mov_b32 exec_lo, s271; GFX11-NEXT: v_writelane_b32 v40, s1, 272; GFX11-NEXT: s_add_i32 s32, s32, 1673; GFX11-NEXT: s_getpc_b64 s[2:3]74; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_i8_inreg@rel32@lo+475; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_i8_inreg@rel32@hi+1276; GFX11-NEXT: v_writelane_b32 v40, s30, 077; GFX11-NEXT: v_writelane_b32 v40, s31, 178; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]79; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)80; GFX11-NEXT: v_readlane_b32 s31, v40, 181; GFX11-NEXT: v_readlane_b32 s30, v40, 082; GFX11-NEXT: s_mov_b32 s32, s3383; GFX11-NEXT: v_readlane_b32 s0, v40, 284; GFX11-NEXT: s_or_saveexec_b32 s1, -185; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload86; GFX11-NEXT: s_mov_b32 exec_lo, s187; GFX11-NEXT: s_mov_b32 s33, s088; GFX11-NEXT: s_waitcnt vmcnt(0)89; GFX11-NEXT: s_setpc_b64 s[30:31]90 call void @external_void_func_i8_inreg(i8 inreg %arg)91 ret void92}93 94define void @test_call_external_void_func_i16_inreg(i16 inreg %arg) #0 {95; GFX9-LABEL: test_call_external_void_func_i16_inreg:96; GFX9: ; %bb.0:97; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)98; GFX9-NEXT: s_mov_b32 s17, s3399; GFX9-NEXT: s_mov_b32 s33, s32100; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1101; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill102; GFX9-NEXT: s_mov_b64 exec, s[18:19]103; GFX9-NEXT: v_writelane_b32 v40, s17, 2104; GFX9-NEXT: s_addk_i32 s32, 0x400105; GFX9-NEXT: v_writelane_b32 v40, s30, 0106; GFX9-NEXT: s_getpc_b64 s[18:19]107; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_i16_inreg@rel32@lo+4108; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_i16_inreg@rel32@hi+12109; GFX9-NEXT: s_mov_b32 s0, s16110; GFX9-NEXT: v_writelane_b32 v40, s31, 1111; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]112; GFX9-NEXT: v_readlane_b32 s31, v40, 1113; GFX9-NEXT: v_readlane_b32 s30, v40, 0114; GFX9-NEXT: s_mov_b32 s32, s33115; GFX9-NEXT: v_readlane_b32 s4, v40, 2116; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1117; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload118; GFX9-NEXT: s_mov_b64 exec, s[6:7]119; GFX9-NEXT: s_mov_b32 s33, s4120; GFX9-NEXT: s_waitcnt vmcnt(0)121; GFX9-NEXT: s_setpc_b64 s[30:31]122;123; GFX11-LABEL: test_call_external_void_func_i16_inreg:124; GFX11: ; %bb.0:125; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)126; GFX11-NEXT: s_mov_b32 s1, s33127; GFX11-NEXT: s_mov_b32 s33, s32128; GFX11-NEXT: s_or_saveexec_b32 s2, -1129; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill130; GFX11-NEXT: s_mov_b32 exec_lo, s2131; GFX11-NEXT: v_writelane_b32 v40, s1, 2132; GFX11-NEXT: s_add_i32 s32, s32, 16133; GFX11-NEXT: s_getpc_b64 s[2:3]134; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_i16_inreg@rel32@lo+4135; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_i16_inreg@rel32@hi+12136; GFX11-NEXT: v_writelane_b32 v40, s30, 0137; GFX11-NEXT: v_writelane_b32 v40, s31, 1138; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]139; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)140; GFX11-NEXT: v_readlane_b32 s31, v40, 1141; GFX11-NEXT: v_readlane_b32 s30, v40, 0142; GFX11-NEXT: s_mov_b32 s32, s33143; GFX11-NEXT: v_readlane_b32 s0, v40, 2144; GFX11-NEXT: s_or_saveexec_b32 s1, -1145; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload146; GFX11-NEXT: s_mov_b32 exec_lo, s1147; GFX11-NEXT: s_mov_b32 s33, s0148; GFX11-NEXT: s_waitcnt vmcnt(0)149; GFX11-NEXT: s_setpc_b64 s[30:31]150 call void @external_void_func_i16_inreg(i16 inreg %arg)151 ret void152}153 154define void @test_call_external_void_func_i32_inreg(i32 inreg %arg) #0 {155; GFX9-LABEL: test_call_external_void_func_i32_inreg:156; GFX9: ; %bb.0:157; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX9-NEXT: s_mov_b32 s17, s33159; GFX9-NEXT: s_mov_b32 s33, s32160; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1161; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill162; GFX9-NEXT: s_mov_b64 exec, s[18:19]163; GFX9-NEXT: v_writelane_b32 v40, s17, 2164; GFX9-NEXT: s_addk_i32 s32, 0x400165; GFX9-NEXT: v_writelane_b32 v40, s30, 0166; GFX9-NEXT: s_getpc_b64 s[18:19]167; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_i32_inreg@rel32@lo+4168; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_i32_inreg@rel32@hi+12169; GFX9-NEXT: s_mov_b32 s0, s16170; GFX9-NEXT: v_writelane_b32 v40, s31, 1171; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]172; GFX9-NEXT: v_readlane_b32 s31, v40, 1173; GFX9-NEXT: v_readlane_b32 s30, v40, 0174; GFX9-NEXT: s_mov_b32 s32, s33175; GFX9-NEXT: v_readlane_b32 s4, v40, 2176; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1177; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload178; GFX9-NEXT: s_mov_b64 exec, s[6:7]179; GFX9-NEXT: s_mov_b32 s33, s4180; GFX9-NEXT: s_waitcnt vmcnt(0)181; GFX9-NEXT: s_setpc_b64 s[30:31]182;183; GFX11-LABEL: test_call_external_void_func_i32_inreg:184; GFX11: ; %bb.0:185; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GFX11-NEXT: s_mov_b32 s1, s33187; GFX11-NEXT: s_mov_b32 s33, s32188; GFX11-NEXT: s_or_saveexec_b32 s2, -1189; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill190; GFX11-NEXT: s_mov_b32 exec_lo, s2191; GFX11-NEXT: v_writelane_b32 v40, s1, 2192; GFX11-NEXT: s_add_i32 s32, s32, 16193; GFX11-NEXT: s_getpc_b64 s[2:3]194; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_i32_inreg@rel32@lo+4195; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_i32_inreg@rel32@hi+12196; GFX11-NEXT: v_writelane_b32 v40, s30, 0197; GFX11-NEXT: v_writelane_b32 v40, s31, 1198; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]199; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)200; GFX11-NEXT: v_readlane_b32 s31, v40, 1201; GFX11-NEXT: v_readlane_b32 s30, v40, 0202; GFX11-NEXT: s_mov_b32 s32, s33203; GFX11-NEXT: v_readlane_b32 s0, v40, 2204; GFX11-NEXT: s_or_saveexec_b32 s1, -1205; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload206; GFX11-NEXT: s_mov_b32 exec_lo, s1207; GFX11-NEXT: s_mov_b32 s33, s0208; GFX11-NEXT: s_waitcnt vmcnt(0)209; GFX11-NEXT: s_setpc_b64 s[30:31]210 call void @external_void_func_i32_inreg(i32 inreg %arg)211 ret void212}213 214define void @test_call_external_void_func_i64_inreg(i64 inreg %arg) #0 {215; GFX11-LABEL: test_call_external_void_func_i64_inreg:216; GFX11: ; %bb.0:217; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; GFX11-NEXT: s_mov_b32 s2, s33219; GFX11-NEXT: s_mov_b32 s33, s32220; GFX11-NEXT: s_or_saveexec_b32 s3, -1221; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill222; GFX11-NEXT: s_mov_b32 exec_lo, s3223; GFX11-NEXT: v_writelane_b32 v40, s2, 2224; GFX11-NEXT: s_add_i32 s32, s32, 16225; GFX11-NEXT: s_getpc_b64 s[2:3]226; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_i64_inreg@rel32@lo+4227; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_i64_inreg@rel32@hi+12228; GFX11-NEXT: v_writelane_b32 v40, s30, 0229; GFX11-NEXT: v_writelane_b32 v40, s31, 1230; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]231; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)232; GFX11-NEXT: v_readlane_b32 s31, v40, 1233; GFX11-NEXT: v_readlane_b32 s30, v40, 0234; GFX11-NEXT: s_mov_b32 s32, s33235; GFX11-NEXT: v_readlane_b32 s0, v40, 2236; GFX11-NEXT: s_or_saveexec_b32 s1, -1237; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload238; GFX11-NEXT: s_mov_b32 exec_lo, s1239; GFX11-NEXT: s_mov_b32 s33, s0240; GFX11-NEXT: s_waitcnt vmcnt(0)241; GFX11-NEXT: s_setpc_b64 s[30:31]242 call void @external_void_func_i64_inreg(i64 inreg %arg)243 ret void244}245 246define void @test_call_external_void_func_v2i32_inreg(<2 x i32> inreg %arg) #0 {247; GFX11-LABEL: test_call_external_void_func_v2i32_inreg:248; GFX11: ; %bb.0:249; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)250; GFX11-NEXT: s_mov_b32 s2, s33251; GFX11-NEXT: s_mov_b32 s33, s32252; GFX11-NEXT: s_or_saveexec_b32 s3, -1253; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill254; GFX11-NEXT: s_mov_b32 exec_lo, s3255; GFX11-NEXT: v_writelane_b32 v40, s2, 2256; GFX11-NEXT: s_add_i32 s32, s32, 16257; GFX11-NEXT: s_getpc_b64 s[2:3]258; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v2i32_inreg@rel32@lo+4259; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v2i32_inreg@rel32@hi+12260; GFX11-NEXT: v_writelane_b32 v40, s30, 0261; GFX11-NEXT: v_writelane_b32 v40, s31, 1262; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]263; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)264; GFX11-NEXT: v_readlane_b32 s31, v40, 1265; GFX11-NEXT: v_readlane_b32 s30, v40, 0266; GFX11-NEXT: s_mov_b32 s32, s33267; GFX11-NEXT: v_readlane_b32 s0, v40, 2268; GFX11-NEXT: s_or_saveexec_b32 s1, -1269; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload270; GFX11-NEXT: s_mov_b32 exec_lo, s1271; GFX11-NEXT: s_mov_b32 s33, s0272; GFX11-NEXT: s_waitcnt vmcnt(0)273; GFX11-NEXT: s_setpc_b64 s[30:31]274 call void @external_void_func_v2i32_inreg(<2 x i32> inreg %arg)275 ret void276}277 278define void @test_call_external_void_func_v3i32_inreg(<3 x i32> inreg %arg) #0 {279; GFX11-LABEL: test_call_external_void_func_v3i32_inreg:280; GFX11: ; %bb.0:281; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)282; GFX11-NEXT: s_mov_b32 s3, s33283; GFX11-NEXT: s_mov_b32 s33, s32284; GFX11-NEXT: s_or_saveexec_b32 s16, -1285; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill286; GFX11-NEXT: s_mov_b32 exec_lo, s16287; GFX11-NEXT: v_writelane_b32 v40, s3, 2288; GFX11-NEXT: s_add_i32 s32, s32, 16289; GFX11-NEXT: s_getpc_b64 s[16:17]290; GFX11-NEXT: s_add_u32 s16, s16, external_void_func_v3i32_inreg@rel32@lo+4291; GFX11-NEXT: s_addc_u32 s17, s17, external_void_func_v3i32_inreg@rel32@hi+12292; GFX11-NEXT: v_writelane_b32 v40, s30, 0293; GFX11-NEXT: v_writelane_b32 v40, s31, 1294; GFX11-NEXT: s_swappc_b64 s[30:31], s[16:17]295; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)296; GFX11-NEXT: v_readlane_b32 s31, v40, 1297; GFX11-NEXT: v_readlane_b32 s30, v40, 0298; GFX11-NEXT: s_mov_b32 s32, s33299; GFX11-NEXT: v_readlane_b32 s0, v40, 2300; GFX11-NEXT: s_or_saveexec_b32 s1, -1301; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload302; GFX11-NEXT: s_mov_b32 exec_lo, s1303; GFX11-NEXT: s_mov_b32 s33, s0304; GFX11-NEXT: s_waitcnt vmcnt(0)305; GFX11-NEXT: s_setpc_b64 s[30:31]306 call void @external_void_func_v3i32_inreg(<3 x i32> inreg %arg)307 ret void308}309 310define void @test_call_external_void_func_v4i32_inreg(<4 x i32> inreg %arg) #0 {311; GFX11-LABEL: test_call_external_void_func_v4i32_inreg:312; GFX11: ; %bb.0:313; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GFX11-NEXT: s_mov_b32 s16, s33315; GFX11-NEXT: s_mov_b32 s33, s32316; GFX11-NEXT: s_or_saveexec_b32 s17, -1317; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill318; GFX11-NEXT: s_mov_b32 exec_lo, s17319; GFX11-NEXT: v_writelane_b32 v40, s16, 2320; GFX11-NEXT: s_add_i32 s32, s32, 16321; GFX11-NEXT: s_getpc_b64 s[16:17]322; GFX11-NEXT: s_add_u32 s16, s16, external_void_func_v4i32_inreg@rel32@lo+4323; GFX11-NEXT: s_addc_u32 s17, s17, external_void_func_v4i32_inreg@rel32@hi+12324; GFX11-NEXT: v_writelane_b32 v40, s30, 0325; GFX11-NEXT: v_writelane_b32 v40, s31, 1326; GFX11-NEXT: s_swappc_b64 s[30:31], s[16:17]327; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)328; GFX11-NEXT: v_readlane_b32 s31, v40, 1329; GFX11-NEXT: v_readlane_b32 s30, v40, 0330; GFX11-NEXT: s_mov_b32 s32, s33331; GFX11-NEXT: v_readlane_b32 s0, v40, 2332; GFX11-NEXT: s_or_saveexec_b32 s1, -1333; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload334; GFX11-NEXT: s_mov_b32 exec_lo, s1335; GFX11-NEXT: s_mov_b32 s33, s0336; GFX11-NEXT: s_waitcnt vmcnt(0)337; GFX11-NEXT: s_setpc_b64 s[30:31]338 call void @external_void_func_v4i32_inreg(<4 x i32> inreg %arg)339 ret void340}341 342define void @test_call_external_void_func_v8i32_inreg(<8 x i32> inreg %arg) #0 {343; GFX11-LABEL: test_call_external_void_func_v8i32_inreg:344; GFX11: ; %bb.0:345; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX11-NEXT: s_mov_b32 s20, s33347; GFX11-NEXT: s_mov_b32 s33, s32348; GFX11-NEXT: s_or_saveexec_b32 s21, -1349; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill350; GFX11-NEXT: s_mov_b32 exec_lo, s21351; GFX11-NEXT: v_writelane_b32 v40, s20, 2352; GFX11-NEXT: s_add_i32 s32, s32, 16353; GFX11-NEXT: s_getpc_b64 s[20:21]354; GFX11-NEXT: s_add_u32 s20, s20, external_void_func_v8i32_inreg@rel32@lo+4355; GFX11-NEXT: s_addc_u32 s21, s21, external_void_func_v8i32_inreg@rel32@hi+12356; GFX11-NEXT: v_writelane_b32 v40, s30, 0357; GFX11-NEXT: v_writelane_b32 v40, s31, 1358; GFX11-NEXT: s_swappc_b64 s[30:31], s[20:21]359; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)360; GFX11-NEXT: v_readlane_b32 s31, v40, 1361; GFX11-NEXT: v_readlane_b32 s30, v40, 0362; GFX11-NEXT: s_mov_b32 s32, s33363; GFX11-NEXT: v_readlane_b32 s0, v40, 2364; GFX11-NEXT: s_or_saveexec_b32 s1, -1365; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload366; GFX11-NEXT: s_mov_b32 exec_lo, s1367; GFX11-NEXT: s_mov_b32 s33, s0368; GFX11-NEXT: s_waitcnt vmcnt(0)369; GFX11-NEXT: s_setpc_b64 s[30:31]370 call void @external_void_func_v8i32_inreg(<8 x i32> inreg %arg)371 ret void372}373 374define void @test_call_external_void_func_f16_inreg(half inreg %arg) #0 {375; GFX9-LABEL: test_call_external_void_func_f16_inreg:376; GFX9: ; %bb.0:377; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)378; GFX9-NEXT: s_mov_b32 s17, s33379; GFX9-NEXT: s_mov_b32 s33, s32380; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1381; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill382; GFX9-NEXT: s_mov_b64 exec, s[18:19]383; GFX9-NEXT: v_writelane_b32 v40, s17, 2384; GFX9-NEXT: s_addk_i32 s32, 0x400385; GFX9-NEXT: v_writelane_b32 v40, s30, 0386; GFX9-NEXT: s_getpc_b64 s[18:19]387; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_f16_inreg@rel32@lo+4388; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_f16_inreg@rel32@hi+12389; GFX9-NEXT: s_mov_b32 s0, s16390; GFX9-NEXT: v_writelane_b32 v40, s31, 1391; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]392; GFX9-NEXT: v_readlane_b32 s31, v40, 1393; GFX9-NEXT: v_readlane_b32 s30, v40, 0394; GFX9-NEXT: s_mov_b32 s32, s33395; GFX9-NEXT: v_readlane_b32 s4, v40, 2396; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1397; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload398; GFX9-NEXT: s_mov_b64 exec, s[6:7]399; GFX9-NEXT: s_mov_b32 s33, s4400; GFX9-NEXT: s_waitcnt vmcnt(0)401; GFX9-NEXT: s_setpc_b64 s[30:31]402;403; GFX11-LABEL: test_call_external_void_func_f16_inreg:404; GFX11: ; %bb.0:405; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX11-NEXT: s_mov_b32 s1, s33407; GFX11-NEXT: s_mov_b32 s33, s32408; GFX11-NEXT: s_or_saveexec_b32 s2, -1409; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill410; GFX11-NEXT: s_mov_b32 exec_lo, s2411; GFX11-NEXT: v_writelane_b32 v40, s1, 2412; GFX11-NEXT: s_add_i32 s32, s32, 16413; GFX11-NEXT: s_getpc_b64 s[2:3]414; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_f16_inreg@rel32@lo+4415; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_f16_inreg@rel32@hi+12416; GFX11-NEXT: v_writelane_b32 v40, s30, 0417; GFX11-NEXT: v_writelane_b32 v40, s31, 1418; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]419; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)420; GFX11-NEXT: v_readlane_b32 s31, v40, 1421; GFX11-NEXT: v_readlane_b32 s30, v40, 0422; GFX11-NEXT: s_mov_b32 s32, s33423; GFX11-NEXT: v_readlane_b32 s0, v40, 2424; GFX11-NEXT: s_or_saveexec_b32 s1, -1425; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload426; GFX11-NEXT: s_mov_b32 exec_lo, s1427; GFX11-NEXT: s_mov_b32 s33, s0428; GFX11-NEXT: s_waitcnt vmcnt(0)429; GFX11-NEXT: s_setpc_b64 s[30:31]430 call void @external_void_func_f16_inreg(half inreg %arg)431 ret void432}433 434define void @test_call_external_void_func_f32_inreg(float inreg %arg) #0 {435; GFX9-LABEL: test_call_external_void_func_f32_inreg:436; GFX9: ; %bb.0:437; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)438; GFX9-NEXT: s_mov_b32 s17, s33439; GFX9-NEXT: s_mov_b32 s33, s32440; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1441; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill442; GFX9-NEXT: s_mov_b64 exec, s[18:19]443; GFX9-NEXT: v_writelane_b32 v40, s17, 2444; GFX9-NEXT: s_addk_i32 s32, 0x400445; GFX9-NEXT: v_writelane_b32 v40, s30, 0446; GFX9-NEXT: s_getpc_b64 s[18:19]447; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_f32_inreg@rel32@lo+4448; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_f32_inreg@rel32@hi+12449; GFX9-NEXT: s_mov_b32 s0, s16450; GFX9-NEXT: v_writelane_b32 v40, s31, 1451; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]452; GFX9-NEXT: v_readlane_b32 s31, v40, 1453; GFX9-NEXT: v_readlane_b32 s30, v40, 0454; GFX9-NEXT: s_mov_b32 s32, s33455; GFX9-NEXT: v_readlane_b32 s4, v40, 2456; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1457; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload458; GFX9-NEXT: s_mov_b64 exec, s[6:7]459; GFX9-NEXT: s_mov_b32 s33, s4460; GFX9-NEXT: s_waitcnt vmcnt(0)461; GFX9-NEXT: s_setpc_b64 s[30:31]462;463; GFX11-LABEL: test_call_external_void_func_f32_inreg:464; GFX11: ; %bb.0:465; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)466; GFX11-NEXT: s_mov_b32 s1, s33467; GFX11-NEXT: s_mov_b32 s33, s32468; GFX11-NEXT: s_or_saveexec_b32 s2, -1469; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill470; GFX11-NEXT: s_mov_b32 exec_lo, s2471; GFX11-NEXT: v_writelane_b32 v40, s1, 2472; GFX11-NEXT: s_add_i32 s32, s32, 16473; GFX11-NEXT: s_getpc_b64 s[2:3]474; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_f32_inreg@rel32@lo+4475; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_f32_inreg@rel32@hi+12476; GFX11-NEXT: v_writelane_b32 v40, s30, 0477; GFX11-NEXT: v_writelane_b32 v40, s31, 1478; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]479; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)480; GFX11-NEXT: v_readlane_b32 s31, v40, 1481; GFX11-NEXT: v_readlane_b32 s30, v40, 0482; GFX11-NEXT: s_mov_b32 s32, s33483; GFX11-NEXT: v_readlane_b32 s0, v40, 2484; GFX11-NEXT: s_or_saveexec_b32 s1, -1485; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload486; GFX11-NEXT: s_mov_b32 exec_lo, s1487; GFX11-NEXT: s_mov_b32 s33, s0488; GFX11-NEXT: s_waitcnt vmcnt(0)489; GFX11-NEXT: s_setpc_b64 s[30:31]490 call void @external_void_func_f32_inreg(float inreg %arg)491 ret void492}493 494define void @test_call_external_void_func_f64_inreg(double inreg %arg) #0 {495; GFX11-LABEL: test_call_external_void_func_f64_inreg:496; GFX11: ; %bb.0:497; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)498; GFX11-NEXT: s_mov_b32 s2, s33499; GFX11-NEXT: s_mov_b32 s33, s32500; GFX11-NEXT: s_or_saveexec_b32 s3, -1501; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill502; GFX11-NEXT: s_mov_b32 exec_lo, s3503; GFX11-NEXT: v_writelane_b32 v40, s2, 2504; GFX11-NEXT: s_add_i32 s32, s32, 16505; GFX11-NEXT: s_getpc_b64 s[2:3]506; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_f64_inreg@rel32@lo+4507; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_f64_inreg@rel32@hi+12508; GFX11-NEXT: v_writelane_b32 v40, s30, 0509; GFX11-NEXT: v_writelane_b32 v40, s31, 1510; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]511; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)512; GFX11-NEXT: v_readlane_b32 s31, v40, 1513; GFX11-NEXT: v_readlane_b32 s30, v40, 0514; GFX11-NEXT: s_mov_b32 s32, s33515; GFX11-NEXT: v_readlane_b32 s0, v40, 2516; GFX11-NEXT: s_or_saveexec_b32 s1, -1517; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload518; GFX11-NEXT: s_mov_b32 exec_lo, s1519; GFX11-NEXT: s_mov_b32 s33, s0520; GFX11-NEXT: s_waitcnt vmcnt(0)521; GFX11-NEXT: s_setpc_b64 s[30:31]522 call void @external_void_func_f64_inreg(double inreg %arg)523 ret void524}525 526define void @test_call_external_void_func_v2f16_inreg(<2 x half> inreg %arg) #0 {527; GFX9-LABEL: test_call_external_void_func_v2f16_inreg:528; GFX9: ; %bb.0:529; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)530; GFX9-NEXT: s_mov_b32 s17, s33531; GFX9-NEXT: s_mov_b32 s33, s32532; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1533; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill534; GFX9-NEXT: s_mov_b64 exec, s[18:19]535; GFX9-NEXT: v_writelane_b32 v40, s17, 2536; GFX9-NEXT: s_addk_i32 s32, 0x400537; GFX9-NEXT: v_writelane_b32 v40, s30, 0538; GFX9-NEXT: s_getpc_b64 s[18:19]539; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_v2f16_inreg@rel32@lo+4540; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_v2f16_inreg@rel32@hi+12541; GFX9-NEXT: s_mov_b32 s0, s16542; GFX9-NEXT: v_writelane_b32 v40, s31, 1543; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]544; GFX9-NEXT: v_readlane_b32 s31, v40, 1545; GFX9-NEXT: v_readlane_b32 s30, v40, 0546; GFX9-NEXT: s_mov_b32 s32, s33547; GFX9-NEXT: v_readlane_b32 s4, v40, 2548; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1549; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload550; GFX9-NEXT: s_mov_b64 exec, s[6:7]551; GFX9-NEXT: s_mov_b32 s33, s4552; GFX9-NEXT: s_waitcnt vmcnt(0)553; GFX9-NEXT: s_setpc_b64 s[30:31]554;555; GFX11-LABEL: test_call_external_void_func_v2f16_inreg:556; GFX11: ; %bb.0:557; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)558; GFX11-NEXT: s_mov_b32 s1, s33559; GFX11-NEXT: s_mov_b32 s33, s32560; GFX11-NEXT: s_or_saveexec_b32 s2, -1561; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill562; GFX11-NEXT: s_mov_b32 exec_lo, s2563; GFX11-NEXT: v_writelane_b32 v40, s1, 2564; GFX11-NEXT: s_add_i32 s32, s32, 16565; GFX11-NEXT: s_getpc_b64 s[2:3]566; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v2f16_inreg@rel32@lo+4567; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v2f16_inreg@rel32@hi+12568; GFX11-NEXT: v_writelane_b32 v40, s30, 0569; GFX11-NEXT: v_writelane_b32 v40, s31, 1570; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]571; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)572; GFX11-NEXT: v_readlane_b32 s31, v40, 1573; GFX11-NEXT: v_readlane_b32 s30, v40, 0574; GFX11-NEXT: s_mov_b32 s32, s33575; GFX11-NEXT: v_readlane_b32 s0, v40, 2576; GFX11-NEXT: s_or_saveexec_b32 s1, -1577; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload578; GFX11-NEXT: s_mov_b32 exec_lo, s1579; GFX11-NEXT: s_mov_b32 s33, s0580; GFX11-NEXT: s_waitcnt vmcnt(0)581; GFX11-NEXT: s_setpc_b64 s[30:31]582 call void @external_void_func_v2f16_inreg(<2 x half> inreg %arg)583 ret void584}585 586define void @test_call_external_void_func_v3f16_inreg(<3 x half> inreg %arg) #0 {587; GFX11-LABEL: test_call_external_void_func_v3f16_inreg:588; GFX11: ; %bb.0:589; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)590; GFX11-NEXT: s_mov_b32 s2, s33591; GFX11-NEXT: s_mov_b32 s33, s32592; GFX11-NEXT: s_or_saveexec_b32 s3, -1593; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill594; GFX11-NEXT: s_mov_b32 exec_lo, s3595; GFX11-NEXT: v_writelane_b32 v40, s2, 2596; GFX11-NEXT: s_add_i32 s32, s32, 16597; GFX11-NEXT: s_getpc_b64 s[2:3]598; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v3f16_inreg@rel32@lo+4599; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v3f16_inreg@rel32@hi+12600; GFX11-NEXT: v_writelane_b32 v40, s30, 0601; GFX11-NEXT: v_writelane_b32 v40, s31, 1602; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]603; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)604; GFX11-NEXT: v_readlane_b32 s31, v40, 1605; GFX11-NEXT: v_readlane_b32 s30, v40, 0606; GFX11-NEXT: s_mov_b32 s32, s33607; GFX11-NEXT: v_readlane_b32 s0, v40, 2608; GFX11-NEXT: s_or_saveexec_b32 s1, -1609; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload610; GFX11-NEXT: s_mov_b32 exec_lo, s1611; GFX11-NEXT: s_mov_b32 s33, s0612; GFX11-NEXT: s_waitcnt vmcnt(0)613; GFX11-NEXT: s_setpc_b64 s[30:31]614 call void @external_void_func_v3f16_inreg(<3 x half> inreg %arg)615 ret void616}617 618define void @test_call_external_void_func_v4f16_inreg(<4 x half> inreg %arg) #0 {619; GFX11-LABEL: test_call_external_void_func_v4f16_inreg:620; GFX11: ; %bb.0:621; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)622; GFX11-NEXT: s_mov_b32 s2, s33623; GFX11-NEXT: s_mov_b32 s33, s32624; GFX11-NEXT: s_or_saveexec_b32 s3, -1625; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill626; GFX11-NEXT: s_mov_b32 exec_lo, s3627; GFX11-NEXT: v_writelane_b32 v40, s2, 2628; GFX11-NEXT: s_add_i32 s32, s32, 16629; GFX11-NEXT: s_getpc_b64 s[2:3]630; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v4f16_inreg@rel32@lo+4631; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v4f16_inreg@rel32@hi+12632; GFX11-NEXT: v_writelane_b32 v40, s30, 0633; GFX11-NEXT: v_writelane_b32 v40, s31, 1634; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]635; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)636; GFX11-NEXT: v_readlane_b32 s31, v40, 1637; GFX11-NEXT: v_readlane_b32 s30, v40, 0638; GFX11-NEXT: s_mov_b32 s32, s33639; GFX11-NEXT: v_readlane_b32 s0, v40, 2640; GFX11-NEXT: s_or_saveexec_b32 s1, -1641; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload642; GFX11-NEXT: s_mov_b32 exec_lo, s1643; GFX11-NEXT: s_mov_b32 s33, s0644; GFX11-NEXT: s_waitcnt vmcnt(0)645; GFX11-NEXT: s_setpc_b64 s[30:31]646 call void @external_void_func_v4f16_inreg(<4 x half> inreg %arg)647 ret void648}649 650define void @test_call_external_void_func_p0_inreg(ptr inreg %arg) #0 {651; GFX11-LABEL: test_call_external_void_func_p0_inreg:652; GFX11: ; %bb.0:653; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)654; GFX11-NEXT: s_mov_b32 s2, s33655; GFX11-NEXT: s_mov_b32 s33, s32656; GFX11-NEXT: s_or_saveexec_b32 s3, -1657; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill658; GFX11-NEXT: s_mov_b32 exec_lo, s3659; GFX11-NEXT: v_writelane_b32 v40, s2, 2660; GFX11-NEXT: s_add_i32 s32, s32, 16661; GFX11-NEXT: s_getpc_b64 s[2:3]662; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_p0_inreg@rel32@lo+4663; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_p0_inreg@rel32@hi+12664; GFX11-NEXT: v_writelane_b32 v40, s30, 0665; GFX11-NEXT: v_writelane_b32 v40, s31, 1666; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]667; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)668; GFX11-NEXT: v_readlane_b32 s31, v40, 1669; GFX11-NEXT: v_readlane_b32 s30, v40, 0670; GFX11-NEXT: s_mov_b32 s32, s33671; GFX11-NEXT: v_readlane_b32 s0, v40, 2672; GFX11-NEXT: s_or_saveexec_b32 s1, -1673; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload674; GFX11-NEXT: s_mov_b32 exec_lo, s1675; GFX11-NEXT: s_mov_b32 s33, s0676; GFX11-NEXT: s_waitcnt vmcnt(0)677; GFX11-NEXT: s_setpc_b64 s[30:31]678 call void @external_void_func_p0_inreg(ptr inreg %arg)679 ret void680}681 682define void @test_call_external_void_func_p1_inreg(ptr addrspace(1) inreg %arg) #0 {683; GFX11-LABEL: test_call_external_void_func_p1_inreg:684; GFX11: ; %bb.0:685; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)686; GFX11-NEXT: s_mov_b32 s2, s33687; GFX11-NEXT: s_mov_b32 s33, s32688; GFX11-NEXT: s_or_saveexec_b32 s3, -1689; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill690; GFX11-NEXT: s_mov_b32 exec_lo, s3691; GFX11-NEXT: v_writelane_b32 v40, s2, 2692; GFX11-NEXT: s_add_i32 s32, s32, 16693; GFX11-NEXT: s_getpc_b64 s[2:3]694; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_p1_inreg@rel32@lo+4695; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_p1_inreg@rel32@hi+12696; GFX11-NEXT: v_writelane_b32 v40, s30, 0697; GFX11-NEXT: v_writelane_b32 v40, s31, 1698; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]699; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)700; GFX11-NEXT: v_readlane_b32 s31, v40, 1701; GFX11-NEXT: v_readlane_b32 s30, v40, 0702; GFX11-NEXT: s_mov_b32 s32, s33703; GFX11-NEXT: v_readlane_b32 s0, v40, 2704; GFX11-NEXT: s_or_saveexec_b32 s1, -1705; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload706; GFX11-NEXT: s_mov_b32 exec_lo, s1707; GFX11-NEXT: s_mov_b32 s33, s0708; GFX11-NEXT: s_waitcnt vmcnt(0)709; GFX11-NEXT: s_setpc_b64 s[30:31]710 call void @external_void_func_p1_inreg(ptr addrspace(1) inreg %arg)711 ret void712}713 714define void @test_call_external_void_func_p3_inreg(ptr addrspace(3) inreg %arg) #0 {715; GFX9-LABEL: test_call_external_void_func_p3_inreg:716; GFX9: ; %bb.0:717; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)718; GFX9-NEXT: s_mov_b32 s17, s33719; GFX9-NEXT: s_mov_b32 s33, s32720; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -1721; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill722; GFX9-NEXT: s_mov_b64 exec, s[18:19]723; GFX9-NEXT: v_writelane_b32 v40, s17, 2724; GFX9-NEXT: s_addk_i32 s32, 0x400725; GFX9-NEXT: v_writelane_b32 v40, s30, 0726; GFX9-NEXT: s_getpc_b64 s[18:19]727; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_p3_inreg@rel32@lo+4728; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_p3_inreg@rel32@hi+12729; GFX9-NEXT: s_mov_b32 s0, s16730; GFX9-NEXT: v_writelane_b32 v40, s31, 1731; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]732; GFX9-NEXT: v_readlane_b32 s31, v40, 1733; GFX9-NEXT: v_readlane_b32 s30, v40, 0734; GFX9-NEXT: s_mov_b32 s32, s33735; GFX9-NEXT: v_readlane_b32 s4, v40, 2736; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -1737; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload738; GFX9-NEXT: s_mov_b64 exec, s[6:7]739; GFX9-NEXT: s_mov_b32 s33, s4740; GFX9-NEXT: s_waitcnt vmcnt(0)741; GFX9-NEXT: s_setpc_b64 s[30:31]742;743; GFX11-LABEL: test_call_external_void_func_p3_inreg:744; GFX11: ; %bb.0:745; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)746; GFX11-NEXT: s_mov_b32 s1, s33747; GFX11-NEXT: s_mov_b32 s33, s32748; GFX11-NEXT: s_or_saveexec_b32 s2, -1749; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill750; GFX11-NEXT: s_mov_b32 exec_lo, s2751; GFX11-NEXT: v_writelane_b32 v40, s1, 2752; GFX11-NEXT: s_add_i32 s32, s32, 16753; GFX11-NEXT: s_getpc_b64 s[2:3]754; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_p3_inreg@rel32@lo+4755; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_p3_inreg@rel32@hi+12756; GFX11-NEXT: v_writelane_b32 v40, s30, 0757; GFX11-NEXT: v_writelane_b32 v40, s31, 1758; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]759; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)760; GFX11-NEXT: v_readlane_b32 s31, v40, 1761; GFX11-NEXT: v_readlane_b32 s30, v40, 0762; GFX11-NEXT: s_mov_b32 s32, s33763; GFX11-NEXT: v_readlane_b32 s0, v40, 2764; GFX11-NEXT: s_or_saveexec_b32 s1, -1765; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload766; GFX11-NEXT: s_mov_b32 exec_lo, s1767; GFX11-NEXT: s_mov_b32 s33, s0768; GFX11-NEXT: s_waitcnt vmcnt(0)769; GFX11-NEXT: s_setpc_b64 s[30:31]770 call void @external_void_func_p3_inreg(ptr addrspace(3) inreg %arg)771 ret void772}773 774define void @test_call_external_void_func_v2p1_inreg(<2 x ptr addrspace(1)> inreg %arg) #0 {775; GFX11-LABEL: test_call_external_void_func_v2p1_inreg:776; GFX11: ; %bb.0:777; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)778; GFX11-NEXT: s_mov_b32 s16, s33779; GFX11-NEXT: s_mov_b32 s33, s32780; GFX11-NEXT: s_or_saveexec_b32 s17, -1781; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill782; GFX11-NEXT: s_mov_b32 exec_lo, s17783; GFX11-NEXT: v_writelane_b32 v40, s16, 2784; GFX11-NEXT: s_add_i32 s32, s32, 16785; GFX11-NEXT: s_getpc_b64 s[16:17]786; GFX11-NEXT: s_add_u32 s16, s16, external_void_func_v2p1_inreg@rel32@lo+4787; GFX11-NEXT: s_addc_u32 s17, s17, external_void_func_v2p1_inreg@rel32@hi+12788; GFX11-NEXT: v_writelane_b32 v40, s30, 0789; GFX11-NEXT: v_writelane_b32 v40, s31, 1790; GFX11-NEXT: s_swappc_b64 s[30:31], s[16:17]791; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)792; GFX11-NEXT: v_readlane_b32 s31, v40, 1793; GFX11-NEXT: v_readlane_b32 s30, v40, 0794; GFX11-NEXT: s_mov_b32 s32, s33795; GFX11-NEXT: v_readlane_b32 s0, v40, 2796; GFX11-NEXT: s_or_saveexec_b32 s1, -1797; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload798; GFX11-NEXT: s_mov_b32 exec_lo, s1799; GFX11-NEXT: s_mov_b32 s33, s0800; GFX11-NEXT: s_waitcnt vmcnt(0)801; GFX11-NEXT: s_setpc_b64 s[30:31]802 call void @external_void_func_v2p1_inreg(<2 x ptr addrspace(1)> inreg %arg)803 ret void804}805 806define void @test_call_external_void_func_v2p5_inreg(<2 x ptr addrspace(5)> inreg %arg) #0 {807; GFX11-LABEL: test_call_external_void_func_v2p5_inreg:808; GFX11: ; %bb.0:809; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)810; GFX11-NEXT: s_mov_b32 s2, s33811; GFX11-NEXT: s_mov_b32 s33, s32812; GFX11-NEXT: s_or_saveexec_b32 s3, -1813; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill814; GFX11-NEXT: s_mov_b32 exec_lo, s3815; GFX11-NEXT: v_writelane_b32 v40, s2, 2816; GFX11-NEXT: s_add_i32 s32, s32, 16817; GFX11-NEXT: s_getpc_b64 s[2:3]818; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v2p5_inreg@rel32@lo+4819; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v2p5_inreg@rel32@hi+12820; GFX11-NEXT: v_writelane_b32 v40, s30, 0821; GFX11-NEXT: v_writelane_b32 v40, s31, 1822; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]823; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)824; GFX11-NEXT: v_readlane_b32 s31, v40, 1825; GFX11-NEXT: v_readlane_b32 s30, v40, 0826; GFX11-NEXT: s_mov_b32 s32, s33827; GFX11-NEXT: v_readlane_b32 s0, v40, 2828; GFX11-NEXT: s_or_saveexec_b32 s1, -1829; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload830; GFX11-NEXT: s_mov_b32 exec_lo, s1831; GFX11-NEXT: s_mov_b32 s33, s0832; GFX11-NEXT: s_waitcnt vmcnt(0)833; GFX11-NEXT: s_setpc_b64 s[30:31]834 call void @external_void_func_v2p5_inreg(<2 x ptr addrspace(5)> inreg %arg)835 ret void836}837 838define void @test_call_external_void_func_i64_inreg_i32_inreg_i64_inreg(i64 inreg %arg0, i32 inreg %arg1, i64 inreg %arg2) #0 {839; GFX11-LABEL: test_call_external_void_func_i64_inreg_i32_inreg_i64_inreg:840; GFX11: ; %bb.0:841; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX11-NEXT: s_mov_b32 s17, s33843; GFX11-NEXT: s_mov_b32 s33, s32844; GFX11-NEXT: s_or_saveexec_b32 s18, -1845; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill846; GFX11-NEXT: s_mov_b32 exec_lo, s18847; GFX11-NEXT: v_writelane_b32 v40, s17, 2848; GFX11-NEXT: s_add_i32 s32, s32, 16849; GFX11-NEXT: s_getpc_b64 s[18:19]850; GFX11-NEXT: s_add_u32 s18, s18, external_void_func_i64_inreg_i32_inreg_i64_inreg@rel32@lo+4851; GFX11-NEXT: s_addc_u32 s19, s19, external_void_func_i64_inreg_i32_inreg_i64_inreg@rel32@hi+12852; GFX11-NEXT: v_writelane_b32 v40, s30, 0853; GFX11-NEXT: v_writelane_b32 v40, s31, 1854; GFX11-NEXT: s_swappc_b64 s[30:31], s[18:19]855; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)856; GFX11-NEXT: v_readlane_b32 s31, v40, 1857; GFX11-NEXT: v_readlane_b32 s30, v40, 0858; GFX11-NEXT: s_mov_b32 s32, s33859; GFX11-NEXT: v_readlane_b32 s0, v40, 2860; GFX11-NEXT: s_or_saveexec_b32 s1, -1861; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload862; GFX11-NEXT: s_mov_b32 exec_lo, s1863; GFX11-NEXT: s_mov_b32 s33, s0864; GFX11-NEXT: s_waitcnt vmcnt(0)865; GFX11-NEXT: s_setpc_b64 s[30:31]866 call void @external_void_func_i64_inreg_i32_inreg_i64_inreg(i64 inreg %arg0, i32 inreg %arg1, i64 inreg %arg2)867 ret void868}869 870define void @test_call_external_void_func_a15i32_inreg([13 x i32] inreg %arg0) #0 {871; GFX11-LABEL: test_call_external_void_func_a15i32_inreg:872; GFX11: ; %bb.0:873; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)874; GFX11-NEXT: s_mov_b32 s25, s33875; GFX11-NEXT: s_mov_b32 s33, s32876; GFX11-NEXT: s_or_saveexec_b32 s26, -1877; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill878; GFX11-NEXT: s_mov_b32 exec_lo, s26879; GFX11-NEXT: v_writelane_b32 v40, s25, 2880; GFX11-NEXT: s_add_i32 s32, s32, 16881; GFX11-NEXT: s_getpc_b64 s[26:27]882; GFX11-NEXT: s_add_u32 s26, s26, external_void_func_a15i32_inreg@rel32@lo+4883; GFX11-NEXT: s_addc_u32 s27, s27, external_void_func_a15i32_inreg@rel32@hi+12884; GFX11-NEXT: v_writelane_b32 v40, s30, 0885; GFX11-NEXT: v_writelane_b32 v40, s31, 1886; GFX11-NEXT: s_swappc_b64 s[30:31], s[26:27]887; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)888; GFX11-NEXT: v_readlane_b32 s31, v40, 1889; GFX11-NEXT: v_readlane_b32 s30, v40, 0890; GFX11-NEXT: s_mov_b32 s32, s33891; GFX11-NEXT: v_readlane_b32 s0, v40, 2892; GFX11-NEXT: s_or_saveexec_b32 s1, -1893; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload894; GFX11-NEXT: s_mov_b32 exec_lo, s1895; GFX11-NEXT: s_mov_b32 s33, s0896; GFX11-NEXT: s_waitcnt vmcnt(0)897; GFX11-NEXT: s_setpc_b64 s[30:31]898 call void @external_void_func_a15i32_inreg([13 x i32] inreg %arg0)899 ret void900}901 902 903; FIXME: This should also fail904define void @test_call_external_void_func_a15i32_inreg_i32_inreg([13 x i32] inreg %arg0, i32 inreg %arg1) #1 {905; GFX11-LABEL: test_call_external_void_func_a15i32_inreg_i32_inreg:906; GFX11: ; %bb.0:907; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)908; GFX11-NEXT: s_mov_b32 s17, s33909; GFX11-NEXT: s_mov_b32 s33, s32910; GFX11-NEXT: s_or_saveexec_b32 s18, -1911; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill912; GFX11-NEXT: s_mov_b32 exec_lo, s18913; GFX11-NEXT: v_writelane_b32 v40, s17, 2914; GFX11-NEXT: s_add_i32 s32, s32, 16915; GFX11-NEXT: s_getpc_b64 s[18:19]916; GFX11-NEXT: s_add_u32 s18, s18, external_void_func_a15i32_inreg_i32_inreg__noimplicit@rel32@lo+4917; GFX11-NEXT: s_addc_u32 s19, s19, external_void_func_a15i32_inreg_i32_inreg__noimplicit@rel32@hi+12918; GFX11-NEXT: v_writelane_b32 v40, s30, 0919; GFX11-NEXT: v_writelane_b32 v40, s31, 1920; GFX11-NEXT: s_swappc_b64 s[30:31], s[18:19]921; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)922; GFX11-NEXT: v_readlane_b32 s31, v40, 1923; GFX11-NEXT: v_readlane_b32 s30, v40, 0924; GFX11-NEXT: s_mov_b32 s32, s33925; GFX11-NEXT: v_readlane_b32 s0, v40, 2926; GFX11-NEXT: s_or_saveexec_b32 s1, -1927; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload928; GFX11-NEXT: s_mov_b32 exec_lo, s1929; GFX11-NEXT: s_mov_b32 s33, s0930; GFX11-NEXT: s_waitcnt vmcnt(0)931; GFX11-NEXT: s_setpc_b64 s[30:31]932 call void @external_void_func_a15i32_inreg_i32_inreg__noimplicit([13 x i32] inreg %arg0, i32 inreg %arg1)933 ret void934}935 936attributes #0 = { nounwind }937attributes #1 = { nounwind "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-queue-ptr" "amdgpu-no-work-group-id-x" "amdgpu-no-work-group-id-y" "amdgpu-no-work-group-id-z" "amdgpu-no-work-item-id-x" "amdgpu-no-work-item-id-y" "amdgpu-no-work-item-id-z" }938 939;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:940; GISEL: {{.*}}941; SDAG: {{.*}}942