1; RUN: llc -march=amdgcn -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck --check-prefixes=GCN,GFX90A %s 2 3; GCN-LABEL: {{^}}func_empty: 4; GCN-NOT: buffer_ 5; GCN-NOT: v_accvgpr 6; GCN: s_setpc_b64 7define void @func_empty() #0 { 8 ret void 9} 10 11; GCN-LABEL: {{^}}func_areg_4: 12; GCN-NOT: buffer_ 13; GCN-NOT: v_accvgpr 14; GCN: use agpr3 15; GCN-NOT: buffer_ 16; GCN-NOT: v_accvgpr 17; GCN: s_setpc_b64 18define void @func_areg_4() #0 { 19 call void asm sideeffect "; use agpr3", "~{a3}" () 20 ret void 21} 22 23; GCN-LABEL: {{^}}func_areg_32: 24; GCN-NOT: buffer_ 25; GCN-NOT: v_accvgpr 26; GCN: use agpr31 27; GCN-NOT: buffer_ 28; GCN-NOT: v_accvgpr 29; GCN: s_setpc_b64 30define void @func_areg_32() #0 { 31 call void asm sideeffect "; use agpr31", "~{a31}" () 32 ret void 33} 34 35; GCN-LABEL: {{^}}func_areg_33: 36; GFX908-NOT: buffer_ 37; GCN-NOT: v_accvgpr 38; GCN: use agpr32 39; GFX908-NOT: buffer_ 40; GCN-NOT: v_accvgpr 41; GCN: s_setpc_b64 42define void @func_areg_33() #0 { 43 call void asm sideeffect "; use agpr32", "~{a32}" () 44 ret void 45} 46 47; GCN-LABEL: {{^}}func_areg_64: 48; GFX908-NOT: buffer_ 49; GCN-NOT: v_accvgpr 50; GFX90A: buffer_store_dword a63, 51; GCN: use agpr63 52; GFX90A: buffer_load_dword a63, 53; GCN-NOT: v_accvgpr 54; GCN: s_setpc_b64 55define void @func_areg_64() #0 { 56 call void asm sideeffect "; use agpr63", "~{a63}" () 57 ret void 58} 59 60; GCN-LABEL: {{^}}func_areg_31_63: 61; GFX908-NOT: buffer_ 62; GCN-NOT: v_accvgpr 63; GFX90A: buffer_store_dword a63, 64; GCN: use agpr31, agpr63 65; GFX90A: buffer_load_dword a63, 66; GCN-NOT: buffer_ 67; GCN-NOT: v_accvgpr 68; GCN: s_setpc_b64 69define void @func_areg_31_63() #0 { 70 call void asm sideeffect "; use agpr31, agpr63", "~{a31},~{a63}" () 71 ret void 72} 73 74declare void @func_unknown() #0 75 76; GCN-LABEL: {{^}}test_call_empty: 77; GCN-NOT: buffer_ 78; GCN-NOT: v_accvgpr 79; GCN: def a[0:31] 80; GFX908-COUNT-8: v_accvgpr_read_b32 81; GFX90A-NOT: v_accvgpr 82; GCN-NOT: buffer_ 83; GCN: s_swappc_b64 84; GCN-NOT: buffer_ 85; GFX90A-NOT: v_accvgpr 86; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 87; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 88; GCN: s_endpgm 89define amdgpu_kernel void @test_call_empty() #0 { 90bb: 91 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 92 call void @func_empty() 93 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 94 ret void 95} 96 97; GCN-LABEL: {{^}}test_call_areg4: 98; GCN-NOT: buffer_ 99; GCN-NOT: v_accvgpr 100; GFX908: def a[0:31] 101; GFX90A: def a[4:35] 102; GFX908-COUNT-8: v_accvgpr_read_b32 103; GFX90A-NOT: v_accvgpr 104; GCN-NOT: buffer_ 105; GCN: s_swappc_b64 106; GCN-NOT: buffer_ 107; GFX90A-NOT: v_accvgpr 108; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 109; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 110; GCN: s_endpgm 111define amdgpu_kernel void @test_call_areg4() #0 { 112bb: 113 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 114 call void @func_areg_4() 115 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 116 ret void 117} 118 119; GCN-LABEL: {{^}}test_call_areg32: 120; GCN-NOT: buffer_ 121; GCN-NOT: v_accvgpr 122; GFX908: def a[0:31] 123; GFX90A: def a[32:63] 124; GFX908-COUNT-8: v_accvgpr_read_b32 125; GFX90A-NOT: v_accvgpr 126; GCN-NOT: buffer_ 127; GCN: s_swappc_b64 128; GCN-NOT: buffer_ 129; GFX90A-NOT: v_accvgpr 130; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 131; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 132; GCN: s_endpgm 133define amdgpu_kernel void @test_call_areg32() #0 { 134bb: 135 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 136 call void @func_areg_32() 137 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 138 ret void 139} 140 141; GCN-LABEL: {{^}}test_call_areg64: 142; GCN-NOT: buffer_ 143; GCN-NOT: v_accvgpr 144; GCN: def a[0:31] 145; GFX908-COUNT-8: v_accvgpr_read_b32 146; GFX90A-NOT: v_accvgpr 147; GCN-NOT: buffer_ 148; GCN: s_swappc_b64 149; GCN-NOT: buffer_ 150; GFX90A-NOT: v_accvgpr 151; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 152; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 153; GCN: s_endpgm 154define amdgpu_kernel void @test_call_areg64() #0 { 155bb: 156 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 157 call void @func_areg_64() 158 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 159 ret void 160} 161 162; GCN-LABEL: {{^}}test_call_areg31_63: 163; GCN-NOT: buffer_ 164; GCN-NOT: v_accvgpr 165; GFX908: def a[0:31] 166; GFX90A: def a[32:63] 167; GFX908-COUNT-8: v_accvgpr_read_b32 168; GFX90A-NOT: v_accvgpr 169; GCN-NOT: buffer_ 170; GCN: s_swappc_b64 171; GCN-NOT: buffer_ 172; GFX90A-NOT: v_accvgpr 173; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 174; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 175; GCN: s_endpgm 176define amdgpu_kernel void @test_call_areg31_63() #0 { 177bb: 178 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 179 call void @func_areg_31_63() 180 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 181 ret void 182} 183 184; GCN-LABEL: {{^}}test_call_unknown: 185; GCN-NOT: buffer_ 186; GCN-NOT: v_accvgpr 187; GFX908: def a[0:31] 188; GFX90A: def a[32:63] 189; GFX908-COUNT-8: v_accvgpr_read_b32 190; GFX90A-NOT: v_accvgpr 191; GCN-NOT: buffer_ 192; GCN: s_swappc_b64 193; GCN-NOT: buffer_ 194; GFX90A-NOT: v_accvgpr 195; GFX908-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], v[{{[0-9:]+}}] 196; GFX90A-COUNT-8: global_store_dwordx4 v[{{[0-9:]+}}], a[{{[0-9:]+}}] 197; GCN: s_endpgm 198define amdgpu_kernel void @test_call_unknown() #0 { 199bb: 200 %reg = call <32 x float> asm sideeffect "; def $0", "=a"() 201 call void @func_unknown() 202 store volatile <32 x float> %reg, <32 x float> addrspace(1)* undef 203 ret void 204} 205 206attributes #0 = { nounwind noinline "amdgpu-flat-work-group-size"="1,512" } 207