131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefix=GFX9 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -enable-var-scope -check-prefix=GFX11 %s4 5; We've separated this file from call-args-inreg.ll since GlobalISel does not support the bfloat type.6; Ideally, we should merge the two files once that support lands.7 8declare hidden void @external_void_func_bf16_inreg(bfloat inreg) #09declare hidden void @external_void_func_v2bf16_inreg(<2 x bfloat> inreg) #010 11define void @test_call_external_void_func_bf16_inreg(bfloat inreg %arg) #0 {12; GFX9-LABEL: test_call_external_void_func_bf16_inreg:13; GFX9: ; %bb.0:14; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)15; GFX9-NEXT: s_mov_b32 s17, s3316; GFX9-NEXT: s_mov_b32 s33, s3217; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -118; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill19; GFX9-NEXT: s_mov_b64 exec, s[18:19]20; GFX9-NEXT: v_writelane_b32 v40, s17, 221; GFX9-NEXT: s_addk_i32 s32, 0x40022; GFX9-NEXT: v_writelane_b32 v40, s30, 023; GFX9-NEXT: s_getpc_b64 s[18:19]24; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_bf16_inreg@rel32@lo+425; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_bf16_inreg@rel32@hi+1226; GFX9-NEXT: s_mov_b32 s0, s1627; GFX9-NEXT: v_writelane_b32 v40, s31, 128; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]29; GFX9-NEXT: v_readlane_b32 s31, v40, 130; GFX9-NEXT: v_readlane_b32 s30, v40, 031; GFX9-NEXT: s_mov_b32 s32, s3332; GFX9-NEXT: v_readlane_b32 s4, v40, 233; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -134; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload35; GFX9-NEXT: s_mov_b64 exec, s[6:7]36; GFX9-NEXT: s_mov_b32 s33, s437; GFX9-NEXT: s_waitcnt vmcnt(0)38; GFX9-NEXT: s_setpc_b64 s[30:31]39;40; GFX11-LABEL: test_call_external_void_func_bf16_inreg:41; GFX11: ; %bb.0:42; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; GFX11-NEXT: s_mov_b32 s1, s3344; GFX11-NEXT: s_mov_b32 s33, s3245; GFX11-NEXT: s_or_saveexec_b32 s2, -146; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill47; GFX11-NEXT: s_mov_b32 exec_lo, s248; GFX11-NEXT: v_writelane_b32 v40, s1, 249; GFX11-NEXT: s_add_i32 s32, s32, 1650; GFX11-NEXT: s_getpc_b64 s[2:3]51; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_bf16_inreg@rel32@lo+452; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_bf16_inreg@rel32@hi+1253; GFX11-NEXT: v_writelane_b32 v40, s30, 054; GFX11-NEXT: v_writelane_b32 v40, s31, 155; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]56; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)57; GFX11-NEXT: v_readlane_b32 s31, v40, 158; GFX11-NEXT: v_readlane_b32 s30, v40, 059; GFX11-NEXT: s_mov_b32 s32, s3360; GFX11-NEXT: v_readlane_b32 s0, v40, 261; GFX11-NEXT: s_or_saveexec_b32 s1, -162; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload63; GFX11-NEXT: s_mov_b32 exec_lo, s164; GFX11-NEXT: s_mov_b32 s33, s065; GFX11-NEXT: s_waitcnt vmcnt(0)66; GFX11-NEXT: s_setpc_b64 s[30:31]67 call void @external_void_func_bf16_inreg(bfloat inreg %arg)68 ret void69}70 71define void @test_call_external_void_func_v2bf16_inreg(<2 x bfloat> inreg %arg) #0 {72; GFX9-LABEL: test_call_external_void_func_v2bf16_inreg:73; GFX9: ; %bb.0:74; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX9-NEXT: s_mov_b32 s17, s3376; GFX9-NEXT: s_mov_b32 s33, s3277; GFX9-NEXT: s_or_saveexec_b64 s[18:19], -178; GFX9-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill79; GFX9-NEXT: s_mov_b64 exec, s[18:19]80; GFX9-NEXT: v_writelane_b32 v40, s17, 281; GFX9-NEXT: s_addk_i32 s32, 0x40082; GFX9-NEXT: v_writelane_b32 v40, s30, 083; GFX9-NEXT: s_getpc_b64 s[18:19]84; GFX9-NEXT: s_add_u32 s18, s18, external_void_func_v2bf16_inreg@rel32@lo+485; GFX9-NEXT: s_addc_u32 s19, s19, external_void_func_v2bf16_inreg@rel32@hi+1286; GFX9-NEXT: s_mov_b32 s0, s1687; GFX9-NEXT: v_writelane_b32 v40, s31, 188; GFX9-NEXT: s_swappc_b64 s[30:31], s[18:19]89; GFX9-NEXT: v_readlane_b32 s31, v40, 190; GFX9-NEXT: v_readlane_b32 s30, v40, 091; GFX9-NEXT: s_mov_b32 s32, s3392; GFX9-NEXT: v_readlane_b32 s4, v40, 293; GFX9-NEXT: s_or_saveexec_b64 s[6:7], -194; GFX9-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload95; GFX9-NEXT: s_mov_b64 exec, s[6:7]96; GFX9-NEXT: s_mov_b32 s33, s497; GFX9-NEXT: s_waitcnt vmcnt(0)98; GFX9-NEXT: s_setpc_b64 s[30:31]99;100; GFX11-LABEL: test_call_external_void_func_v2bf16_inreg:101; GFX11: ; %bb.0:102; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX11-NEXT: s_mov_b32 s1, s33104; GFX11-NEXT: s_mov_b32 s33, s32105; GFX11-NEXT: s_or_saveexec_b32 s2, -1106; GFX11-NEXT: scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill107; GFX11-NEXT: s_mov_b32 exec_lo, s2108; GFX11-NEXT: v_writelane_b32 v40, s1, 2109; GFX11-NEXT: s_add_i32 s32, s32, 16110; GFX11-NEXT: s_getpc_b64 s[2:3]111; GFX11-NEXT: s_add_u32 s2, s2, external_void_func_v2bf16_inreg@rel32@lo+4112; GFX11-NEXT: s_addc_u32 s3, s3, external_void_func_v2bf16_inreg@rel32@hi+12113; GFX11-NEXT: v_writelane_b32 v40, s30, 0114; GFX11-NEXT: v_writelane_b32 v40, s31, 1115; GFX11-NEXT: s_swappc_b64 s[30:31], s[2:3]116; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)117; GFX11-NEXT: v_readlane_b32 s31, v40, 1118; GFX11-NEXT: v_readlane_b32 s30, v40, 0119; GFX11-NEXT: s_mov_b32 s32, s33120; GFX11-NEXT: v_readlane_b32 s0, v40, 2121; GFX11-NEXT: s_or_saveexec_b32 s1, -1122; GFX11-NEXT: scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload123; GFX11-NEXT: s_mov_b32 exec_lo, s1124; GFX11-NEXT: s_mov_b32 s33, s0125; GFX11-NEXT: s_waitcnt vmcnt(0)126; GFX11-NEXT: s_setpc_b64 s[30:31]127 call void @external_void_func_v2bf16_inreg(<2 x bfloat> inreg %arg)128 ret void129}130 131