917 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck --check-prefixes=GCN,GFX90A %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck --check-prefixes=GCN,GFX908 %s4 5define void @func_empty() #0 {6; GCN-LABEL: func_empty:7; GCN: ; %bb.0:8; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; GCN-NEXT: s_setpc_b64 s[30:31]10 ret void11}12 13define void @func_areg_4() #0 {14; GCN-LABEL: func_areg_4:15; GCN: ; %bb.0:16; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)17; GCN-NEXT: ;;#ASMSTART18; GCN-NEXT: ; use agpr319; GCN-NEXT: ;;#ASMEND20; GCN-NEXT: s_setpc_b64 s[30:31]21 call void asm sideeffect "; use agpr3", "~{a3}" ()22 ret void23}24 25define void @func_areg_32() #0 {26; GCN-LABEL: func_areg_32:27; GCN: ; %bb.0:28; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)29; GCN-NEXT: ;;#ASMSTART30; GCN-NEXT: ; use agpr3131; GCN-NEXT: ;;#ASMEND32; GCN-NEXT: s_setpc_b64 s[30:31]33 call void asm sideeffect "; use agpr31", "~{a31}" ()34 ret void35}36 37define void @func_areg_33() #0 {38; GFX90A-LABEL: func_areg_33:39; GFX90A: ; %bb.0:40; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)41; GFX90A-NEXT: v_accvgpr_read_b32 v0, a32 ; Reload Reuse42; GFX90A-NEXT: ;;#ASMSTART43; GFX90A-NEXT: ; use agpr3244; GFX90A-NEXT: ;;#ASMEND45; GFX90A-NEXT: v_accvgpr_write_b32 a32, v0 ; Reload Reuse46; GFX90A-NEXT: s_setpc_b64 s[30:31]47;48; GFX908-LABEL: func_areg_33:49; GFX908: ; %bb.0:50; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)51; GFX908-NEXT: ;;#ASMSTART52; GFX908-NEXT: ; use agpr3253; GFX908-NEXT: ;;#ASMEND54; GFX908-NEXT: s_setpc_b64 s[30:31]55 call void asm sideeffect "; use agpr32", "~{a32}" ()56 ret void57}58 59 60define void @func_areg_64() #0 {61; GFX90A-LABEL: func_areg_64:62; GFX90A: ; %bb.0:63; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)64; GFX90A-NEXT: v_accvgpr_read_b32 v0, a63 ; Reload Reuse65; GFX90A-NEXT: ;;#ASMSTART66; GFX90A-NEXT: ; use agpr6367; GFX90A-NEXT: ;;#ASMEND68; GFX90A-NEXT: v_accvgpr_write_b32 a63, v0 ; Reload Reuse69; GFX90A-NEXT: s_setpc_b64 s[30:31]70;71; GFX908-LABEL: func_areg_64:72; GFX908: ; %bb.0:73; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)74; GFX908-NEXT: ;;#ASMSTART75; GFX908-NEXT: ; use agpr6376; GFX908-NEXT: ;;#ASMEND77; GFX908-NEXT: s_setpc_b64 s[30:31]78 call void asm sideeffect "; use agpr63", "~{a63}" ()79 ret void80}81 82define void @func_areg_31_63() #0 {83; GFX90A-LABEL: func_areg_31_63:84; GFX90A: ; %bb.0:85; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)86; GFX90A-NEXT: v_accvgpr_read_b32 v0, a63 ; Reload Reuse87; GFX90A-NEXT: ;;#ASMSTART88; GFX90A-NEXT: ; use agpr31, agpr6389; GFX90A-NEXT: ;;#ASMEND90; GFX90A-NEXT: v_accvgpr_write_b32 a63, v0 ; Reload Reuse91; GFX90A-NEXT: s_setpc_b64 s[30:31]92;93; GFX908-LABEL: func_areg_31_63:94; GFX908: ; %bb.0:95; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)96; GFX908-NEXT: ;;#ASMSTART97; GFX908-NEXT: ; use agpr31, agpr6398; GFX908-NEXT: ;;#ASMEND99; GFX908-NEXT: s_setpc_b64 s[30:31]100 call void asm sideeffect "; use agpr31, agpr63", "~{a31},~{a63}" ()101 ret void102}103 104declare void @func_unknown() #0105 106define amdgpu_kernel void @test_call_empty() #0 {107; GFX90A-LABEL: test_call_empty:108; GFX90A: ; %bb.0: ; %bb109; GFX90A-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0110; GFX90A-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1111; GFX90A-NEXT: s_mov_b32 s22, -1112; GFX90A-NEXT: s_mov_b32 s23, 0xe00000113; GFX90A-NEXT: s_add_u32 s20, s20, s11114; GFX90A-NEXT: s_addc_u32 s21, s21, 0115; GFX90A-NEXT: s_mov_b32 s12, s8116; GFX90A-NEXT: s_add_u32 s8, s4, 36117; GFX90A-NEXT: s_mov_b32 s13, s9118; GFX90A-NEXT: s_addc_u32 s9, s5, 0119; GFX90A-NEXT: s_getpc_b64 s[4:5]120; GFX90A-NEXT: s_add_u32 s4, s4, func_empty@gotpcrel32@lo+4121; GFX90A-NEXT: s_addc_u32 s5, s5, func_empty@gotpcrel32@hi+12122; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0123; GFX90A-NEXT: s_mov_b32 s14, s10124; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]125; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]126; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]127; GFX90A-NEXT: s_mov_b64 s[0:1], s[20:21]128; GFX90A-NEXT: v_mov_b32_e32 v31, v0129; GFX90A-NEXT: s_mov_b64 s[2:3], s[22:23]130; GFX90A-NEXT: s_mov_b32 s32, 0131; GFX90A-NEXT: ;;#ASMSTART132; GFX90A-NEXT: ; def a[0:31]133; GFX90A-NEXT: ;;#ASMEND134; GFX90A-NEXT: s_waitcnt lgkmcnt(0)135; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]136; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[28:31], off137; GFX90A-NEXT: s_waitcnt vmcnt(0)138; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[24:27], off139; GFX90A-NEXT: s_waitcnt vmcnt(0)140; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[20:23], off141; GFX90A-NEXT: s_waitcnt vmcnt(0)142; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[16:19], off143; GFX90A-NEXT: s_waitcnt vmcnt(0)144; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[12:15], off145; GFX90A-NEXT: s_waitcnt vmcnt(0)146; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[8:11], off147; GFX90A-NEXT: s_waitcnt vmcnt(0)148; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[4:7], off149; GFX90A-NEXT: s_waitcnt vmcnt(0)150; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[0:3], off151; GFX90A-NEXT: s_waitcnt vmcnt(0)152; GFX90A-NEXT: s_endpgm153;154; GFX908-LABEL: test_call_empty:155; GFX908: ; %bb.0: ; %bb156; GFX908-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0157; GFX908-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1158; GFX908-NEXT: s_mov_b32 s22, -1159; GFX908-NEXT: s_mov_b32 s23, 0xe00000160; GFX908-NEXT: s_add_u32 s20, s20, s11161; GFX908-NEXT: s_addc_u32 s21, s21, 0162; GFX908-NEXT: s_mov_b32 s12, s8163; GFX908-NEXT: s_add_u32 s8, s4, 36164; GFX908-NEXT: s_mov_b32 s13, s9165; GFX908-NEXT: s_addc_u32 s9, s5, 0166; GFX908-NEXT: s_getpc_b64 s[4:5]167; GFX908-NEXT: s_add_u32 s4, s4, func_empty@gotpcrel32@lo+4168; GFX908-NEXT: s_addc_u32 s5, s5, func_empty@gotpcrel32@hi+12169; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0170; GFX908-NEXT: s_mov_b32 s14, s10171; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]172; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2173; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1174; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]175; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]176; GFX908-NEXT: s_mov_b64 s[0:1], s[20:21]177; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2178; GFX908-NEXT: s_mov_b64 s[2:3], s[22:23]179; GFX908-NEXT: s_mov_b32 s32, 0180; GFX908-NEXT: ;;#ASMSTART181; GFX908-NEXT: ; def a[0:31]182; GFX908-NEXT: ;;#ASMEND183; GFX908-NEXT: v_accvgpr_read_b32 v6, a3184; GFX908-NEXT: v_accvgpr_read_b32 v5, a2185; GFX908-NEXT: v_accvgpr_read_b32 v4, a1186; GFX908-NEXT: v_accvgpr_read_b32 v3, a0187; GFX908-NEXT: v_accvgpr_read_b32 v10, a7188; GFX908-NEXT: v_accvgpr_read_b32 v9, a6189; GFX908-NEXT: v_accvgpr_read_b32 v8, a5190; GFX908-NEXT: v_accvgpr_read_b32 v7, a4191; GFX908-NEXT: v_accvgpr_read_b32 v14, a11192; GFX908-NEXT: v_accvgpr_read_b32 v13, a10193; GFX908-NEXT: v_accvgpr_read_b32 v12, a9194; GFX908-NEXT: v_accvgpr_read_b32 v11, a8195; GFX908-NEXT: v_accvgpr_read_b32 v18, a15196; GFX908-NEXT: v_accvgpr_read_b32 v17, a14197; GFX908-NEXT: v_accvgpr_read_b32 v16, a13198; GFX908-NEXT: v_accvgpr_read_b32 v15, a12199; GFX908-NEXT: v_accvgpr_read_b32 v22, a19200; GFX908-NEXT: v_accvgpr_read_b32 v21, a18201; GFX908-NEXT: v_accvgpr_read_b32 v20, a17202; GFX908-NEXT: v_accvgpr_read_b32 v19, a16203; GFX908-NEXT: v_accvgpr_read_b32 v26, a23204; GFX908-NEXT: v_accvgpr_read_b32 v25, a22205; GFX908-NEXT: v_accvgpr_read_b32 v24, a21206; GFX908-NEXT: v_accvgpr_read_b32 v23, a20207; GFX908-NEXT: v_accvgpr_read_b32 v30, a27208; GFX908-NEXT: v_accvgpr_read_b32 v29, a26209; GFX908-NEXT: v_accvgpr_read_b32 v28, a25210; GFX908-NEXT: v_accvgpr_read_b32 v27, a24211; GFX908-NEXT: v_accvgpr_read_b32 v35, a31212; GFX908-NEXT: v_accvgpr_read_b32 v34, a30213; GFX908-NEXT: v_accvgpr_read_b32 v33, a29214; GFX908-NEXT: v_accvgpr_read_b32 v32, a28215; GFX908-NEXT: s_waitcnt lgkmcnt(0)216; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]217; GFX908-NEXT: global_store_dwordx4 v[0:1], v[32:35], off218; GFX908-NEXT: s_waitcnt vmcnt(0)219; GFX908-NEXT: global_store_dwordx4 v[0:1], v[27:30], off220; GFX908-NEXT: s_waitcnt vmcnt(0)221; GFX908-NEXT: global_store_dwordx4 v[0:1], v[23:26], off222; GFX908-NEXT: s_waitcnt vmcnt(0)223; GFX908-NEXT: global_store_dwordx4 v[0:1], v[19:22], off224; GFX908-NEXT: s_waitcnt vmcnt(0)225; GFX908-NEXT: global_store_dwordx4 v[0:1], v[15:18], off226; GFX908-NEXT: s_waitcnt vmcnt(0)227; GFX908-NEXT: global_store_dwordx4 v[0:1], v[11:14], off228; GFX908-NEXT: s_waitcnt vmcnt(0)229; GFX908-NEXT: global_store_dwordx4 v[0:1], v[7:10], off230; GFX908-NEXT: s_waitcnt vmcnt(0)231; GFX908-NEXT: global_store_dwordx4 v[0:1], v[3:6], off232; GFX908-NEXT: s_waitcnt vmcnt(0)233; GFX908-NEXT: s_endpgm234bb:235 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()236 call void @func_empty()237 store volatile <32 x float> %reg, ptr addrspace(1) poison238 ret void239}240 241define amdgpu_kernel void @test_call_areg4() #0 {242; GFX90A-LABEL: test_call_areg4:243; GFX90A: ; %bb.0: ; %bb244; GFX90A-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0245; GFX90A-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1246; GFX90A-NEXT: s_mov_b32 s22, -1247; GFX90A-NEXT: s_mov_b32 s23, 0xe00000248; GFX90A-NEXT: s_add_u32 s20, s20, s11249; GFX90A-NEXT: s_addc_u32 s21, s21, 0250; GFX90A-NEXT: s_mov_b32 s12, s8251; GFX90A-NEXT: s_add_u32 s8, s4, 36252; GFX90A-NEXT: s_mov_b32 s13, s9253; GFX90A-NEXT: s_addc_u32 s9, s5, 0254; GFX90A-NEXT: s_getpc_b64 s[4:5]255; GFX90A-NEXT: s_add_u32 s4, s4, func_areg_4@gotpcrel32@lo+4256; GFX90A-NEXT: s_addc_u32 s5, s5, func_areg_4@gotpcrel32@hi+12257; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0258; GFX90A-NEXT: s_mov_b32 s14, s10259; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]260; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]261; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]262; GFX90A-NEXT: s_mov_b64 s[0:1], s[20:21]263; GFX90A-NEXT: v_mov_b32_e32 v31, v0264; GFX90A-NEXT: s_mov_b64 s[2:3], s[22:23]265; GFX90A-NEXT: s_mov_b32 s32, 0266; GFX90A-NEXT: ;;#ASMSTART267; GFX90A-NEXT: ; def a[4:35]268; GFX90A-NEXT: ;;#ASMEND269; GFX90A-NEXT: s_waitcnt lgkmcnt(0)270; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]271; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[32:35], off272; GFX90A-NEXT: s_waitcnt vmcnt(0)273; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[28:31], off274; GFX90A-NEXT: s_waitcnt vmcnt(0)275; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[24:27], off276; GFX90A-NEXT: s_waitcnt vmcnt(0)277; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[20:23], off278; GFX90A-NEXT: s_waitcnt vmcnt(0)279; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[16:19], off280; GFX90A-NEXT: s_waitcnt vmcnt(0)281; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[12:15], off282; GFX90A-NEXT: s_waitcnt vmcnt(0)283; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[8:11], off284; GFX90A-NEXT: s_waitcnt vmcnt(0)285; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[4:7], off286; GFX90A-NEXT: s_waitcnt vmcnt(0)287; GFX90A-NEXT: s_endpgm288;289; GFX908-LABEL: test_call_areg4:290; GFX908: ; %bb.0: ; %bb291; GFX908-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0292; GFX908-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1293; GFX908-NEXT: s_mov_b32 s22, -1294; GFX908-NEXT: s_mov_b32 s23, 0xe00000295; GFX908-NEXT: s_add_u32 s20, s20, s11296; GFX908-NEXT: s_addc_u32 s21, s21, 0297; GFX908-NEXT: s_mov_b32 s12, s8298; GFX908-NEXT: s_add_u32 s8, s4, 36299; GFX908-NEXT: s_mov_b32 s13, s9300; GFX908-NEXT: s_addc_u32 s9, s5, 0301; GFX908-NEXT: s_getpc_b64 s[4:5]302; GFX908-NEXT: s_add_u32 s4, s4, func_areg_4@gotpcrel32@lo+4303; GFX908-NEXT: s_addc_u32 s5, s5, func_areg_4@gotpcrel32@hi+12304; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0305; GFX908-NEXT: s_mov_b32 s14, s10306; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]307; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2308; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1309; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]310; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]311; GFX908-NEXT: s_mov_b64 s[0:1], s[20:21]312; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2313; GFX908-NEXT: s_mov_b64 s[2:3], s[22:23]314; GFX908-NEXT: s_mov_b32 s32, 0315; GFX908-NEXT: ;;#ASMSTART316; GFX908-NEXT: ; def a[0:31]317; GFX908-NEXT: ;;#ASMEND318; GFX908-NEXT: v_accvgpr_read_b32 v6, a3319; GFX908-NEXT: v_accvgpr_read_b32 v5, a2320; GFX908-NEXT: v_accvgpr_read_b32 v4, a1321; GFX908-NEXT: v_accvgpr_read_b32 v3, a0322; GFX908-NEXT: v_accvgpr_read_b32 v10, a7323; GFX908-NEXT: v_accvgpr_read_b32 v9, a6324; GFX908-NEXT: v_accvgpr_read_b32 v8, a5325; GFX908-NEXT: v_accvgpr_read_b32 v7, a4326; GFX908-NEXT: v_accvgpr_read_b32 v14, a11327; GFX908-NEXT: v_accvgpr_read_b32 v13, a10328; GFX908-NEXT: v_accvgpr_read_b32 v12, a9329; GFX908-NEXT: v_accvgpr_read_b32 v11, a8330; GFX908-NEXT: v_accvgpr_read_b32 v18, a15331; GFX908-NEXT: v_accvgpr_read_b32 v17, a14332; GFX908-NEXT: v_accvgpr_read_b32 v16, a13333; GFX908-NEXT: v_accvgpr_read_b32 v15, a12334; GFX908-NEXT: v_accvgpr_read_b32 v22, a19335; GFX908-NEXT: v_accvgpr_read_b32 v21, a18336; GFX908-NEXT: v_accvgpr_read_b32 v20, a17337; GFX908-NEXT: v_accvgpr_read_b32 v19, a16338; GFX908-NEXT: v_accvgpr_read_b32 v26, a23339; GFX908-NEXT: v_accvgpr_read_b32 v25, a22340; GFX908-NEXT: v_accvgpr_read_b32 v24, a21341; GFX908-NEXT: v_accvgpr_read_b32 v23, a20342; GFX908-NEXT: v_accvgpr_read_b32 v30, a27343; GFX908-NEXT: v_accvgpr_read_b32 v29, a26344; GFX908-NEXT: v_accvgpr_read_b32 v28, a25345; GFX908-NEXT: v_accvgpr_read_b32 v27, a24346; GFX908-NEXT: v_accvgpr_read_b32 v35, a31347; GFX908-NEXT: v_accvgpr_read_b32 v34, a30348; GFX908-NEXT: v_accvgpr_read_b32 v33, a29349; GFX908-NEXT: v_accvgpr_read_b32 v32, a28350; GFX908-NEXT: s_waitcnt lgkmcnt(0)351; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]352; GFX908-NEXT: global_store_dwordx4 v[0:1], v[32:35], off353; GFX908-NEXT: s_waitcnt vmcnt(0)354; GFX908-NEXT: global_store_dwordx4 v[0:1], v[27:30], off355; GFX908-NEXT: s_waitcnt vmcnt(0)356; GFX908-NEXT: global_store_dwordx4 v[0:1], v[23:26], off357; GFX908-NEXT: s_waitcnt vmcnt(0)358; GFX908-NEXT: global_store_dwordx4 v[0:1], v[19:22], off359; GFX908-NEXT: s_waitcnt vmcnt(0)360; GFX908-NEXT: global_store_dwordx4 v[0:1], v[15:18], off361; GFX908-NEXT: s_waitcnt vmcnt(0)362; GFX908-NEXT: global_store_dwordx4 v[0:1], v[11:14], off363; GFX908-NEXT: s_waitcnt vmcnt(0)364; GFX908-NEXT: global_store_dwordx4 v[0:1], v[7:10], off365; GFX908-NEXT: s_waitcnt vmcnt(0)366; GFX908-NEXT: global_store_dwordx4 v[0:1], v[3:6], off367; GFX908-NEXT: s_waitcnt vmcnt(0)368; GFX908-NEXT: s_endpgm369bb:370 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()371 call void @func_areg_4()372 store volatile <32 x float> %reg, ptr addrspace(1) poison373 ret void374}375 376define amdgpu_kernel void @test_call_areg32() #0 {377; GFX90A-LABEL: test_call_areg32:378; GFX90A: ; %bb.0: ; %bb379; GFX90A-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0380; GFX90A-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1381; GFX90A-NEXT: s_mov_b32 s22, -1382; GFX90A-NEXT: s_mov_b32 s23, 0xe00000383; GFX90A-NEXT: s_add_u32 s20, s20, s11384; GFX90A-NEXT: s_addc_u32 s21, s21, 0385; GFX90A-NEXT: s_mov_b32 s12, s8386; GFX90A-NEXT: s_add_u32 s8, s4, 36387; GFX90A-NEXT: s_mov_b32 s13, s9388; GFX90A-NEXT: s_addc_u32 s9, s5, 0389; GFX90A-NEXT: s_getpc_b64 s[4:5]390; GFX90A-NEXT: s_add_u32 s4, s4, func_areg_32@gotpcrel32@lo+4391; GFX90A-NEXT: s_addc_u32 s5, s5, func_areg_32@gotpcrel32@hi+12392; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0393; GFX90A-NEXT: s_mov_b32 s14, s10394; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]395; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]396; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]397; GFX90A-NEXT: s_mov_b64 s[0:1], s[20:21]398; GFX90A-NEXT: v_mov_b32_e32 v31, v0399; GFX90A-NEXT: s_mov_b64 s[2:3], s[22:23]400; GFX90A-NEXT: s_mov_b32 s32, 0401; GFX90A-NEXT: ;;#ASMSTART402; GFX90A-NEXT: ; def a[32:63]403; GFX90A-NEXT: ;;#ASMEND404; GFX90A-NEXT: s_waitcnt lgkmcnt(0)405; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]406; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[60:63], off407; GFX90A-NEXT: s_waitcnt vmcnt(0)408; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[56:59], off409; GFX90A-NEXT: s_waitcnt vmcnt(0)410; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[52:55], off411; GFX90A-NEXT: s_waitcnt vmcnt(0)412; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[48:51], off413; GFX90A-NEXT: s_waitcnt vmcnt(0)414; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[44:47], off415; GFX90A-NEXT: s_waitcnt vmcnt(0)416; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[40:43], off417; GFX90A-NEXT: s_waitcnt vmcnt(0)418; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[36:39], off419; GFX90A-NEXT: s_waitcnt vmcnt(0)420; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[32:35], off421; GFX90A-NEXT: s_waitcnt vmcnt(0)422; GFX90A-NEXT: s_endpgm423;424; GFX908-LABEL: test_call_areg32:425; GFX908: ; %bb.0: ; %bb426; GFX908-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0427; GFX908-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1428; GFX908-NEXT: s_mov_b32 s22, -1429; GFX908-NEXT: s_mov_b32 s23, 0xe00000430; GFX908-NEXT: s_add_u32 s20, s20, s11431; GFX908-NEXT: s_addc_u32 s21, s21, 0432; GFX908-NEXT: s_mov_b32 s12, s8433; GFX908-NEXT: s_add_u32 s8, s4, 36434; GFX908-NEXT: s_mov_b32 s13, s9435; GFX908-NEXT: s_addc_u32 s9, s5, 0436; GFX908-NEXT: s_getpc_b64 s[4:5]437; GFX908-NEXT: s_add_u32 s4, s4, func_areg_32@gotpcrel32@lo+4438; GFX908-NEXT: s_addc_u32 s5, s5, func_areg_32@gotpcrel32@hi+12439; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0440; GFX908-NEXT: s_mov_b32 s14, s10441; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]442; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2443; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1444; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]445; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]446; GFX908-NEXT: s_mov_b64 s[0:1], s[20:21]447; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2448; GFX908-NEXT: s_mov_b64 s[2:3], s[22:23]449; GFX908-NEXT: s_mov_b32 s32, 0450; GFX908-NEXT: ;;#ASMSTART451; GFX908-NEXT: ; def a[0:31]452; GFX908-NEXT: ;;#ASMEND453; GFX908-NEXT: v_accvgpr_read_b32 v6, a3454; GFX908-NEXT: v_accvgpr_read_b32 v5, a2455; GFX908-NEXT: v_accvgpr_read_b32 v4, a1456; GFX908-NEXT: v_accvgpr_read_b32 v3, a0457; GFX908-NEXT: v_accvgpr_read_b32 v10, a7458; GFX908-NEXT: v_accvgpr_read_b32 v9, a6459; GFX908-NEXT: v_accvgpr_read_b32 v8, a5460; GFX908-NEXT: v_accvgpr_read_b32 v7, a4461; GFX908-NEXT: v_accvgpr_read_b32 v14, a11462; GFX908-NEXT: v_accvgpr_read_b32 v13, a10463; GFX908-NEXT: v_accvgpr_read_b32 v12, a9464; GFX908-NEXT: v_accvgpr_read_b32 v11, a8465; GFX908-NEXT: v_accvgpr_read_b32 v18, a15466; GFX908-NEXT: v_accvgpr_read_b32 v17, a14467; GFX908-NEXT: v_accvgpr_read_b32 v16, a13468; GFX908-NEXT: v_accvgpr_read_b32 v15, a12469; GFX908-NEXT: v_accvgpr_read_b32 v22, a19470; GFX908-NEXT: v_accvgpr_read_b32 v21, a18471; GFX908-NEXT: v_accvgpr_read_b32 v20, a17472; GFX908-NEXT: v_accvgpr_read_b32 v19, a16473; GFX908-NEXT: v_accvgpr_read_b32 v26, a23474; GFX908-NEXT: v_accvgpr_read_b32 v25, a22475; GFX908-NEXT: v_accvgpr_read_b32 v24, a21476; GFX908-NEXT: v_accvgpr_read_b32 v23, a20477; GFX908-NEXT: v_accvgpr_read_b32 v30, a27478; GFX908-NEXT: v_accvgpr_read_b32 v29, a26479; GFX908-NEXT: v_accvgpr_read_b32 v28, a25480; GFX908-NEXT: v_accvgpr_read_b32 v27, a24481; GFX908-NEXT: v_accvgpr_read_b32 v35, a31482; GFX908-NEXT: v_accvgpr_read_b32 v34, a30483; GFX908-NEXT: v_accvgpr_read_b32 v33, a29484; GFX908-NEXT: v_accvgpr_read_b32 v32, a28485; GFX908-NEXT: s_waitcnt lgkmcnt(0)486; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]487; GFX908-NEXT: global_store_dwordx4 v[0:1], v[32:35], off488; GFX908-NEXT: s_waitcnt vmcnt(0)489; GFX908-NEXT: global_store_dwordx4 v[0:1], v[27:30], off490; GFX908-NEXT: s_waitcnt vmcnt(0)491; GFX908-NEXT: global_store_dwordx4 v[0:1], v[23:26], off492; GFX908-NEXT: s_waitcnt vmcnt(0)493; GFX908-NEXT: global_store_dwordx4 v[0:1], v[19:22], off494; GFX908-NEXT: s_waitcnt vmcnt(0)495; GFX908-NEXT: global_store_dwordx4 v[0:1], v[15:18], off496; GFX908-NEXT: s_waitcnt vmcnt(0)497; GFX908-NEXT: global_store_dwordx4 v[0:1], v[11:14], off498; GFX908-NEXT: s_waitcnt vmcnt(0)499; GFX908-NEXT: global_store_dwordx4 v[0:1], v[7:10], off500; GFX908-NEXT: s_waitcnt vmcnt(0)501; GFX908-NEXT: global_store_dwordx4 v[0:1], v[3:6], off502; GFX908-NEXT: s_waitcnt vmcnt(0)503; GFX908-NEXT: s_endpgm504bb:505 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()506 call void @func_areg_32()507 store volatile <32 x float> %reg, ptr addrspace(1) poison508 ret void509}510 511define amdgpu_kernel void @test_call_areg64() #0 {512; GFX90A-LABEL: test_call_areg64:513; GFX90A: ; %bb.0: ; %bb514; GFX90A-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0515; GFX90A-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1516; GFX90A-NEXT: s_mov_b32 s22, -1517; GFX90A-NEXT: s_mov_b32 s23, 0xe00000518; GFX90A-NEXT: s_add_u32 s20, s20, s11519; GFX90A-NEXT: s_addc_u32 s21, s21, 0520; GFX90A-NEXT: s_mov_b32 s12, s8521; GFX90A-NEXT: s_add_u32 s8, s4, 36522; GFX90A-NEXT: s_mov_b32 s13, s9523; GFX90A-NEXT: s_addc_u32 s9, s5, 0524; GFX90A-NEXT: s_getpc_b64 s[4:5]525; GFX90A-NEXT: s_add_u32 s4, s4, func_areg_64@gotpcrel32@lo+4526; GFX90A-NEXT: s_addc_u32 s5, s5, func_areg_64@gotpcrel32@hi+12527; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0528; GFX90A-NEXT: s_mov_b32 s14, s10529; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]530; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]531; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]532; GFX90A-NEXT: s_mov_b64 s[0:1], s[20:21]533; GFX90A-NEXT: v_mov_b32_e32 v31, v0534; GFX90A-NEXT: s_mov_b64 s[2:3], s[22:23]535; GFX90A-NEXT: s_mov_b32 s32, 0536; GFX90A-NEXT: ;;#ASMSTART537; GFX90A-NEXT: ; def a[0:31]538; GFX90A-NEXT: ;;#ASMEND539; GFX90A-NEXT: s_waitcnt lgkmcnt(0)540; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]541; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[28:31], off542; GFX90A-NEXT: s_waitcnt vmcnt(0)543; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[24:27], off544; GFX90A-NEXT: s_waitcnt vmcnt(0)545; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[20:23], off546; GFX90A-NEXT: s_waitcnt vmcnt(0)547; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[16:19], off548; GFX90A-NEXT: s_waitcnt vmcnt(0)549; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[12:15], off550; GFX90A-NEXT: s_waitcnt vmcnt(0)551; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[8:11], off552; GFX90A-NEXT: s_waitcnt vmcnt(0)553; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[4:7], off554; GFX90A-NEXT: s_waitcnt vmcnt(0)555; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[0:3], off556; GFX90A-NEXT: s_waitcnt vmcnt(0)557; GFX90A-NEXT: s_endpgm558;559; GFX908-LABEL: test_call_areg64:560; GFX908: ; %bb.0: ; %bb561; GFX908-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0562; GFX908-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1563; GFX908-NEXT: s_mov_b32 s22, -1564; GFX908-NEXT: s_mov_b32 s23, 0xe00000565; GFX908-NEXT: s_add_u32 s20, s20, s11566; GFX908-NEXT: s_addc_u32 s21, s21, 0567; GFX908-NEXT: s_mov_b32 s12, s8568; GFX908-NEXT: s_add_u32 s8, s4, 36569; GFX908-NEXT: s_mov_b32 s13, s9570; GFX908-NEXT: s_addc_u32 s9, s5, 0571; GFX908-NEXT: s_getpc_b64 s[4:5]572; GFX908-NEXT: s_add_u32 s4, s4, func_areg_64@gotpcrel32@lo+4573; GFX908-NEXT: s_addc_u32 s5, s5, func_areg_64@gotpcrel32@hi+12574; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0575; GFX908-NEXT: s_mov_b32 s14, s10576; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]577; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2578; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1579; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]580; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]581; GFX908-NEXT: s_mov_b64 s[0:1], s[20:21]582; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2583; GFX908-NEXT: s_mov_b64 s[2:3], s[22:23]584; GFX908-NEXT: s_mov_b32 s32, 0585; GFX908-NEXT: ;;#ASMSTART586; GFX908-NEXT: ; def a[0:31]587; GFX908-NEXT: ;;#ASMEND588; GFX908-NEXT: v_accvgpr_read_b32 v6, a3589; GFX908-NEXT: v_accvgpr_read_b32 v5, a2590; GFX908-NEXT: v_accvgpr_read_b32 v4, a1591; GFX908-NEXT: v_accvgpr_read_b32 v3, a0592; GFX908-NEXT: v_accvgpr_read_b32 v10, a7593; GFX908-NEXT: v_accvgpr_read_b32 v9, a6594; GFX908-NEXT: v_accvgpr_read_b32 v8, a5595; GFX908-NEXT: v_accvgpr_read_b32 v7, a4596; GFX908-NEXT: v_accvgpr_read_b32 v14, a11597; GFX908-NEXT: v_accvgpr_read_b32 v13, a10598; GFX908-NEXT: v_accvgpr_read_b32 v12, a9599; GFX908-NEXT: v_accvgpr_read_b32 v11, a8600; GFX908-NEXT: v_accvgpr_read_b32 v18, a15601; GFX908-NEXT: v_accvgpr_read_b32 v17, a14602; GFX908-NEXT: v_accvgpr_read_b32 v16, a13603; GFX908-NEXT: v_accvgpr_read_b32 v15, a12604; GFX908-NEXT: v_accvgpr_read_b32 v22, a19605; GFX908-NEXT: v_accvgpr_read_b32 v21, a18606; GFX908-NEXT: v_accvgpr_read_b32 v20, a17607; GFX908-NEXT: v_accvgpr_read_b32 v19, a16608; GFX908-NEXT: v_accvgpr_read_b32 v26, a23609; GFX908-NEXT: v_accvgpr_read_b32 v25, a22610; GFX908-NEXT: v_accvgpr_read_b32 v24, a21611; GFX908-NEXT: v_accvgpr_read_b32 v23, a20612; GFX908-NEXT: v_accvgpr_read_b32 v30, a27613; GFX908-NEXT: v_accvgpr_read_b32 v29, a26614; GFX908-NEXT: v_accvgpr_read_b32 v28, a25615; GFX908-NEXT: v_accvgpr_read_b32 v27, a24616; GFX908-NEXT: v_accvgpr_read_b32 v35, a31617; GFX908-NEXT: v_accvgpr_read_b32 v34, a30618; GFX908-NEXT: v_accvgpr_read_b32 v33, a29619; GFX908-NEXT: v_accvgpr_read_b32 v32, a28620; GFX908-NEXT: s_waitcnt lgkmcnt(0)621; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]622; GFX908-NEXT: global_store_dwordx4 v[0:1], v[32:35], off623; GFX908-NEXT: s_waitcnt vmcnt(0)624; GFX908-NEXT: global_store_dwordx4 v[0:1], v[27:30], off625; GFX908-NEXT: s_waitcnt vmcnt(0)626; GFX908-NEXT: global_store_dwordx4 v[0:1], v[23:26], off627; GFX908-NEXT: s_waitcnt vmcnt(0)628; GFX908-NEXT: global_store_dwordx4 v[0:1], v[19:22], off629; GFX908-NEXT: s_waitcnt vmcnt(0)630; GFX908-NEXT: global_store_dwordx4 v[0:1], v[15:18], off631; GFX908-NEXT: s_waitcnt vmcnt(0)632; GFX908-NEXT: global_store_dwordx4 v[0:1], v[11:14], off633; GFX908-NEXT: s_waitcnt vmcnt(0)634; GFX908-NEXT: global_store_dwordx4 v[0:1], v[7:10], off635; GFX908-NEXT: s_waitcnt vmcnt(0)636; GFX908-NEXT: global_store_dwordx4 v[0:1], v[3:6], off637; GFX908-NEXT: s_waitcnt vmcnt(0)638; GFX908-NEXT: s_endpgm639bb:640 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()641 call void @func_areg_64()642 store volatile <32 x float> %reg, ptr addrspace(1) poison643 ret void644}645 646define amdgpu_kernel void @test_call_areg31_63() #0 {647; GFX90A-LABEL: test_call_areg31_63:648; GFX90A: ; %bb.0: ; %bb649; GFX90A-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0650; GFX90A-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1651; GFX90A-NEXT: s_mov_b32 s22, -1652; GFX90A-NEXT: s_mov_b32 s23, 0xe00000653; GFX90A-NEXT: s_add_u32 s20, s20, s11654; GFX90A-NEXT: s_addc_u32 s21, s21, 0655; GFX90A-NEXT: s_mov_b32 s12, s8656; GFX90A-NEXT: s_add_u32 s8, s4, 36657; GFX90A-NEXT: s_mov_b32 s13, s9658; GFX90A-NEXT: s_addc_u32 s9, s5, 0659; GFX90A-NEXT: s_getpc_b64 s[4:5]660; GFX90A-NEXT: s_add_u32 s4, s4, func_areg_31_63@gotpcrel32@lo+4661; GFX90A-NEXT: s_addc_u32 s5, s5, func_areg_31_63@gotpcrel32@hi+12662; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0663; GFX90A-NEXT: s_mov_b32 s14, s10664; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]665; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]666; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]667; GFX90A-NEXT: s_mov_b64 s[0:1], s[20:21]668; GFX90A-NEXT: v_mov_b32_e32 v31, v0669; GFX90A-NEXT: s_mov_b64 s[2:3], s[22:23]670; GFX90A-NEXT: s_mov_b32 s32, 0671; GFX90A-NEXT: ;;#ASMSTART672; GFX90A-NEXT: ; def a[32:63]673; GFX90A-NEXT: ;;#ASMEND674; GFX90A-NEXT: s_waitcnt lgkmcnt(0)675; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]676; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[60:63], off677; GFX90A-NEXT: s_waitcnt vmcnt(0)678; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[56:59], off679; GFX90A-NEXT: s_waitcnt vmcnt(0)680; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[52:55], off681; GFX90A-NEXT: s_waitcnt vmcnt(0)682; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[48:51], off683; GFX90A-NEXT: s_waitcnt vmcnt(0)684; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[44:47], off685; GFX90A-NEXT: s_waitcnt vmcnt(0)686; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[40:43], off687; GFX90A-NEXT: s_waitcnt vmcnt(0)688; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[36:39], off689; GFX90A-NEXT: s_waitcnt vmcnt(0)690; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[32:35], off691; GFX90A-NEXT: s_waitcnt vmcnt(0)692; GFX90A-NEXT: s_endpgm693;694; GFX908-LABEL: test_call_areg31_63:695; GFX908: ; %bb.0: ; %bb696; GFX908-NEXT: s_mov_b32 s20, SCRATCH_RSRC_DWORD0697; GFX908-NEXT: s_mov_b32 s21, SCRATCH_RSRC_DWORD1698; GFX908-NEXT: s_mov_b32 s22, -1699; GFX908-NEXT: s_mov_b32 s23, 0xe00000700; GFX908-NEXT: s_add_u32 s20, s20, s11701; GFX908-NEXT: s_addc_u32 s21, s21, 0702; GFX908-NEXT: s_mov_b32 s12, s8703; GFX908-NEXT: s_add_u32 s8, s4, 36704; GFX908-NEXT: s_mov_b32 s13, s9705; GFX908-NEXT: s_addc_u32 s9, s5, 0706; GFX908-NEXT: s_getpc_b64 s[4:5]707; GFX908-NEXT: s_add_u32 s4, s4, func_areg_31_63@gotpcrel32@lo+4708; GFX908-NEXT: s_addc_u32 s5, s5, func_areg_31_63@gotpcrel32@hi+12709; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0710; GFX908-NEXT: s_mov_b32 s14, s10711; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]712; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2713; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1714; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]715; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]716; GFX908-NEXT: s_mov_b64 s[0:1], s[20:21]717; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2718; GFX908-NEXT: s_mov_b64 s[2:3], s[22:23]719; GFX908-NEXT: s_mov_b32 s32, 0720; GFX908-NEXT: ;;#ASMSTART721; GFX908-NEXT: ; def a[0:31]722; GFX908-NEXT: ;;#ASMEND723; GFX908-NEXT: v_accvgpr_read_b32 v6, a3724; GFX908-NEXT: v_accvgpr_read_b32 v5, a2725; GFX908-NEXT: v_accvgpr_read_b32 v4, a1726; GFX908-NEXT: v_accvgpr_read_b32 v3, a0727; GFX908-NEXT: v_accvgpr_read_b32 v10, a7728; GFX908-NEXT: v_accvgpr_read_b32 v9, a6729; GFX908-NEXT: v_accvgpr_read_b32 v8, a5730; GFX908-NEXT: v_accvgpr_read_b32 v7, a4731; GFX908-NEXT: v_accvgpr_read_b32 v14, a11732; GFX908-NEXT: v_accvgpr_read_b32 v13, a10733; GFX908-NEXT: v_accvgpr_read_b32 v12, a9734; GFX908-NEXT: v_accvgpr_read_b32 v11, a8735; GFX908-NEXT: v_accvgpr_read_b32 v18, a15736; GFX908-NEXT: v_accvgpr_read_b32 v17, a14737; GFX908-NEXT: v_accvgpr_read_b32 v16, a13738; GFX908-NEXT: v_accvgpr_read_b32 v15, a12739; GFX908-NEXT: v_accvgpr_read_b32 v22, a19740; GFX908-NEXT: v_accvgpr_read_b32 v21, a18741; GFX908-NEXT: v_accvgpr_read_b32 v20, a17742; GFX908-NEXT: v_accvgpr_read_b32 v19, a16743; GFX908-NEXT: v_accvgpr_read_b32 v26, a23744; GFX908-NEXT: v_accvgpr_read_b32 v25, a22745; GFX908-NEXT: v_accvgpr_read_b32 v24, a21746; GFX908-NEXT: v_accvgpr_read_b32 v23, a20747; GFX908-NEXT: v_accvgpr_read_b32 v30, a27748; GFX908-NEXT: v_accvgpr_read_b32 v29, a26749; GFX908-NEXT: v_accvgpr_read_b32 v28, a25750; GFX908-NEXT: v_accvgpr_read_b32 v27, a24751; GFX908-NEXT: v_accvgpr_read_b32 v35, a31752; GFX908-NEXT: v_accvgpr_read_b32 v34, a30753; GFX908-NEXT: v_accvgpr_read_b32 v33, a29754; GFX908-NEXT: v_accvgpr_read_b32 v32, a28755; GFX908-NEXT: s_waitcnt lgkmcnt(0)756; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]757; GFX908-NEXT: global_store_dwordx4 v[0:1], v[32:35], off758; GFX908-NEXT: s_waitcnt vmcnt(0)759; GFX908-NEXT: global_store_dwordx4 v[0:1], v[27:30], off760; GFX908-NEXT: s_waitcnt vmcnt(0)761; GFX908-NEXT: global_store_dwordx4 v[0:1], v[23:26], off762; GFX908-NEXT: s_waitcnt vmcnt(0)763; GFX908-NEXT: global_store_dwordx4 v[0:1], v[19:22], off764; GFX908-NEXT: s_waitcnt vmcnt(0)765; GFX908-NEXT: global_store_dwordx4 v[0:1], v[15:18], off766; GFX908-NEXT: s_waitcnt vmcnt(0)767; GFX908-NEXT: global_store_dwordx4 v[0:1], v[11:14], off768; GFX908-NEXT: s_waitcnt vmcnt(0)769; GFX908-NEXT: global_store_dwordx4 v[0:1], v[7:10], off770; GFX908-NEXT: s_waitcnt vmcnt(0)771; GFX908-NEXT: global_store_dwordx4 v[0:1], v[3:6], off772; GFX908-NEXT: s_waitcnt vmcnt(0)773; GFX908-NEXT: s_endpgm774bb:775 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()776 call void @func_areg_31_63()777 store volatile <32 x float> %reg, ptr addrspace(1) poison778 ret void779}780 781define amdgpu_kernel void @test_call_unknown() #0 {782; GFX90A-LABEL: test_call_unknown:783; GFX90A: ; %bb.0: ; %bb784; GFX90A-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0785; GFX90A-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1786; GFX90A-NEXT: s_mov_b32 s38, -1787; GFX90A-NEXT: s_mov_b32 s39, 0xe00000788; GFX90A-NEXT: s_add_u32 s36, s36, s11789; GFX90A-NEXT: s_addc_u32 s37, s37, 0790; GFX90A-NEXT: s_mov_b32 s12, s8791; GFX90A-NEXT: s_add_u32 s8, s4, 36792; GFX90A-NEXT: s_mov_b32 s13, s9793; GFX90A-NEXT: s_addc_u32 s9, s5, 0794; GFX90A-NEXT: s_getpc_b64 s[4:5]795; GFX90A-NEXT: s_add_u32 s4, s4, func_unknown@gotpcrel32@lo+4796; GFX90A-NEXT: s_addc_u32 s5, s5, func_unknown@gotpcrel32@hi+12797; GFX90A-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0798; GFX90A-NEXT: s_mov_b32 s14, s10799; GFX90A-NEXT: s_mov_b64 s[10:11], s[6:7]800; GFX90A-NEXT: s_mov_b64 s[4:5], s[0:1]801; GFX90A-NEXT: s_mov_b64 s[6:7], s[2:3]802; GFX90A-NEXT: s_mov_b64 s[0:1], s[36:37]803; GFX90A-NEXT: v_mov_b32_e32 v31, v0804; GFX90A-NEXT: s_mov_b64 s[2:3], s[38:39]805; GFX90A-NEXT: s_mov_b32 s32, 0806; GFX90A-NEXT: ;;#ASMSTART807; GFX90A-NEXT: ; def a[32:63]808; GFX90A-NEXT: ;;#ASMEND809; GFX90A-NEXT: s_waitcnt lgkmcnt(0)810; GFX90A-NEXT: s_swappc_b64 s[30:31], s[16:17]811; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[60:63], off812; GFX90A-NEXT: s_waitcnt vmcnt(0)813; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[56:59], off814; GFX90A-NEXT: s_waitcnt vmcnt(0)815; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[52:55], off816; GFX90A-NEXT: s_waitcnt vmcnt(0)817; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[48:51], off818; GFX90A-NEXT: s_waitcnt vmcnt(0)819; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[44:47], off820; GFX90A-NEXT: s_waitcnt vmcnt(0)821; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[40:43], off822; GFX90A-NEXT: s_waitcnt vmcnt(0)823; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[36:39], off824; GFX90A-NEXT: s_waitcnt vmcnt(0)825; GFX90A-NEXT: global_store_dwordx4 v[0:1], a[32:35], off826; GFX90A-NEXT: s_waitcnt vmcnt(0)827; GFX90A-NEXT: s_endpgm828;829; GFX908-LABEL: test_call_unknown:830; GFX908: ; %bb.0: ; %bb831; GFX908-NEXT: s_mov_b32 s36, SCRATCH_RSRC_DWORD0832; GFX908-NEXT: s_mov_b32 s37, SCRATCH_RSRC_DWORD1833; GFX908-NEXT: s_mov_b32 s38, -1834; GFX908-NEXT: s_mov_b32 s39, 0xe00000835; GFX908-NEXT: s_add_u32 s36, s36, s11836; GFX908-NEXT: s_addc_u32 s37, s37, 0837; GFX908-NEXT: s_mov_b32 s12, s8838; GFX908-NEXT: s_add_u32 s8, s4, 36839; GFX908-NEXT: s_mov_b32 s13, s9840; GFX908-NEXT: s_addc_u32 s9, s5, 0841; GFX908-NEXT: s_getpc_b64 s[4:5]842; GFX908-NEXT: s_add_u32 s4, s4, func_unknown@gotpcrel32@lo+4843; GFX908-NEXT: s_addc_u32 s5, s5, func_unknown@gotpcrel32@hi+12844; GFX908-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x0845; GFX908-NEXT: s_mov_b32 s14, s10846; GFX908-NEXT: s_mov_b64 s[10:11], s[6:7]847; GFX908-NEXT: v_lshlrev_b32_e32 v2, 20, v2848; GFX908-NEXT: v_lshlrev_b32_e32 v1, 10, v1849; GFX908-NEXT: s_mov_b64 s[4:5], s[0:1]850; GFX908-NEXT: s_mov_b64 s[6:7], s[2:3]851; GFX908-NEXT: s_mov_b64 s[0:1], s[36:37]852; GFX908-NEXT: v_or3_b32 v31, v0, v1, v2853; GFX908-NEXT: s_mov_b64 s[2:3], s[38:39]854; GFX908-NEXT: s_mov_b32 s32, 0855; GFX908-NEXT: ;;#ASMSTART856; GFX908-NEXT: ; def a[0:31]857; GFX908-NEXT: ;;#ASMEND858; GFX908-NEXT: v_accvgpr_read_b32 v43, a3859; GFX908-NEXT: v_accvgpr_read_b32 v42, a2860; GFX908-NEXT: v_accvgpr_read_b32 v41, a1861; GFX908-NEXT: v_accvgpr_read_b32 v40, a0862; GFX908-NEXT: v_accvgpr_read_b32 v47, a7863; GFX908-NEXT: v_accvgpr_read_b32 v46, a6864; GFX908-NEXT: v_accvgpr_read_b32 v45, a5865; GFX908-NEXT: v_accvgpr_read_b32 v44, a4866; GFX908-NEXT: v_accvgpr_read_b32 v59, a11867; GFX908-NEXT: v_accvgpr_read_b32 v58, a10868; GFX908-NEXT: v_accvgpr_read_b32 v57, a9869; GFX908-NEXT: v_accvgpr_read_b32 v56, a8870; GFX908-NEXT: v_accvgpr_read_b32 v63, a15871; GFX908-NEXT: v_accvgpr_read_b32 v62, a14872; GFX908-NEXT: v_accvgpr_read_b32 v61, a13873; GFX908-NEXT: v_accvgpr_read_b32 v60, a12874; GFX908-NEXT: v_accvgpr_read_b32 v75, a19875; GFX908-NEXT: v_accvgpr_read_b32 v74, a18876; GFX908-NEXT: v_accvgpr_read_b32 v73, a17877; GFX908-NEXT: v_accvgpr_read_b32 v72, a16878; GFX908-NEXT: v_accvgpr_read_b32 v79, a23879; GFX908-NEXT: v_accvgpr_read_b32 v78, a22880; GFX908-NEXT: v_accvgpr_read_b32 v77, a21881; GFX908-NEXT: v_accvgpr_read_b32 v76, a20882; GFX908-NEXT: v_accvgpr_read_b32 v91, a27883; GFX908-NEXT: v_accvgpr_read_b32 v90, a26884; GFX908-NEXT: v_accvgpr_read_b32 v89, a25885; GFX908-NEXT: v_accvgpr_read_b32 v88, a24886; GFX908-NEXT: v_accvgpr_read_b32 v95, a31887; GFX908-NEXT: v_accvgpr_read_b32 v94, a30888; GFX908-NEXT: v_accvgpr_read_b32 v93, a29889; GFX908-NEXT: v_accvgpr_read_b32 v92, a28890; GFX908-NEXT: s_waitcnt lgkmcnt(0)891; GFX908-NEXT: s_swappc_b64 s[30:31], s[16:17]892; GFX908-NEXT: global_store_dwordx4 v[0:1], v[92:95], off893; GFX908-NEXT: s_waitcnt vmcnt(0)894; GFX908-NEXT: global_store_dwordx4 v[0:1], v[88:91], off895; GFX908-NEXT: s_waitcnt vmcnt(0)896; GFX908-NEXT: global_store_dwordx4 v[0:1], v[76:79], off897; GFX908-NEXT: s_waitcnt vmcnt(0)898; GFX908-NEXT: global_store_dwordx4 v[0:1], v[72:75], off899; GFX908-NEXT: s_waitcnt vmcnt(0)900; GFX908-NEXT: global_store_dwordx4 v[0:1], v[60:63], off901; GFX908-NEXT: s_waitcnt vmcnt(0)902; GFX908-NEXT: global_store_dwordx4 v[0:1], v[56:59], off903; GFX908-NEXT: s_waitcnt vmcnt(0)904; GFX908-NEXT: global_store_dwordx4 v[0:1], v[44:47], off905; GFX908-NEXT: s_waitcnt vmcnt(0)906; GFX908-NEXT: global_store_dwordx4 v[0:1], v[40:43], off907; GFX908-NEXT: s_waitcnt vmcnt(0)908; GFX908-NEXT: s_endpgm909bb:910 %reg = call <32 x float> asm sideeffect "; def $0", "=a"()911 call void @func_unknown()912 store volatile <32 x float> %reg, ptr addrspace(1) poison913 ret void914}915 916attributes #0 = { nounwind noinline "amdgpu-flat-work-group-size"="1,512" }917