1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2; RUN: llc -global-isel -amdgpu-fixed-function-abi -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -stop-after=irtranslator -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 3 4declare i1 @external_i1_func_void() #0 5declare zeroext i1 @external_i1_zeroext_func_void() #0 6declare signext i1 @external_i1_signext_func_void() #0 7 8declare i8 @external_i8_func_void() #0 9declare zeroext i8 @external_i8_zeroext_func_void() #0 10declare signext i8 @external_i8_signext_func_void() #0 11 12declare i16 @external_i16_func_void() #0 13declare <2 x i16> @external_v2i16_func_void() #0 14declare <3 x i16> @external_v3i16_func_void() #0 15declare <4 x i16> @external_v4i16_func_void() #0 16declare zeroext i16 @external_i16_zeroext_func_void() #0 17declare signext i16 @external_i16_signext_func_void() #0 18 19declare i48 @external_i48_func_void() #0 20declare zeroext i48 @external_i48_zeroext_func_void() #0 21declare signext i48 @external_i48_signext_func_void() #0 22 23declare i32 @external_i32_func_void() #0 24declare i64 @external_i64_func_void() #0 25declare half @external_f16_func_void() #0 26declare float @external_f32_func_void() #0 27declare double @external_f64_func_void() #0 28 29declare i8 addrspace(1)* @external_p1_func_void() #0 30declare <2 x i8 addrspace(1)*> @external_v2p1_func_void() #0 31 32declare i8 addrspace(3)* @external_p3_func_void() #0 33declare <2 x i8 addrspace(3)*> @external_v2p3_func_void() #0 34 35declare <2 x half> @external_v2f16_func_void() #0 36declare <3 x half> @external_v3f16_func_void() #0 37declare <4 x half> @external_v4f16_func_void() #0 38declare <3 x float> @external_v3f32_func_void() #0 39declare <5 x float> @external_v5f32_func_void() #0 40declare <2 x double> @external_v2f64_func_void() #0 41 42declare <2 x i32> @external_v2i32_func_void() #0 43declare <3 x i32> @external_v3i32_func_void() #0 44declare <4 x i32> @external_v4i32_func_void() #0 45declare <5 x i32> @external_v5i32_func_void() #0 46declare <8 x i32> @external_v8i32_func_void() #0 47declare <16 x i32> @external_v16i32_func_void() #0 48declare <32 x i32> @external_v32i32_func_void() #0 49declare <33 x i32> @external_v33i32_func_void() #0 50declare <33 x i32> @external_v33i32_func_v33i32_i32(<33 x i32> addrspace(1)*, i32) #0 51declare { <32 x i32>, i32 } @external_v32i32_i32_func_void() #0 52declare { i32, <32 x i32> } @external_i32_v32i32_func_void() #0 53 54declare { i32, i64 } @external_i32_i64_func_void() #0 55 56declare [2 x i32] @external_a2i32_func_void() #0 57declare [5 x i8] @external_a5i8_func_void() #0 58 59; return value and argument 60declare hidden i32 @external_i32_func_i32(i32) #0 61 62; amdgpu_gfx calling convention 63declare i1 @external_gfx_i1_func_void() #0 64declare i8 @external_gfx_i8_func_void() #0 65declare i32 @external_gfx_i32_func_void() #0 66declare { i32, i64 } @external_gfx_i32_i64_func_void() #0 67declare hidden i32 @external_gfx_i32_func_i32(i32) #0 68 69 70define amdgpu_kernel void @test_call_external_i32_func_i32_imm(i32 addrspace(1)* %out) #0 { 71 ; GCN-LABEL: name: test_call_external_i32_func_i32_imm 72 ; GCN: bb.1 (%ir-block.0): 73 ; GCN-NEXT: liveins: $sgpr14, $sgpr15, $sgpr16, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11 74 ; GCN-NEXT: {{ $}} 75 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 76 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 77 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 78 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr16 79 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr15 80 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr14 81 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr10_sgpr11 82 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 83 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 84 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9 85 ; GCN-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 86 ; GCN-NEXT: [[INT:%[0-9]+]]:_(p4) = G_INTRINSIC intrinsic(@llvm.amdgcn.kernarg.segment.ptr) 87 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(p1) = G_LOAD [[INT]](p4) :: (dereferenceable invariant load (p1) from %ir.out.kernarg.offset.cast, align 16, addrspace 4) 88 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 89 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i32_func_i32 90 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY8]] 91 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY7]] 92 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(p4) = COPY [[COPY9]](p4) 93 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 94 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY12]], [[C1]](s64) 95 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s64) = COPY [[COPY6]] 96 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY5]] 97 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY4]] 98 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY3]] 99 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 100 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 101 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 102 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY18]], [[C2]](s32) 103 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY17]], [[SHL]] 104 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 105 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 106 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY19]], [[C3]](s32) 107 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 108 ; GCN-NEXT: $vgpr0 = COPY [[C]](s32) 109 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 110 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY20]](<4 x s32>) 111 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY10]](p4) 112 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY11]](p4) 113 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 114 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY13]](s64) 115 ; GCN-NEXT: $sgpr12 = COPY [[COPY14]](s32) 116 ; GCN-NEXT: $sgpr13 = COPY [[COPY15]](s32) 117 ; GCN-NEXT: $sgpr14 = COPY [[COPY16]](s32) 118 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 119 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i32_func_i32, csr_amdgpu_highregs, implicit $vgpr0, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 120 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr0 121 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 122 ; GCN-NEXT: G_STORE [[COPY21]](s32), [[LOAD]](p1) :: (volatile store (s32) into %ir.out.load, addrspace 1) 123 ; GCN-NEXT: S_ENDPGM 0 124 %val = call i32 @external_i32_func_i32(i32 42) 125 store volatile i32 %val, i32 addrspace(1)* %out 126 ret void 127} 128 129define amdgpu_gfx void @test_gfx_call_external_i32_func_i32_imm(i32 addrspace(1)* %out) #0 { 130 ; GCN-LABEL: name: test_gfx_call_external_i32_func_i32_imm 131 ; GCN: bb.1 (%ir-block.0): 132 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 133 ; GCN-NEXT: {{ $}} 134 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 135 ; GCN-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 136 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32) 137 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31 138 ; GCN-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 139 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 140 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_gfx_i32_func_i32 141 ; GCN-NEXT: $vgpr0 = COPY [[C]](s32) 142 ; GCN-NEXT: [[COPY3:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 143 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY3]](<4 x s32>) 144 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_gfx_i32_func_i32, csr_amdgpu_highregs, implicit $vgpr0, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $vgpr0 145 ; GCN-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr0 146 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 147 ; GCN-NEXT: G_STORE [[COPY4]](s32), [[MV]](p1) :: (volatile store (s32) into %ir.out, addrspace 1) 148 ; GCN-NEXT: [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]] 149 ; GCN-NEXT: S_SETPC_B64_return [[COPY5]] 150 %val = call amdgpu_gfx i32 @external_gfx_i32_func_i32(i32 42) 151 store volatile i32 %val, i32 addrspace(1)* %out 152 ret void 153} 154 155define amdgpu_kernel void @test_call_external_i1_func_void() #0 { 156 ; GCN-LABEL: name: test_call_external_i1_func_void 157 ; GCN: bb.1 (%ir-block.0): 158 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 159 ; GCN-NEXT: {{ $}} 160 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 161 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 162 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 163 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 164 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 165 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 166 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 167 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 168 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 169 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 170 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 171 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i1_func_void 172 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 173 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 174 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 175 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 176 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 177 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 178 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 179 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 180 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 181 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 182 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 183 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 184 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 185 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 186 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 187 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 188 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 189 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 190 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 191 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 192 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 193 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 194 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 195 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 196 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 197 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 198 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 199 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 200 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i1_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 201 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 202 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY19]](s32) 203 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 204 ; GCN-NEXT: G_STORE [[TRUNC]](s1), [[DEF]](p1) :: (volatile store (s1) into `i1 addrspace(1)* undef`, addrspace 1) 205 ; GCN-NEXT: S_ENDPGM 0 206 %val = call i1 @external_i1_func_void() 207 store volatile i1 %val, i1 addrspace(1)* undef 208 ret void 209} 210 211define amdgpu_gfx void @test_gfx_call_external_i1_func_void() #0 { 212 ; GCN-LABEL: name: test_gfx_call_external_i1_func_void 213 ; GCN: bb.1 (%ir-block.0): 214 ; GCN-NEXT: liveins: $sgpr30_sgpr31 215 ; GCN-NEXT: {{ $}} 216 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31 217 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 218 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 219 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_gfx_i1_func_void 220 ; GCN-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 221 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY1]](<4 x s32>) 222 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_gfx_i1_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $vgpr0 223 ; GCN-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr0 224 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY2]](s32) 225 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 226 ; GCN-NEXT: G_STORE [[TRUNC]](s1), [[DEF]](p1) :: (volatile store (s1) into `i1 addrspace(1)* undef`, addrspace 1) 227 ; GCN-NEXT: [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY]] 228 ; GCN-NEXT: S_SETPC_B64_return [[COPY3]] 229 %val = call amdgpu_gfx i1 @external_gfx_i1_func_void() 230 store volatile i1 %val, i1 addrspace(1)* undef 231 ret void 232} 233 234define amdgpu_kernel void @test_call_external_i1_zeroext_func_void() #0 { 235 ; GCN-LABEL: name: test_call_external_i1_zeroext_func_void 236 ; GCN: bb.1 (%ir-block.0): 237 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 238 ; GCN-NEXT: {{ $}} 239 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 240 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 241 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 242 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 243 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 244 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 245 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 246 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 247 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 248 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 249 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 250 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i1_zeroext_func_void 251 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 252 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 253 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 254 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 255 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 256 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 257 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 258 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 259 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 260 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 261 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 262 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 263 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 264 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 265 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 266 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 267 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 268 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 269 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 270 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 271 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 272 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 273 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 274 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 275 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 276 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 277 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 278 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 279 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i1_zeroext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 280 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 281 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY19]](s32) 282 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 283 ; GCN-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s1) 284 ; GCN-NEXT: G_STORE [[ZEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 285 ; GCN-NEXT: S_ENDPGM 0 286 %val = call i1 @external_i1_zeroext_func_void() 287 %val.ext = zext i1 %val to i32 288 store volatile i32 %val.ext, i32 addrspace(1)* undef 289 ret void 290} 291 292define amdgpu_kernel void @test_call_external_i1_signext_func_void() #0 { 293 ; GCN-LABEL: name: test_call_external_i1_signext_func_void 294 ; GCN: bb.1 (%ir-block.0): 295 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 296 ; GCN-NEXT: {{ $}} 297 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 298 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 299 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 300 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 301 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 302 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 303 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 304 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 305 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 306 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 307 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 308 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i1_signext_func_void 309 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 310 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 311 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 312 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 313 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 314 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 315 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 316 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 317 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 318 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 319 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 320 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 321 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 322 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 323 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 324 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 325 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 326 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 327 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 328 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 329 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 330 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 331 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 332 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 333 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 334 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 335 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 336 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 337 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i1_signext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 338 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 339 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY19]](s32) 340 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 341 ; GCN-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s1) 342 ; GCN-NEXT: G_STORE [[SEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 343 ; GCN-NEXT: S_ENDPGM 0 344 %val = call i1 @external_i1_signext_func_void() 345 %val.ext = sext i1 %val to i32 346 store volatile i32 %val.ext, i32 addrspace(1)* undef 347 ret void 348} 349 350define amdgpu_kernel void @test_call_external_i8_func_void() #0 { 351 ; GCN-LABEL: name: test_call_external_i8_func_void 352 ; GCN: bb.1 (%ir-block.0): 353 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 354 ; GCN-NEXT: {{ $}} 355 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 356 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 357 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 358 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 359 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 360 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 361 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 362 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 363 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 364 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 365 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 366 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i8_func_void 367 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 368 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 369 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 370 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 371 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 372 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 373 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 374 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 375 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 376 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 377 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 378 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 379 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 380 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 381 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 382 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 383 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 384 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 385 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 386 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 387 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 388 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 389 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 390 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 391 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 392 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 393 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 394 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 395 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i8_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 396 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 397 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 398 ; GCN-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 399 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 400 ; GCN-NEXT: G_STORE [[TRUNC1]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 401 ; GCN-NEXT: S_ENDPGM 0 402 %val = call i8 @external_i8_func_void() 403 store volatile i8 %val, i8 addrspace(1)* undef 404 ret void 405} 406 407define amdgpu_gfx void @test_gfx_call_external_i8_func_void() #0 { 408 ; GCN-LABEL: name: test_gfx_call_external_i8_func_void 409 ; GCN: bb.1 (%ir-block.0): 410 ; GCN-NEXT: liveins: $sgpr30_sgpr31 411 ; GCN-NEXT: {{ $}} 412 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31 413 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 414 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 415 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_gfx_i8_func_void 416 ; GCN-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 417 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY1]](<4 x s32>) 418 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_gfx_i8_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $vgpr0 419 ; GCN-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr0 420 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 421 ; GCN-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 422 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 423 ; GCN-NEXT: G_STORE [[TRUNC1]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 424 ; GCN-NEXT: [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY]] 425 ; GCN-NEXT: S_SETPC_B64_return [[COPY3]] 426 %val = call amdgpu_gfx i8 @external_gfx_i8_func_void() 427 store volatile i8 %val, i8 addrspace(1)* undef 428 ret void 429} 430 431define amdgpu_kernel void @test_call_external_i8_zeroext_func_void() #0 { 432 ; GCN-LABEL: name: test_call_external_i8_zeroext_func_void 433 ; GCN: bb.1 (%ir-block.0): 434 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 435 ; GCN-NEXT: {{ $}} 436 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 437 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 438 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 439 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 440 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 441 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 442 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 443 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 444 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 445 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 446 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 447 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i8_zeroext_func_void 448 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 449 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 450 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 451 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 452 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 453 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 454 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 455 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 456 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 457 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 458 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 459 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 460 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 461 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 462 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 463 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 464 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 465 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 466 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 467 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 468 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 469 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 470 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 471 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 472 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 473 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 474 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 475 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 476 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i8_zeroext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 477 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 478 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 479 ; GCN-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 480 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 481 ; GCN-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC1]](s8) 482 ; GCN-NEXT: G_STORE [[ZEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 483 ; GCN-NEXT: S_ENDPGM 0 484 %val = call i8 @external_i8_zeroext_func_void() 485 %val.ext = zext i8 %val to i32 486 store volatile i32 %val.ext, i32 addrspace(1)* undef 487 ret void 488} 489 490define amdgpu_kernel void @test_call_external_i8_signext_func_void() #0 { 491 ; GCN-LABEL: name: test_call_external_i8_signext_func_void 492 ; GCN: bb.1 (%ir-block.0): 493 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 494 ; GCN-NEXT: {{ $}} 495 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 496 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 497 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 498 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 499 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 500 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 501 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 502 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 503 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 504 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 505 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 506 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i8_signext_func_void 507 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 508 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 509 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 510 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 511 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 512 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 513 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 514 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 515 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 516 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 517 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 518 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 519 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 520 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 521 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 522 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 523 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 524 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 525 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 526 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 527 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 528 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 529 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 530 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 531 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 532 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 533 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 534 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 535 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i8_signext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 536 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 537 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 538 ; GCN-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 539 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 540 ; GCN-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC1]](s8) 541 ; GCN-NEXT: G_STORE [[SEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 542 ; GCN-NEXT: S_ENDPGM 0 543 %val = call i8 @external_i8_signext_func_void() 544 %val.ext = sext i8 %val to i32 545 store volatile i32 %val.ext, i32 addrspace(1)* undef 546 ret void 547} 548 549define amdgpu_kernel void @test_call_external_i16_func_void() #0 { 550 ; GCN-LABEL: name: test_call_external_i16_func_void 551 ; GCN: bb.1 (%ir-block.0): 552 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 553 ; GCN-NEXT: {{ $}} 554 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 555 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 556 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 557 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 558 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 559 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 560 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 561 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 562 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 563 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 564 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 565 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i16_func_void 566 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 567 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 568 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 569 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 570 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 571 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 572 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 573 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 574 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 575 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 576 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 577 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 578 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 579 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 580 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 581 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 582 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 583 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 584 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 585 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 586 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 587 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 588 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 589 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 590 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 591 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 592 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 593 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 594 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 595 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 596 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 597 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 598 ; GCN-NEXT: G_STORE [[TRUNC]](s16), [[DEF]](p1) :: (volatile store (s16) into `i16 addrspace(1)* undef`, addrspace 1) 599 ; GCN-NEXT: S_ENDPGM 0 600 %val = call i16 @external_i16_func_void() 601 store volatile i16 %val, i16 addrspace(1)* undef 602 ret void 603} 604 605define amdgpu_kernel void @test_call_external_i16_zeroext_func_void() #0 { 606 ; GCN-LABEL: name: test_call_external_i16_zeroext_func_void 607 ; GCN: bb.1 (%ir-block.0): 608 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 609 ; GCN-NEXT: {{ $}} 610 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 611 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 612 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 613 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 614 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 615 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 616 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 617 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 618 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 619 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 620 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 621 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i16_zeroext_func_void 622 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 623 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 624 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 625 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 626 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 627 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 628 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 629 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 630 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 631 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 632 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 633 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 634 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 635 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 636 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 637 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 638 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 639 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 640 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 641 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 642 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 643 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 644 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 645 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 646 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 647 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 648 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 649 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 650 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i16_zeroext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 651 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 652 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 653 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 654 ; GCN-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16) 655 ; GCN-NEXT: G_STORE [[ZEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 656 ; GCN-NEXT: S_ENDPGM 0 657 %val = call i16 @external_i16_zeroext_func_void() 658 %val.ext = zext i16 %val to i32 659 store volatile i32 %val.ext, i32 addrspace(1)* undef 660 ret void 661} 662 663define amdgpu_kernel void @test_call_external_i16_signext_func_void() #0 { 664 ; GCN-LABEL: name: test_call_external_i16_signext_func_void 665 ; GCN: bb.1 (%ir-block.0): 666 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 667 ; GCN-NEXT: {{ $}} 668 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 669 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 670 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 671 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 672 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 673 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 674 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 675 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 676 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 677 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 678 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 679 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i16_signext_func_void 680 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 681 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 682 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 683 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 684 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 685 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 686 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 687 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 688 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 689 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 690 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 691 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 692 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 693 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 694 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 695 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 696 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 697 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 698 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 699 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 700 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 701 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 702 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 703 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 704 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 705 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 706 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 707 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 708 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i16_signext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 709 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 710 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 711 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 712 ; GCN-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s16) 713 ; GCN-NEXT: G_STORE [[SEXT]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 714 ; GCN-NEXT: S_ENDPGM 0 715 %val = call i16 @external_i16_signext_func_void() 716 %val.ext = sext i16 %val to i32 717 store volatile i32 %val.ext, i32 addrspace(1)* undef 718 ret void 719} 720 721define amdgpu_kernel void @test_call_external_i32_func_void() #0 { 722 ; GCN-LABEL: name: test_call_external_i32_func_void 723 ; GCN: bb.1 (%ir-block.0): 724 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 725 ; GCN-NEXT: {{ $}} 726 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 727 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 728 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 729 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 730 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 731 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 732 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 733 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 734 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 735 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 736 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 737 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i32_func_void 738 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 739 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 740 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 741 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 742 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 743 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 744 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 745 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 746 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 747 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 748 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 749 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 750 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 751 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 752 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 753 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 754 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 755 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 756 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 757 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 758 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 759 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 760 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 761 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 762 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 763 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 764 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 765 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 766 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 767 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 768 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 769 ; GCN-NEXT: G_STORE [[COPY19]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 770 ; GCN-NEXT: S_ENDPGM 0 771 %val = call i32 @external_i32_func_void() 772 store volatile i32 %val, i32 addrspace(1)* undef 773 ret void 774} 775 776define amdgpu_gfx void @test_gfx_call_external_i32_func_void() #0 { 777 ; GCN-LABEL: name: test_gfx_call_external_i32_func_void 778 ; GCN: bb.1 (%ir-block.0): 779 ; GCN-NEXT: liveins: $sgpr30_sgpr31 780 ; GCN-NEXT: {{ $}} 781 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31 782 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 783 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 784 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_gfx_i32_func_void 785 ; GCN-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 786 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY1]](<4 x s32>) 787 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_gfx_i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $vgpr0 788 ; GCN-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr0 789 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 790 ; GCN-NEXT: G_STORE [[COPY2]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 791 ; GCN-NEXT: [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY]] 792 ; GCN-NEXT: S_SETPC_B64_return [[COPY3]] 793 %val = call amdgpu_gfx i32 @external_gfx_i32_func_void() 794 store volatile i32 %val, i32 addrspace(1)* undef 795 ret void 796} 797 798define amdgpu_kernel void @test_call_external_i48_func_void() #0 { 799 ; GCN-LABEL: name: test_call_external_i48_func_void 800 ; GCN: bb.1 (%ir-block.0): 801 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 802 ; GCN-NEXT: {{ $}} 803 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 804 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 805 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 806 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 807 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 808 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 809 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 810 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 811 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 812 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 813 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 814 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i48_func_void 815 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 816 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 817 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 818 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 819 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 820 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 821 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 822 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 823 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 824 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 825 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 826 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 827 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 828 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 829 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 830 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 831 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 832 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 833 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 834 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 835 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 836 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 837 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 838 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 839 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 840 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 841 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 842 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 843 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i48_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 844 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 845 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 846 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 847 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64) 848 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 849 ; GCN-NEXT: G_STORE [[TRUNC]](s48), [[DEF]](p1) :: (volatile store (s48) into `i48 addrspace(1)* undef`, align 8, addrspace 1) 850 ; GCN-NEXT: S_ENDPGM 0 851 %val = call i48 @external_i48_func_void() 852 store volatile i48 %val, i48 addrspace(1)* undef 853 ret void 854} 855 856define amdgpu_kernel void @test_call_external_i48_zeroext_func_void() #0 { 857 ; GCN-LABEL: name: test_call_external_i48_zeroext_func_void 858 ; GCN: bb.1 (%ir-block.0): 859 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 860 ; GCN-NEXT: {{ $}} 861 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 862 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 863 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 864 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 865 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 866 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 867 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 868 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 869 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 870 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 871 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 872 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i48_zeroext_func_void 873 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 874 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 875 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 876 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 877 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 878 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 879 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 880 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 881 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 882 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 883 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 884 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 885 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 886 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 887 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 888 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 889 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 890 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 891 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 892 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 893 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 894 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 895 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 896 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 897 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 898 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 899 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 900 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 901 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i48_zeroext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 902 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 903 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 904 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 905 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64) 906 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 907 ; GCN-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s48) 908 ; GCN-NEXT: G_STORE [[ZEXT]](s64), [[DEF]](p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1) 909 ; GCN-NEXT: S_ENDPGM 0 910 %val = call i48 @external_i48_zeroext_func_void() 911 %ext = zext i48 %val to i64 912 store volatile i64 %ext, i64 addrspace(1)* undef 913 ret void 914} 915 916define amdgpu_kernel void @test_call_external_i48_signext_func_void() #0 { 917 ; GCN-LABEL: name: test_call_external_i48_signext_func_void 918 ; GCN: bb.1 (%ir-block.0): 919 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 920 ; GCN-NEXT: {{ $}} 921 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 922 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 923 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 924 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 925 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 926 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 927 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 928 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 929 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 930 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 931 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 932 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i48_signext_func_void 933 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 934 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 935 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 936 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 937 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 938 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 939 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 940 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 941 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 942 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 943 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 944 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 945 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 946 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 947 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 948 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 949 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 950 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 951 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 952 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 953 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 954 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 955 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 956 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 957 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 958 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 959 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 960 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 961 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i48_signext_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 962 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 963 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 964 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 965 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64) 966 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 967 ; GCN-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s48) 968 ; GCN-NEXT: G_STORE [[SEXT]](s64), [[DEF]](p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1) 969 ; GCN-NEXT: S_ENDPGM 0 970 %val = call i48 @external_i48_signext_func_void() 971 %ext = sext i48 %val to i64 972 store volatile i64 %ext, i64 addrspace(1)* undef 973 ret void 974} 975 976define amdgpu_kernel void @test_call_external_i64_func_void() #0 { 977 ; GCN-LABEL: name: test_call_external_i64_func_void 978 ; GCN: bb.1 (%ir-block.0): 979 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 980 ; GCN-NEXT: {{ $}} 981 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 982 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 983 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 984 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 985 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 986 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 987 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 988 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 989 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 990 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 991 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 992 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i64_func_void 993 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 994 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 995 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 996 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 997 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 998 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 999 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1000 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1001 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1002 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1003 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1004 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1005 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1006 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1007 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1008 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1009 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1010 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1011 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1012 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1013 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1014 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1015 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1016 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1017 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1018 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1019 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1020 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1021 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i64_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 1022 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1023 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1024 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 1025 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1026 ; GCN-NEXT: G_STORE [[MV]](s64), [[DEF]](p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1) 1027 ; GCN-NEXT: S_ENDPGM 0 1028 %val = call i64 @external_i64_func_void() 1029 store volatile i64 %val, i64 addrspace(1)* undef 1030 ret void 1031} 1032 1033define amdgpu_kernel void @test_call_external_p1_func_void() #0 { 1034 ; GCN-LABEL: name: test_call_external_p1_func_void 1035 ; GCN: bb.1 (%ir-block.0): 1036 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1037 ; GCN-NEXT: {{ $}} 1038 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1039 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1040 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1041 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1042 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1043 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1044 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1045 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1046 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1047 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1048 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1049 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_p1_func_void 1050 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1051 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1052 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1053 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1054 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1055 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1056 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1057 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1058 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1059 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1060 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1061 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1062 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1063 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1064 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1065 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1066 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1067 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1068 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1069 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1070 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1071 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1072 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1073 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1074 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1075 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1076 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1077 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1078 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_p1_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 1079 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1080 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1081 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 1082 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1083 ; GCN-NEXT: G_STORE [[MV]](p1), [[DEF]](p1) :: (volatile store (p1) into `i8 addrspace(1)* addrspace(1)* undef`, addrspace 1) 1084 ; GCN-NEXT: S_ENDPGM 0 1085 %val = call i8 addrspace(1)* @external_p1_func_void() 1086 store volatile i8 addrspace(1)* %val, i8 addrspace(1)* addrspace(1)* undef 1087 ret void 1088} 1089 1090define amdgpu_kernel void @test_call_external_v2p1_func_void() #0 { 1091 ; GCN-LABEL: name: test_call_external_v2p1_func_void 1092 ; GCN: bb.1 (%ir-block.0): 1093 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1094 ; GCN-NEXT: {{ $}} 1095 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1096 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1097 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1098 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1099 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1100 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1101 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1102 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1103 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1104 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1105 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1106 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2p1_func_void 1107 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1108 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1109 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1110 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1111 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1112 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1113 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1114 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1115 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1116 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1117 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1118 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1119 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1120 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1121 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1122 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1123 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1124 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1125 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1126 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1127 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1128 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1129 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1130 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1131 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1132 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1133 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1134 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1135 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2p1_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3 1136 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1137 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1138 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1139 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1140 ; GCN-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 1141 ; GCN-NEXT: [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY21]](s32), [[COPY22]](s32) 1142 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[MV]](p1), [[MV1]](p1) 1143 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1144 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<2 x p1>), [[DEF]](p1) :: (volatile store (<2 x p1>) into `<2 x i8 addrspace(1)*> addrspace(1)* undef`, addrspace 1) 1145 ; GCN-NEXT: S_ENDPGM 0 1146 %val = call <2 x i8 addrspace(1)*> @external_v2p1_func_void() 1147 store volatile <2 x i8 addrspace(1)*> %val, <2 x i8 addrspace(1)*> addrspace(1)* undef 1148 ret void 1149} 1150 1151define amdgpu_kernel void @test_call_external_p3_func_void() #0 { 1152 ; GCN-LABEL: name: test_call_external_p3_func_void 1153 ; GCN: bb.1 (%ir-block.0): 1154 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1155 ; GCN-NEXT: {{ $}} 1156 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1157 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1158 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1159 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1160 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1161 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1162 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1163 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1164 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1165 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p3) = G_IMPLICIT_DEF 1166 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1167 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_p3_func_void 1168 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1169 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1170 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1171 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1172 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1173 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1174 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1175 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1176 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1177 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1178 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1179 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1180 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1181 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1182 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1183 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1184 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1185 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1186 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1187 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1188 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1189 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1190 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1191 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1192 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1193 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1194 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1195 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1196 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_p3_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 1197 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(p3) = COPY $vgpr0 1198 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1199 ; GCN-NEXT: G_STORE [[COPY19]](p3), [[DEF]](p3) :: (volatile store (p3) into `i8 addrspace(3)* addrspace(3)* undef`, addrspace 3) 1200 ; GCN-NEXT: S_ENDPGM 0 1201 %val = call i8 addrspace(3)* @external_p3_func_void() 1202 store volatile i8 addrspace(3)* %val, i8 addrspace(3)* addrspace(3)* undef 1203 ret void 1204} 1205 1206define amdgpu_kernel void @test_call_external_v2p3_func_void() #0 { 1207 ; GCN-LABEL: name: test_call_external_v2p3_func_void 1208 ; GCN: bb.1 (%ir-block.0): 1209 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1210 ; GCN-NEXT: {{ $}} 1211 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1212 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1213 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1214 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1215 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1216 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1217 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1218 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1219 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1220 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p3) = G_IMPLICIT_DEF 1221 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1222 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2p3_func_void 1223 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1224 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1225 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1226 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1227 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1228 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1229 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1230 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1231 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1232 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1233 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1234 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1235 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1236 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1237 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1238 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1239 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1240 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1241 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1242 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1243 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1244 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1245 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1246 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1247 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1248 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1249 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1250 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1251 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2p3_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 1252 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(p3) = COPY $vgpr0 1253 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(p3) = COPY $vgpr1 1254 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[COPY19]](p3), [[COPY20]](p3) 1255 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1256 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<2 x p3>), [[DEF]](p3) :: (volatile store (<2 x p3>) into `<2 x i8 addrspace(3)*> addrspace(3)* undef`, addrspace 3) 1257 ; GCN-NEXT: S_ENDPGM 0 1258 %val = call <2 x i8 addrspace(3)*> @external_v2p3_func_void() 1259 store volatile <2 x i8 addrspace(3)*> %val, <2 x i8 addrspace(3)*> addrspace(3)* undef 1260 ret void 1261} 1262 1263define amdgpu_kernel void @test_call_external_f16_func_void() #0 { 1264 ; GCN-LABEL: name: test_call_external_f16_func_void 1265 ; GCN: bb.1 (%ir-block.0): 1266 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1267 ; GCN-NEXT: {{ $}} 1268 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1269 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1270 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1271 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1272 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1273 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1274 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1275 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1276 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1277 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1278 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1279 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_f16_func_void 1280 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1281 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1282 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1283 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1284 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1285 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1286 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1287 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1288 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1289 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1290 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1291 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1292 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1293 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1294 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1295 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1296 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1297 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1298 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1299 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1300 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1301 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1302 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1303 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1304 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1305 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1306 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1307 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1308 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_f16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 1309 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1310 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 1311 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1312 ; GCN-NEXT: G_STORE [[TRUNC]](s16), [[DEF]](p1) :: (volatile store (s16) into `half addrspace(1)* undef`, addrspace 1) 1313 ; GCN-NEXT: S_ENDPGM 0 1314 %val = call half @external_f16_func_void() 1315 store volatile half %val, half addrspace(1)* undef 1316 ret void 1317} 1318 1319define amdgpu_kernel void @test_call_external_f32_func_void() #0 { 1320 ; GCN-LABEL: name: test_call_external_f32_func_void 1321 ; GCN: bb.1 (%ir-block.0): 1322 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1323 ; GCN-NEXT: {{ $}} 1324 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1325 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1326 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1327 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1328 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1329 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1330 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1331 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1332 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1333 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1334 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1335 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_f32_func_void 1336 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1337 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1338 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1339 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1340 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1341 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1342 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1343 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1344 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1345 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1346 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1347 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1348 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1349 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1350 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1351 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1352 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1353 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1354 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1355 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1356 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1357 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1358 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1359 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1360 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1361 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1362 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1363 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1364 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_f32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 1365 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1366 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1367 ; GCN-NEXT: G_STORE [[COPY19]](s32), [[DEF]](p1) :: (volatile store (s32) into `float addrspace(1)* undef`, addrspace 1) 1368 ; GCN-NEXT: S_ENDPGM 0 1369 %val = call float @external_f32_func_void() 1370 store volatile float %val, float addrspace(1)* undef 1371 ret void 1372} 1373 1374define amdgpu_kernel void @test_call_external_f64_func_void() #0 { 1375 ; GCN-LABEL: name: test_call_external_f64_func_void 1376 ; GCN: bb.1 (%ir-block.0): 1377 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1378 ; GCN-NEXT: {{ $}} 1379 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1380 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1381 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1382 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1383 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1384 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1385 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1386 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1387 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1388 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1389 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1390 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_f64_func_void 1391 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1392 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1393 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1394 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1395 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1396 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1397 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1398 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1399 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1400 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1401 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1402 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1403 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1404 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1405 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1406 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1407 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1408 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1409 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1410 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1411 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1412 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1413 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1414 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1415 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1416 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1417 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1418 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1419 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_f64_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 1420 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1421 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1422 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 1423 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1424 ; GCN-NEXT: G_STORE [[MV]](s64), [[DEF]](p1) :: (volatile store (s64) into `double addrspace(1)* undef`, addrspace 1) 1425 ; GCN-NEXT: S_ENDPGM 0 1426 %val = call double @external_f64_func_void() 1427 store volatile double %val, double addrspace(1)* undef 1428 ret void 1429} 1430 1431define amdgpu_kernel void @test_call_external_v2f64_func_void() #0 { 1432 ; GCN-LABEL: name: test_call_external_v2f64_func_void 1433 ; GCN: bb.1 (%ir-block.0): 1434 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1435 ; GCN-NEXT: {{ $}} 1436 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1437 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1438 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1439 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1440 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1441 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1442 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1443 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1444 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1445 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1446 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1447 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2f64_func_void 1448 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1449 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1450 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1451 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1452 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1453 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1454 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1455 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1456 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1457 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1458 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1459 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1460 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1461 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1462 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1463 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1464 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1465 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1466 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1467 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1468 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1469 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1470 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1471 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1472 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1473 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1474 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1475 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1476 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2f64_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3 1477 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1478 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1479 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1480 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1481 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY19]](s32), [[COPY20]](s32) 1482 ; GCN-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY21]](s32), [[COPY22]](s32) 1483 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64) 1484 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1485 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<2 x s64>), [[DEF]](p1) :: (volatile store (<2 x s64>) into `<2 x double> addrspace(1)* undef`, addrspace 1) 1486 ; GCN-NEXT: S_ENDPGM 0 1487 %val = call <2 x double> @external_v2f64_func_void() 1488 store volatile <2 x double> %val, <2 x double> addrspace(1)* undef 1489 ret void 1490} 1491 1492define amdgpu_kernel void @test_call_external_v2i32_func_void() #0 { 1493 ; GCN-LABEL: name: test_call_external_v2i32_func_void 1494 ; GCN: bb.1 (%ir-block.0): 1495 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1496 ; GCN-NEXT: {{ $}} 1497 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1498 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1499 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1500 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1501 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1502 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1503 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1504 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1505 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1506 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1507 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1508 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2i32_func_void 1509 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1510 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1511 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1512 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1513 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1514 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1515 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1516 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1517 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1518 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1519 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1520 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1521 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1522 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1523 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1524 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1525 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1526 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1527 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1528 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1529 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1530 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1531 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1532 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1533 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1534 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1535 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1536 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1537 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 1538 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1539 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1540 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32) 1541 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1542 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<2 x s32>), [[DEF]](p1) :: (volatile store (<2 x s32>) into `<2 x i32> addrspace(1)* undef`, addrspace 1) 1543 ; GCN-NEXT: S_ENDPGM 0 1544 %val = call <2 x i32> @external_v2i32_func_void() 1545 store volatile <2 x i32> %val, <2 x i32> addrspace(1)* undef 1546 ret void 1547} 1548 1549define amdgpu_kernel void @test_call_external_v3i32_func_void() #0 { 1550 ; GCN-LABEL: name: test_call_external_v3i32_func_void 1551 ; GCN: bb.1 (%ir-block.0): 1552 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1553 ; GCN-NEXT: {{ $}} 1554 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1555 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1556 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1557 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1558 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1559 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1560 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1561 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1562 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1563 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1564 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1565 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v3i32_func_void 1566 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1567 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1568 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1569 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1570 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1571 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1572 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1573 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1574 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1575 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1576 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1577 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1578 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1579 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1580 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1581 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1582 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1583 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1584 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1585 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1586 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1587 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1588 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1589 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1590 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1591 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1592 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1593 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1594 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v3i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2 1595 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1596 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1597 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1598 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32) 1599 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1600 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<3 x s32>), [[DEF]](p1) :: (volatile store (<3 x s32>) into `<3 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1601 ; GCN-NEXT: S_ENDPGM 0 1602 %val = call <3 x i32> @external_v3i32_func_void() 1603 store volatile <3 x i32> %val, <3 x i32> addrspace(1)* undef, align 8 1604 ret void 1605} 1606 1607define amdgpu_kernel void @test_call_external_v4i32_func_void() #0 { 1608 ; GCN-LABEL: name: test_call_external_v4i32_func_void 1609 ; GCN: bb.1 (%ir-block.0): 1610 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1611 ; GCN-NEXT: {{ $}} 1612 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1613 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1614 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1615 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1616 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1617 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1618 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1619 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1620 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1621 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1622 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1623 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v4i32_func_void 1624 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1625 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1626 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1627 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1628 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1629 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1630 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1631 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1632 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1633 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1634 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1635 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1636 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1637 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1638 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1639 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1640 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1641 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1642 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1643 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1644 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1645 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1646 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1647 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1648 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1649 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1650 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1651 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1652 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v4i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3 1653 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1654 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1655 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1656 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1657 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32) 1658 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1659 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<4 x s32>), [[DEF]](p1) :: (volatile store (<4 x s32>) into `<4 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1660 ; GCN-NEXT: S_ENDPGM 0 1661 %val = call <4 x i32> @external_v4i32_func_void() 1662 store volatile <4 x i32> %val, <4 x i32> addrspace(1)* undef, align 8 1663 ret void 1664} 1665 1666define amdgpu_kernel void @test_call_external_v5i32_func_void() #0 { 1667 ; GCN-LABEL: name: test_call_external_v5i32_func_void 1668 ; GCN: bb.1 (%ir-block.0): 1669 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1670 ; GCN-NEXT: {{ $}} 1671 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1672 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1673 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1674 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1675 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1676 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1677 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1678 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1679 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1680 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1681 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1682 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v5i32_func_void 1683 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1684 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1685 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1686 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1687 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1688 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1689 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1690 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1691 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1692 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1693 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1694 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1695 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1696 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1697 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1698 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1699 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1700 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1701 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1702 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1703 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1704 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1705 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1706 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1707 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1708 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1709 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1710 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1711 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v5i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4 1712 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1713 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1714 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1715 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1716 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 1717 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32) 1718 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1719 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<5 x s32>), [[DEF]](p1) :: (volatile store (<5 x s32>) into `<5 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1720 ; GCN-NEXT: S_ENDPGM 0 1721 %val = call <5 x i32> @external_v5i32_func_void() 1722 store volatile <5 x i32> %val, <5 x i32> addrspace(1)* undef, align 8 1723 ret void 1724} 1725 1726define amdgpu_kernel void @test_call_external_v8i32_func_void() #0 { 1727 ; GCN-LABEL: name: test_call_external_v8i32_func_void 1728 ; GCN: bb.1 (%ir-block.0): 1729 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1730 ; GCN-NEXT: {{ $}} 1731 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1732 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1733 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1734 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1735 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1736 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1737 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1738 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1739 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1740 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1741 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1742 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v8i32_func_void 1743 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1744 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1745 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1746 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1747 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1748 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1749 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1750 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1751 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1752 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1753 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1754 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1755 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1756 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1757 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1758 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1759 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1760 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1761 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1762 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1763 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1764 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1765 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1766 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1767 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1768 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1769 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1770 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1771 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v8i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4, implicit-def $vgpr5, implicit-def $vgpr6, implicit-def $vgpr7 1772 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1773 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1774 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1775 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1776 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 1777 ; GCN-NEXT: [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr5 1778 ; GCN-NEXT: [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr6 1779 ; GCN-NEXT: [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr7 1780 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32) 1781 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1782 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<8 x s32>), [[DEF]](p1) :: (volatile store (<8 x s32>) into `<8 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1783 ; GCN-NEXT: S_ENDPGM 0 1784 %val = call <8 x i32> @external_v8i32_func_void() 1785 store volatile <8 x i32> %val, <8 x i32> addrspace(1)* undef, align 8 1786 ret void 1787} 1788 1789define amdgpu_kernel void @test_call_external_v16i32_func_void() #0 { 1790 ; GCN-LABEL: name: test_call_external_v16i32_func_void 1791 ; GCN: bb.1 (%ir-block.0): 1792 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1793 ; GCN-NEXT: {{ $}} 1794 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1795 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1796 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1797 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1798 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1799 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1800 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1801 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1802 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1803 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1804 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1805 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v16i32_func_void 1806 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1807 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1808 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1809 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1810 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1811 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1812 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1813 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1814 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1815 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1816 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1817 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1818 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1819 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1820 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1821 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1822 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1823 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1824 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1825 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1826 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1827 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1828 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1829 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1830 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1831 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1832 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1833 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1834 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v16i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4, implicit-def $vgpr5, implicit-def $vgpr6, implicit-def $vgpr7, implicit-def $vgpr8, implicit-def $vgpr9, implicit-def $vgpr10, implicit-def $vgpr11, implicit-def $vgpr12, implicit-def $vgpr13, implicit-def $vgpr14, implicit-def $vgpr15 1835 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1836 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1837 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1838 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1839 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 1840 ; GCN-NEXT: [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr5 1841 ; GCN-NEXT: [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr6 1842 ; GCN-NEXT: [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr7 1843 ; GCN-NEXT: [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr8 1844 ; GCN-NEXT: [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr9 1845 ; GCN-NEXT: [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr10 1846 ; GCN-NEXT: [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr11 1847 ; GCN-NEXT: [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr12 1848 ; GCN-NEXT: [[COPY32:%[0-9]+]]:_(s32) = COPY $vgpr13 1849 ; GCN-NEXT: [[COPY33:%[0-9]+]]:_(s32) = COPY $vgpr14 1850 ; GCN-NEXT: [[COPY34:%[0-9]+]]:_(s32) = COPY $vgpr15 1851 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32), [[COPY32]](s32), [[COPY33]](s32), [[COPY34]](s32) 1852 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1853 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<16 x s32>), [[DEF]](p1) :: (volatile store (<16 x s32>) into `<16 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1854 ; GCN-NEXT: S_ENDPGM 0 1855 %val = call <16 x i32> @external_v16i32_func_void() 1856 store volatile <16 x i32> %val, <16 x i32> addrspace(1)* undef, align 8 1857 ret void 1858} 1859 1860define amdgpu_kernel void @test_call_external_v32i32_func_void() #0 { 1861 ; GCN-LABEL: name: test_call_external_v32i32_func_void 1862 ; GCN: bb.1 (%ir-block.0): 1863 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1864 ; GCN-NEXT: {{ $}} 1865 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1866 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1867 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1868 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1869 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1870 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1871 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1872 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1873 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1874 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1875 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1876 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v32i32_func_void 1877 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1878 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1879 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1880 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1881 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1882 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1883 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1884 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1885 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1886 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1887 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1888 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1889 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1890 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1891 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1892 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1893 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1894 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1895 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1896 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1897 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1898 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1899 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1900 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1901 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1902 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1903 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1904 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1905 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v32i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4, implicit-def $vgpr5, implicit-def $vgpr6, implicit-def $vgpr7, implicit-def $vgpr8, implicit-def $vgpr9, implicit-def $vgpr10, implicit-def $vgpr11, implicit-def $vgpr12, implicit-def $vgpr13, implicit-def $vgpr14, implicit-def $vgpr15, implicit-def $vgpr16, implicit-def $vgpr17, implicit-def $vgpr18, implicit-def $vgpr19, implicit-def $vgpr20, implicit-def $vgpr21, implicit-def $vgpr22, implicit-def $vgpr23, implicit-def $vgpr24, implicit-def $vgpr25, implicit-def $vgpr26, implicit-def $vgpr27, implicit-def $vgpr28, implicit-def $vgpr29, implicit-def $vgpr30, implicit-def $vgpr31 1906 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 1907 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 1908 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 1909 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 1910 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 1911 ; GCN-NEXT: [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr5 1912 ; GCN-NEXT: [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr6 1913 ; GCN-NEXT: [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr7 1914 ; GCN-NEXT: [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr8 1915 ; GCN-NEXT: [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr9 1916 ; GCN-NEXT: [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr10 1917 ; GCN-NEXT: [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr11 1918 ; GCN-NEXT: [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr12 1919 ; GCN-NEXT: [[COPY32:%[0-9]+]]:_(s32) = COPY $vgpr13 1920 ; GCN-NEXT: [[COPY33:%[0-9]+]]:_(s32) = COPY $vgpr14 1921 ; GCN-NEXT: [[COPY34:%[0-9]+]]:_(s32) = COPY $vgpr15 1922 ; GCN-NEXT: [[COPY35:%[0-9]+]]:_(s32) = COPY $vgpr16 1923 ; GCN-NEXT: [[COPY36:%[0-9]+]]:_(s32) = COPY $vgpr17 1924 ; GCN-NEXT: [[COPY37:%[0-9]+]]:_(s32) = COPY $vgpr18 1925 ; GCN-NEXT: [[COPY38:%[0-9]+]]:_(s32) = COPY $vgpr19 1926 ; GCN-NEXT: [[COPY39:%[0-9]+]]:_(s32) = COPY $vgpr20 1927 ; GCN-NEXT: [[COPY40:%[0-9]+]]:_(s32) = COPY $vgpr21 1928 ; GCN-NEXT: [[COPY41:%[0-9]+]]:_(s32) = COPY $vgpr22 1929 ; GCN-NEXT: [[COPY42:%[0-9]+]]:_(s32) = COPY $vgpr23 1930 ; GCN-NEXT: [[COPY43:%[0-9]+]]:_(s32) = COPY $vgpr24 1931 ; GCN-NEXT: [[COPY44:%[0-9]+]]:_(s32) = COPY $vgpr25 1932 ; GCN-NEXT: [[COPY45:%[0-9]+]]:_(s32) = COPY $vgpr26 1933 ; GCN-NEXT: [[COPY46:%[0-9]+]]:_(s32) = COPY $vgpr27 1934 ; GCN-NEXT: [[COPY47:%[0-9]+]]:_(s32) = COPY $vgpr28 1935 ; GCN-NEXT: [[COPY48:%[0-9]+]]:_(s32) = COPY $vgpr29 1936 ; GCN-NEXT: [[COPY49:%[0-9]+]]:_(s32) = COPY $vgpr30 1937 ; GCN-NEXT: [[COPY50:%[0-9]+]]:_(s32) = COPY $vgpr31 1938 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32), [[COPY32]](s32), [[COPY33]](s32), [[COPY34]](s32), [[COPY35]](s32), [[COPY36]](s32), [[COPY37]](s32), [[COPY38]](s32), [[COPY39]](s32), [[COPY40]](s32), [[COPY41]](s32), [[COPY42]](s32), [[COPY43]](s32), [[COPY44]](s32), [[COPY45]](s32), [[COPY46]](s32), [[COPY47]](s32), [[COPY48]](s32), [[COPY49]](s32), [[COPY50]](s32) 1939 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1940 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store (<32 x s32>) into `<32 x i32> addrspace(1)* undef`, align 8, addrspace 1) 1941 ; GCN-NEXT: S_ENDPGM 0 1942 %val = call <32 x i32> @external_v32i32_func_void() 1943 store volatile <32 x i32> %val, <32 x i32> addrspace(1)* undef, align 8 1944 ret void 1945} 1946 1947define amdgpu_kernel void @test_call_external_v2i16_func_void() #0 { 1948 ; GCN-LABEL: name: test_call_external_v2i16_func_void 1949 ; GCN: bb.1 (%ir-block.0): 1950 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 1951 ; GCN-NEXT: {{ $}} 1952 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 1953 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 1954 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 1955 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 1956 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 1957 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 1958 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 1959 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 1960 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 1961 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 1962 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 1963 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2i16_func_void 1964 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 1965 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 1966 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 1967 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 1968 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 1969 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 1970 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 1971 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 1972 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 1973 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 1974 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 1975 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 1976 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 1977 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 1978 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 1979 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 1980 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 1981 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 1982 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 1983 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 1984 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 1985 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 1986 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 1987 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 1988 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 1989 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 1990 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 1991 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 1992 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2i16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 1993 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 1994 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 1995 ; GCN-NEXT: G_STORE [[COPY19]](<2 x s16>), [[DEF]](p1) :: (volatile store (<2 x s16>) into `<2 x i16> addrspace(1)* undef`, addrspace 1) 1996 ; GCN-NEXT: S_ENDPGM 0 1997 %val = call <2 x i16> @external_v2i16_func_void() 1998 store volatile <2 x i16> %val, <2 x i16> addrspace(1)* undef 1999 ret void 2000} 2001 2002define amdgpu_kernel void @test_call_external_v3i16_func_void() #0 { 2003 ; GCN-LABEL: name: test_call_external_v3i16_func_void 2004 ; GCN: bb.1 (%ir-block.0): 2005 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2006 ; GCN-NEXT: {{ $}} 2007 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2008 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2009 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2010 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2011 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2012 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2013 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2014 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2015 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2016 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2017 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2018 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v3i16_func_void 2019 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2020 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2021 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2022 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2023 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2024 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2025 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2026 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2027 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2028 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2029 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2030 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2031 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2032 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2033 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2034 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2035 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2036 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2037 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2038 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2039 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2040 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2041 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2042 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2043 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2044 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2045 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2046 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2047 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v3i16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 2048 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 2049 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 2050 ; GCN-NEXT: [[DEF1:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 2051 ; GCN-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY19]](<2 x s16>), [[COPY20]](<2 x s16>), [[DEF1]](<2 x s16>) 2052 ; GCN-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>) 2053 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2054 ; GCN-NEXT: G_STORE [[UV]](<3 x s16>), [[DEF]](p1) :: (volatile store (<3 x s16>) into `<3 x i16> addrspace(1)* undef`, align 8, addrspace 1) 2055 ; GCN-NEXT: S_ENDPGM 0 2056 %val = call <3 x i16> @external_v3i16_func_void() 2057 store volatile <3 x i16> %val, <3 x i16> addrspace(1)* undef 2058 ret void 2059} 2060 2061define amdgpu_kernel void @test_call_external_v4i16_func_void() #0 { 2062 ; GCN-LABEL: name: test_call_external_v4i16_func_void 2063 ; GCN: bb.1 (%ir-block.0): 2064 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2065 ; GCN-NEXT: {{ $}} 2066 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2067 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2068 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2069 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2070 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2071 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2072 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2073 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2074 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2075 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2076 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2077 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v4i16_func_void 2078 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2079 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2080 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2081 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2082 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2083 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2084 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2085 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2086 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2087 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2088 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2089 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2090 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2091 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2092 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2093 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2094 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2095 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2096 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2097 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2098 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2099 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2100 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2101 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2102 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2103 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2104 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2105 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2106 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v4i16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 2107 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 2108 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 2109 ; GCN-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY19]](<2 x s16>), [[COPY20]](<2 x s16>) 2110 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2111 ; GCN-NEXT: G_STORE [[CONCAT_VECTORS]](<4 x s16>), [[DEF]](p1) :: (volatile store (<4 x s16>) into `<4 x i16> addrspace(1)* undef`, addrspace 1) 2112 ; GCN-NEXT: S_ENDPGM 0 2113 %val = call <4 x i16> @external_v4i16_func_void() 2114 store volatile <4 x i16> %val, <4 x i16> addrspace(1)* undef 2115 ret void 2116} 2117 2118define amdgpu_kernel void @test_call_external_v2f16_func_void() #0 { 2119 ; GCN-LABEL: name: test_call_external_v2f16_func_void 2120 ; GCN: bb.1 (%ir-block.0): 2121 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2122 ; GCN-NEXT: {{ $}} 2123 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2124 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2125 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2126 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2127 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2128 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2129 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2130 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2131 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2132 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2133 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2134 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v2f16_func_void 2135 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2136 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2137 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2138 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2139 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2140 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2141 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2142 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2143 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2144 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2145 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2146 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2147 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2148 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2149 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2150 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2151 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2152 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2153 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2154 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2155 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2156 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2157 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2158 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2159 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2160 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2161 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2162 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2163 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v2f16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0 2164 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 2165 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2166 ; GCN-NEXT: G_STORE [[COPY19]](<2 x s16>), [[DEF]](p1) :: (volatile store (<2 x s16>) into `<2 x half> addrspace(1)* undef`, addrspace 1) 2167 ; GCN-NEXT: S_ENDPGM 0 2168 %val = call <2 x half> @external_v2f16_func_void() 2169 store volatile <2 x half> %val, <2 x half> addrspace(1)* undef 2170 ret void 2171} 2172 2173define amdgpu_kernel void @test_call_external_v3f16_func_void() #0 { 2174 ; GCN-LABEL: name: test_call_external_v3f16_func_void 2175 ; GCN: bb.1 (%ir-block.0): 2176 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2177 ; GCN-NEXT: {{ $}} 2178 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2179 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2180 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2181 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2182 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2183 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2184 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2185 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2186 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2187 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2188 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2189 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v3f16_func_void 2190 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2191 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2192 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2193 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2194 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2195 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2196 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2197 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2198 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2199 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2200 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2201 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2202 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2203 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2204 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2205 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2206 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2207 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2208 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2209 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2210 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2211 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2212 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2213 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2214 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2215 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2216 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2217 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2218 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v3f16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 2219 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 2220 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 2221 ; GCN-NEXT: [[DEF1:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 2222 ; GCN-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY19]](<2 x s16>), [[COPY20]](<2 x s16>), [[DEF1]](<2 x s16>) 2223 ; GCN-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>) 2224 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2225 ; GCN-NEXT: G_STORE [[UV]](<3 x s16>), [[DEF]](p1) :: (volatile store (<3 x s16>) into `<3 x half> addrspace(1)* undef`, align 8, addrspace 1) 2226 ; GCN-NEXT: S_ENDPGM 0 2227 %val = call <3 x half> @external_v3f16_func_void() 2228 store volatile <3 x half> %val, <3 x half> addrspace(1)* undef 2229 ret void 2230} 2231 2232define amdgpu_kernel void @test_call_external_v4f16_func_void() #0 { 2233 ; GCN-LABEL: name: test_call_external_v4f16_func_void 2234 ; GCN: bb.1 (%ir-block.0): 2235 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2236 ; GCN-NEXT: {{ $}} 2237 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2238 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2239 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2240 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2241 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2242 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2243 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2244 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2245 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2246 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2247 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2248 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v4f16_func_void 2249 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2250 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2251 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2252 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2253 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2254 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2255 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2256 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2257 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2258 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2259 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2260 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2261 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2262 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2263 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2264 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2265 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2266 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2267 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2268 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2269 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2270 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2271 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2272 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2273 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2274 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2275 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2276 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2277 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v4f16_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 2278 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 2279 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 2280 ; GCN-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY19]](<2 x s16>), [[COPY20]](<2 x s16>) 2281 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2282 ; GCN-NEXT: G_STORE [[CONCAT_VECTORS]](<4 x s16>), [[DEF]](p1) :: (volatile store (<4 x s16>) into `<4 x half> addrspace(1)* undef`, addrspace 1) 2283 ; GCN-NEXT: S_ENDPGM 0 2284 %val = call <4 x half> @external_v4f16_func_void() 2285 store volatile <4 x half> %val, <4 x half> addrspace(1)* undef 2286 ret void 2287} 2288 2289define amdgpu_kernel void @test_call_external_v3f32_func_void() #0 { 2290 ; GCN-LABEL: name: test_call_external_v3f32_func_void 2291 ; GCN: bb.1 (%ir-block.0): 2292 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2293 ; GCN-NEXT: {{ $}} 2294 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2295 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2296 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2297 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2298 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2299 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2300 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2301 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2302 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2303 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2304 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2305 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v3f32_func_void 2306 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2307 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2308 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2309 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2310 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2311 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2312 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2313 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2314 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2315 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2316 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2317 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2318 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2319 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2320 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2321 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2322 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2323 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2324 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2325 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2326 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2327 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2328 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2329 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2330 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2331 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2332 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2333 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2334 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v3f32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2 2335 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 2336 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 2337 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 2338 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32) 2339 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2340 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<3 x s32>), [[DEF]](p1) :: (volatile store (<3 x s32>) into `<3 x float> addrspace(1)* undef`, align 16, addrspace 1) 2341 ; GCN-NEXT: S_ENDPGM 0 2342 %val = call <3 x float> @external_v3f32_func_void() 2343 store volatile <3 x float> %val, <3 x float> addrspace(1)* undef 2344 ret void 2345} 2346 2347define amdgpu_kernel void @test_call_external_v5f32_func_void() #0 { 2348 ; GCN-LABEL: name: test_call_external_v5f32_func_void 2349 ; GCN: bb.1 (%ir-block.0): 2350 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2351 ; GCN-NEXT: {{ $}} 2352 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2353 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2354 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2355 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2356 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2357 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2358 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2359 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2360 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2361 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2362 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2363 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v5f32_func_void 2364 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2365 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2366 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2367 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2368 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2369 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2370 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2371 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2372 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2373 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2374 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2375 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2376 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2377 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2378 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2379 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2380 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2381 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2382 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2383 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2384 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2385 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2386 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2387 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2388 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2389 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2390 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2391 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2392 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v5f32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4 2393 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 2394 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 2395 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 2396 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 2397 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 2398 ; GCN-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32) 2399 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2400 ; GCN-NEXT: G_STORE [[BUILD_VECTOR]](<5 x s32>), [[DEF]](p1) :: (volatile store (<5 x s32>) into `<5 x float> addrspace(1)* undef`, align 32, addrspace 1) 2401 ; GCN-NEXT: S_ENDPGM 0 2402 %val = call <5 x float> @external_v5f32_func_void() 2403 store volatile <5 x float> %val, <5 x float> addrspace(1)* undef 2404 ret void 2405} 2406 2407 2408define amdgpu_kernel void @test_call_external_i32_i64_func_void() #0 { 2409 ; GCN-LABEL: name: test_call_external_i32_i64_func_void 2410 ; GCN: bb.1 (%ir-block.0): 2411 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2412 ; GCN-NEXT: {{ $}} 2413 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2414 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2415 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2416 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2417 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2418 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2419 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2420 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2421 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2422 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2423 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p1) = COPY [[DEF]](p1) 2424 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2425 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i32_i64_func_void 2426 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2427 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2428 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2429 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2430 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2431 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2432 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2433 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2434 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2435 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2436 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2437 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2438 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C2]](s32) 2439 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY16]], [[SHL]] 2440 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2441 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2442 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY18]], [[C3]](s32) 2443 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2444 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2445 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY19]](<4 x s32>) 2446 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY10]](p4) 2447 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY11]](p4) 2448 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2449 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY12]](s64) 2450 ; GCN-NEXT: $sgpr12 = COPY [[COPY13]](s32) 2451 ; GCN-NEXT: $sgpr13 = COPY [[COPY14]](s32) 2452 ; GCN-NEXT: $sgpr14 = COPY [[COPY15]](s32) 2453 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2454 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i32_i64_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2 2455 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr0 2456 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr1 2457 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr2 2458 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY21]](s32), [[COPY22]](s32) 2459 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2460 ; GCN-NEXT: G_STORE [[COPY20]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2461 ; GCN-NEXT: G_STORE [[MV]](s64), [[COPY9]](p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1) 2462 ; GCN-NEXT: S_ENDPGM 0 2463 %val = call { i32, i64 } @external_i32_i64_func_void() 2464 %val.0 = extractvalue { i32, i64 } %val, 0 2465 %val.1 = extractvalue { i32, i64 } %val, 1 2466 store volatile i32 %val.0, i32 addrspace(1)* undef 2467 store volatile i64 %val.1, i64 addrspace(1)* undef 2468 ret void 2469} 2470 2471define amdgpu_gfx void @test_gfx_call_external_i32_i64_func_void() #0 { 2472 ; GCN-LABEL: name: test_gfx_call_external_i32_i64_func_void 2473 ; GCN: bb.1 (%ir-block.0): 2474 ; GCN-NEXT: liveins: $sgpr30_sgpr31 2475 ; GCN-NEXT: {{ $}} 2476 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31 2477 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2478 ; GCN-NEXT: [[COPY1:%[0-9]+]]:_(p1) = COPY [[DEF]](p1) 2479 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2480 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_gfx_i32_i64_func_void 2481 ; GCN-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 2482 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY2]](<4 x s32>) 2483 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_gfx_i32_i64_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2 2484 ; GCN-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr0 2485 ; GCN-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr1 2486 ; GCN-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr2 2487 ; GCN-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32) 2488 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2489 ; GCN-NEXT: G_STORE [[COPY3]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2490 ; GCN-NEXT: G_STORE [[MV]](s64), [[COPY1]](p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1) 2491 ; GCN-NEXT: [[COPY6:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY]] 2492 ; GCN-NEXT: S_SETPC_B64_return [[COPY6]] 2493 %val = call amdgpu_gfx { i32, i64 } @external_gfx_i32_i64_func_void() 2494 %val.0 = extractvalue { i32, i64 } %val, 0 2495 %val.1 = extractvalue { i32, i64 } %val, 1 2496 store volatile i32 %val.0, i32 addrspace(1)* undef 2497 store volatile i64 %val.1, i64 addrspace(1)* undef 2498 ret void 2499} 2500 2501define amdgpu_kernel void @test_call_external_a2i32_func_void() #0 { 2502 ; GCN-LABEL: name: test_call_external_a2i32_func_void 2503 ; GCN: bb.1 (%ir-block.0): 2504 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2505 ; GCN-NEXT: {{ $}} 2506 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2507 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2508 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2509 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2510 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2511 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2512 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2513 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2514 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2515 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2516 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2517 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_a2i32_func_void 2518 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2519 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2520 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2521 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2522 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2523 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2524 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2525 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2526 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2527 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2528 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2529 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2530 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2531 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2532 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2533 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2534 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2535 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2536 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2537 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2538 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2539 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2540 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2541 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2542 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2543 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2544 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2545 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2546 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_a2i32_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1 2547 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 2548 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 2549 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2550 ; GCN-NEXT: G_STORE [[COPY19]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2551 ; GCN-NEXT: G_STORE [[COPY20]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2552 ; GCN-NEXT: S_ENDPGM 0 2553 %val = call [2 x i32] @external_a2i32_func_void() 2554 %val.0 = extractvalue [2 x i32] %val, 0 2555 %val.1 = extractvalue [2 x i32] %val, 1 2556 store volatile i32 %val.0, i32 addrspace(1)* undef 2557 store volatile i32 %val.1, i32 addrspace(1)* undef 2558 ret void 2559} 2560 2561define amdgpu_kernel void @test_call_external_a5i8_func_void() #0 { 2562 ; GCN-LABEL: name: test_call_external_a5i8_func_void 2563 ; GCN: bb.1 (%ir-block.0): 2564 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2565 ; GCN-NEXT: {{ $}} 2566 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2567 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2568 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2569 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2570 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2571 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2572 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2573 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2574 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2575 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2576 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2577 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_a5i8_func_void 2578 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2579 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2580 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2581 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2582 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2583 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2584 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2585 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2586 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2587 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2588 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2589 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2590 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2591 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2592 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2593 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2594 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2595 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2596 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2597 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2598 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2599 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2600 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2601 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2602 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2603 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2604 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2605 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2606 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_a5i8_func_void, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr3, implicit-def $vgpr4 2607 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr0 2608 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY19]](s32) 2609 ; GCN-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16) 2610 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr1 2611 ; GCN-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY20]](s32) 2612 ; GCN-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC2]](s16) 2613 ; GCN-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr2 2614 ; GCN-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY21]](s32) 2615 ; GCN-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC4]](s16) 2616 ; GCN-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr3 2617 ; GCN-NEXT: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY22]](s32) 2618 ; GCN-NEXT: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC6]](s16) 2619 ; GCN-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr4 2620 ; GCN-NEXT: [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[COPY23]](s32) 2621 ; GCN-NEXT: [[TRUNC9:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC8]](s16) 2622 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2623 ; GCN-NEXT: G_STORE [[TRUNC1]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 2624 ; GCN-NEXT: G_STORE [[TRUNC3]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 2625 ; GCN-NEXT: G_STORE [[TRUNC5]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 2626 ; GCN-NEXT: G_STORE [[TRUNC7]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 2627 ; GCN-NEXT: G_STORE [[TRUNC9]](s8), [[DEF]](p1) :: (volatile store (s8) into `i8 addrspace(1)* undef`, addrspace 1) 2628 ; GCN-NEXT: S_ENDPGM 0 2629 %val = call [5 x i8] @external_a5i8_func_void() 2630 %val.0 = extractvalue [5 x i8] %val, 0 2631 %val.1 = extractvalue [5 x i8] %val, 1 2632 %val.2 = extractvalue [5 x i8] %val, 2 2633 %val.3 = extractvalue [5 x i8] %val, 3 2634 %val.4 = extractvalue [5 x i8] %val, 4 2635 store volatile i8 %val.0, i8 addrspace(1)* undef 2636 store volatile i8 %val.1, i8 addrspace(1)* undef 2637 store volatile i8 %val.2, i8 addrspace(1)* undef 2638 store volatile i8 %val.3, i8 addrspace(1)* undef 2639 store volatile i8 %val.4, i8 addrspace(1)* undef 2640 ret void 2641} 2642 2643define amdgpu_kernel void @test_call_external_v32i32_i32_func_void() #0 { 2644 ; GCN-LABEL: name: test_call_external_v32i32_i32_func_void 2645 ; GCN: bb.1 (%ir-block.0): 2646 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2647 ; GCN-NEXT: {{ $}} 2648 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2649 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2650 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2651 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2652 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2653 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2654 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2655 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2656 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2657 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2658 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p1) = COPY [[DEF]](p1) 2659 ; GCN-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 2660 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2661 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v32i32_i32_func_void 2662 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2663 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2664 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2665 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2666 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2667 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2668 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2669 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2670 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2671 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2672 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2673 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2674 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C2]](s32) 2675 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY16]], [[SHL]] 2676 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2677 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2678 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY18]], [[C3]](s32) 2679 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2680 ; GCN-NEXT: $vgpr0 = COPY [[FRAME_INDEX]](p5) 2681 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2682 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY19]](<4 x s32>) 2683 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY10]](p4) 2684 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY11]](p4) 2685 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2686 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY12]](s64) 2687 ; GCN-NEXT: $sgpr12 = COPY [[COPY13]](s32) 2688 ; GCN-NEXT: $sgpr13 = COPY [[COPY14]](s32) 2689 ; GCN-NEXT: $sgpr14 = COPY [[COPY15]](s32) 2690 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2691 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v32i32_i32_func_void, csr_amdgpu_highregs, implicit $vgpr0, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31 2692 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2693 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(<32 x s32>) = G_LOAD [[FRAME_INDEX]](p5) :: (load (<32 x s32>) from %stack.0, addrspace 5) 2694 ; GCN-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 128 2695 ; GCN-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p5) = G_PTR_ADD [[FRAME_INDEX]], [[C4]](s32) 2696 ; GCN-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p5) :: (load (s32) from %stack.0, align 128, addrspace 5) 2697 ; GCN-NEXT: G_STORE [[LOAD]](<32 x s32>), [[DEF]](p1) :: (volatile store (<32 x s32>) into `<32 x i32> addrspace(1)* undef`, align 8, addrspace 1) 2698 ; GCN-NEXT: G_STORE [[LOAD1]](s32), [[COPY9]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2699 ; GCN-NEXT: S_ENDPGM 0 2700 %val = call { <32 x i32>, i32 } @external_v32i32_i32_func_void() 2701 %val0 = extractvalue { <32 x i32>, i32 } %val, 0 2702 %val1 = extractvalue { <32 x i32>, i32 } %val, 1 2703 store volatile <32 x i32> %val0, <32 x i32> addrspace(1)* undef, align 8 2704 store volatile i32 %val1, i32 addrspace(1)* undef 2705 ret void 2706} 2707 2708define amdgpu_kernel void @test_call_external_i32_v32i32_func_void() #0 { 2709 ; GCN-LABEL: name: test_call_external_i32_v32i32_func_void 2710 ; GCN: bb.1 (%ir-block.0): 2711 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2712 ; GCN-NEXT: {{ $}} 2713 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2714 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2715 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2716 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2717 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2718 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2719 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2720 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2721 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2722 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2723 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p1) = COPY [[DEF]](p1) 2724 ; GCN-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 2725 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2726 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_i32_v32i32_func_void 2727 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2728 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2729 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2730 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2731 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2732 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2733 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2734 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2735 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2736 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2737 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2738 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2739 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C2]](s32) 2740 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY16]], [[SHL]] 2741 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2742 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2743 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY18]], [[C3]](s32) 2744 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2745 ; GCN-NEXT: $vgpr0 = COPY [[FRAME_INDEX]](p5) 2746 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2747 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY19]](<4 x s32>) 2748 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY10]](p4) 2749 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY11]](p4) 2750 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2751 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY12]](s64) 2752 ; GCN-NEXT: $sgpr12 = COPY [[COPY13]](s32) 2753 ; GCN-NEXT: $sgpr13 = COPY [[COPY14]](s32) 2754 ; GCN-NEXT: $sgpr14 = COPY [[COPY15]](s32) 2755 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2756 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_i32_v32i32_func_void, csr_amdgpu_highregs, implicit $vgpr0, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31 2757 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2758 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (load (s32) from %stack.0, align 128, addrspace 5) 2759 ; GCN-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 128 2760 ; GCN-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p5) = G_PTR_ADD [[FRAME_INDEX]], [[C4]](s32) 2761 ; GCN-NEXT: [[LOAD1:%[0-9]+]]:_(<32 x s32>) = G_LOAD [[PTR_ADD1]](p5) :: (load (<32 x s32>) from %stack.0, addrspace 5) 2762 ; GCN-NEXT: G_STORE [[LOAD]](s32), [[DEF]](p1) :: (volatile store (s32) into `i32 addrspace(1)* undef`, addrspace 1) 2763 ; GCN-NEXT: G_STORE [[LOAD1]](<32 x s32>), [[COPY9]](p1) :: (volatile store (<32 x s32>) into `<32 x i32> addrspace(1)* undef`, align 8, addrspace 1) 2764 ; GCN-NEXT: S_ENDPGM 0 2765 %val = call { i32, <32 x i32> } @external_i32_v32i32_func_void() 2766 %val0 = extractvalue { i32, <32 x i32> } %val, 0 2767 %val1 = extractvalue { i32, <32 x i32> } %val, 1 2768 store volatile i32 %val0, i32 addrspace(1)* undef 2769 store volatile <32 x i32> %val1, <32 x i32> addrspace(1)* undef, align 8 2770 ret void 2771} 2772 2773define amdgpu_kernel void @test_call_external_v33i32_func_void() #0 { 2774 ; GCN-LABEL: name: test_call_external_v33i32_func_void 2775 ; GCN: bb.1 (%ir-block.0): 2776 ; GCN-NEXT: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9 2777 ; GCN-NEXT: {{ $}} 2778 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2779 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2780 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2781 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2782 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13 2783 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12 2784 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9 2785 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2786 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2787 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2788 ; GCN-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 2789 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2790 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v33i32_func_void 2791 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2792 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2793 ; GCN-NEXT: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0 2794 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 2795 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64) 2796 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2797 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2798 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2799 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2800 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2801 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2802 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2803 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32) 2804 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]] 2805 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2806 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2807 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32) 2808 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2809 ; GCN-NEXT: $vgpr0 = COPY [[FRAME_INDEX]](p5) 2810 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2811 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>) 2812 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY9]](p4) 2813 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY10]](p4) 2814 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4) 2815 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY11]](s64) 2816 ; GCN-NEXT: $sgpr12 = COPY [[COPY12]](s32) 2817 ; GCN-NEXT: $sgpr13 = COPY [[COPY13]](s32) 2818 ; GCN-NEXT: $sgpr14 = COPY [[COPY14]](s32) 2819 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2820 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v33i32_func_void, csr_amdgpu_highregs, implicit $vgpr0, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31 2821 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2822 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(<33 x s32>) = G_LOAD [[FRAME_INDEX]](p5) :: (load (<33 x s32>) from %stack.0, align 256, addrspace 5) 2823 ; GCN-NEXT: G_STORE [[LOAD]](<33 x s32>), [[DEF]](p1) :: (volatile store (<33 x s32>) into `<33 x i32> addrspace(1)* undef`, align 8, addrspace 1) 2824 ; GCN-NEXT: S_ENDPGM 0 2825 %val = call <33 x i32> @external_v33i32_func_void() 2826 store volatile <33 x i32> %val, <33 x i32> addrspace(1)* undef, align 8 2827 ret void 2828} 2829 2830define amdgpu_kernel void @test_call_external_v33i32_func_v33i32_i32(<33 x i32> addrspace(1)* %p, i32 %idx) #0 { 2831 ; GCN-LABEL: name: test_call_external_v33i32_func_v33i32_i32 2832 ; GCN: bb.1 (%ir-block.0): 2833 ; GCN-NEXT: liveins: $sgpr14, $sgpr15, $sgpr16, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11 2834 ; GCN-NEXT: {{ $}} 2835 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2 2836 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1 2837 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0 2838 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr16 2839 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr15 2840 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr14 2841 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr10_sgpr11 2842 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7 2843 ; GCN-NEXT: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 2844 ; GCN-NEXT: [[COPY9:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9 2845 ; GCN-NEXT: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF 2846 ; GCN-NEXT: [[INT:%[0-9]+]]:_(p4) = G_INTRINSIC intrinsic(@llvm.amdgcn.kernarg.segment.ptr) 2847 ; GCN-NEXT: [[LOAD:%[0-9]+]]:_(p1) = G_LOAD [[INT]](p4) :: (dereferenceable invariant load (p1) from %ir.p.kernarg.offset.cast, align 16, addrspace 4) 2848 ; GCN-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 2849 ; GCN-NEXT: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[INT]], [[C]](s64) 2850 ; GCN-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (s32) from %ir.idx.kernarg.offset.cast, align 8, addrspace 4) 2851 ; GCN-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %stack.0 2852 ; GCN-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $scc 2853 ; GCN-NEXT: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @external_v33i32_func_v33i32_i32 2854 ; GCN-NEXT: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY8]] 2855 ; GCN-NEXT: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY7]] 2856 ; GCN-NEXT: [[COPY12:%[0-9]+]]:_(p4) = COPY [[COPY9]](p4) 2857 ; GCN-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16 2858 ; GCN-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY12]], [[C1]](s64) 2859 ; GCN-NEXT: [[COPY13:%[0-9]+]]:_(s64) = COPY [[COPY6]] 2860 ; GCN-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY5]] 2861 ; GCN-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY4]] 2862 ; GCN-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY3]] 2863 ; GCN-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 2864 ; GCN-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 2865 ; GCN-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 2866 ; GCN-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY18]], [[C2]](s32) 2867 ; GCN-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY17]], [[SHL]] 2868 ; GCN-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 2869 ; GCN-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20 2870 ; GCN-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY19]], [[C3]](s32) 2871 ; GCN-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] 2872 ; GCN-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](p1) 2873 ; GCN-NEXT: $vgpr0 = COPY [[FRAME_INDEX]](p5) 2874 ; GCN-NEXT: $vgpr1 = COPY [[UV]](s32) 2875 ; GCN-NEXT: $vgpr2 = COPY [[UV1]](s32) 2876 ; GCN-NEXT: $vgpr3 = COPY [[LOAD1]](s32) 2877 ; GCN-NEXT: [[COPY20:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg 2878 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY20]](<4 x s32>) 2879 ; GCN-NEXT: $sgpr4_sgpr5 = COPY [[COPY10]](p4) 2880 ; GCN-NEXT: $sgpr6_sgpr7 = COPY [[COPY11]](p4) 2881 ; GCN-NEXT: $sgpr8_sgpr9 = COPY [[PTR_ADD1]](p4) 2882 ; GCN-NEXT: $sgpr10_sgpr11 = COPY [[COPY13]](s64) 2883 ; GCN-NEXT: $sgpr12 = COPY [[COPY14]](s32) 2884 ; GCN-NEXT: $sgpr13 = COPY [[COPY15]](s32) 2885 ; GCN-NEXT: $sgpr14 = COPY [[COPY16]](s32) 2886 ; GCN-NEXT: $vgpr31 = COPY [[OR1]](s32) 2887 ; GCN-NEXT: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @external_v33i32_func_v33i32_i32, csr_amdgpu_highregs, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31 2888 ; GCN-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $scc 2889 ; GCN-NEXT: [[LOAD2:%[0-9]+]]:_(<33 x s32>) = G_LOAD [[FRAME_INDEX]](p5) :: (load (<33 x s32>) from %stack.0, align 256, addrspace 5) 2890 ; GCN-NEXT: G_STORE [[LOAD2]](<33 x s32>), [[DEF]](p1) :: (volatile store (<33 x s32>) into `<33 x i32> addrspace(1)* undef`, align 8, addrspace 1) 2891 ; GCN-NEXT: S_ENDPGM 0 2892 %val = call <33 x i32> @external_v33i32_func_v33i32_i32(<33 x i32> addrspace(1)* %p, i32 %idx) 2893 store volatile <33 x i32> %val, <33 x i32> addrspace(1)* undef, align 8 2894 ret void 2895} 2896 2897attributes #0 = { nounwind } 2898attributes #1 = { nounwind readnone } 2899attributes #2 = { nounwind noinline } 2900