1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s 2 ; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-HSA -check-prefix=FUNC %s 3 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s 4 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 5 ; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 6 7 ; FIXME: r600 is broken because the bigger testcases spill and it's not implemented 8 9 ; FUNC-LABEL: {{^}}global_load_i16: 10 ; GCN-NOHSA: buffer_load_ushort v{{[0-9]+}} 11 ; GCN-HSA: flat_load_ushort 12 13 ; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0 14 define void @global_load_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %in) { 15 entry: 16 %ld = load i16, i16 addrspace(1)* %in 17 store i16 %ld, i16 addrspace(1)* %out 18 ret void 19 } 20 21 ; FUNC-LABEL: {{^}}global_load_v2i16: 22 ; GCN-NOHSA: buffer_load_dword v 23 ; GCN-HSA: flat_load_dword v 24 25 ; EG: VTX_READ_32 26 define void @global_load_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) { 27 entry: 28 %ld = load <2 x i16>, <2 x i16> addrspace(1)* %in 29 store <2 x i16> %ld, <2 x i16> addrspace(1)* %out 30 ret void 31 } 32 33 ; FUNC-LABEL: {{^}}global_load_v3i16: 34 ; GCN-NOHSA: buffer_load_dwordx2 v 35 ; GCN-HSA: flat_load_dwordx2 v 36 37 ; EG-DAG: VTX_READ_32 38 ; EG-DAG: VTX_READ_16 39 define void @global_load_v3i16(<3 x i16> addrspace(1)* %out, <3 x i16> addrspace(1)* %in) { 40 entry: 41 %ld = load <3 x i16>, <3 x i16> addrspace(1)* %in 42 store <3 x i16> %ld, <3 x i16> addrspace(1)* %out 43 ret void 44 } 45 46 ; FUNC-LABEL: {{^}}global_load_v4i16: 47 ; GCN-NOHSA: buffer_load_dwordx2 48 ; GCN-HSA: flat_load_dwordx2 49 50 ; EG: VTX_READ_64 51 define void @global_load_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(1)* %in) { 52 entry: 53 %ld = load <4 x i16>, <4 x i16> addrspace(1)* %in 54 store <4 x i16> %ld, <4 x i16> addrspace(1)* %out 55 ret void 56 } 57 58 ; FUNC-LABEL: {{^}}global_load_v8i16: 59 ; GCN-NOHSA: buffer_load_dwordx4 60 ; GCN-HSA: flat_load_dwordx4 61 62 ; EG: VTX_READ_128 63 define void @global_load_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(1)* %in) { 64 entry: 65 %ld = load <8 x i16>, <8 x i16> addrspace(1)* %in 66 store <8 x i16> %ld, <8 x i16> addrspace(1)* %out 67 ret void 68 } 69 70 ; FUNC-LABEL: {{^}}global_load_v16i16: 71 ; GCN-NOHSA: buffer_load_dwordx4 72 ; GCN-NOHSA: buffer_load_dwordx4 73 74 ; GCN-HSA: flat_load_dwordx4 75 ; GCN-HSA: flat_load_dwordx4 76 77 ; EG: VTX_READ_128 78 ; EG: VTX_READ_128 79 define void @global_load_v16i16(<16 x i16> addrspace(1)* %out, <16 x i16> addrspace(1)* %in) { 80 entry: 81 %ld = load <16 x i16>, <16 x i16> addrspace(1)* %in 82 store <16 x i16> %ld, <16 x i16> addrspace(1)* %out 83 ret void 84 } 85 86 ; FUNC-LABEL: {{^}}global_zextload_i16_to_i32: 87 ; GCN-NOHSA: buffer_load_ushort 88 ; GCN-NOHSA: buffer_store_dword 89 90 ; GCN-HSA: flat_load_ushort 91 ; GCN-HSA: flat_store_dword 92 93 ; EG: VTX_READ_16 T{{[0-9]+\.X, T[0-9]+\.X}} 94 define void @global_zextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(1)* %in) #0 { 95 %a = load i16, i16 addrspace(1)* %in 96 %ext = zext i16 %a to i32 97 store i32 %ext, i32 addrspace(1)* %out 98 ret void 99 } 100 101 ; FUNC-LABEL: {{^}}global_sextload_i16_to_i32: 102 ; GCN-NOHSA: buffer_load_sshort 103 ; GCN-NOHSA: buffer_store_dword 104 105 ; GCN-HSA: flat_load_sshort 106 ; GCN-HSA: flat_store_dword 107 108 ; EG: VTX_READ_16 [[DST:T[0-9]\.[XYZW]]], [[DST]] 109 ; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal 110 ; EG: 16 111 define void @global_sextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(1)* %in) #0 { 112 %a = load i16, i16 addrspace(1)* %in 113 %ext = sext i16 %a to i32 114 store i32 %ext, i32 addrspace(1)* %out 115 ret void 116 } 117 118 ; FUNC-LABEL: {{^}}global_zextload_v1i16_to_v1i32: 119 ; GCN-NOHSA: buffer_load_ushort 120 ; GCN-HSA: flat_load_ushort 121 define void @global_zextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(1)* %in) #0 { 122 %load = load <1 x i16>, <1 x i16> addrspace(1)* %in 123 %ext = zext <1 x i16> %load to <1 x i32> 124 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 125 ret void 126 } 127 128 ; FUNC-LABEL: {{^}}global_sextload_v1i16_to_v1i32: 129 ; GCN-NOHSA: buffer_load_sshort 130 ; GCN-HSA: flat_load_sshort 131 define void @global_sextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(1)* %in) #0 { 132 %load = load <1 x i16>, <1 x i16> addrspace(1)* %in 133 %ext = sext <1 x i16> %load to <1 x i32> 134 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 135 ret void 136 } 137 138 ; FUNC-LABEL: {{^}}global_zextload_v2i16_to_v2i32: 139 ; GCN-NOHSA: buffer_load_dword 140 ; GCN-HSA: flat_load_dword 141 define void @global_zextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) #0 { 142 %load = load <2 x i16>, <2 x i16> addrspace(1)* %in 143 %ext = zext <2 x i16> %load to <2 x i32> 144 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 145 ret void 146 } 147 148 ; FUNC-LABEL: {{^}}global_sextload_v2i16_to_v2i32: 149 ; GCN-NOHSA: buffer_load_dword 150 151 ; GCN-HSA: flat_load_dword 152 153 ; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 154 ; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 155 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 156 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 157 ; EG-DAG: 16 158 ; EG-DAG: 16 159 define void @global_sextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) #0 { 160 %load = load <2 x i16>, <2 x i16> addrspace(1)* %in 161 %ext = sext <2 x i16> %load to <2 x i32> 162 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 163 ret void 164 } 165 166 ; FUNC-LABEL: {{^}}global_global_zextload_v3i16_to_v3i32: 167 ; GCN-NOHSA: buffer_load_dwordx2 168 ; GCN-HSA: flat_load_dwordx2 169 define void @global_global_zextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(1)* %in) { 170 entry: 171 %ld = load <3 x i16>, <3 x i16> addrspace(1)* %in 172 %ext = zext <3 x i16> %ld to <3 x i32> 173 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 174 ret void 175 } 176 177 ; FUNC-LABEL: {{^}}global_global_sextload_v3i16_to_v3i32: 178 ; GCN-NOHSA: buffer_load_dwordx2 179 ; GCN-HSA: flat_load_dwordx2 180 define void @global_global_sextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(1)* %in) { 181 entry: 182 %ld = load <3 x i16>, <3 x i16> addrspace(1)* %in 183 %ext = sext <3 x i16> %ld to <3 x i32> 184 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 185 ret void 186 } 187 188 ; FUNC-LABEL: {{^}}global_global_zextload_v4i16_to_v4i32: 189 ; GCN-NOHSA: buffer_load_dwordx2 190 191 ; GCN-HSA: flat_load_dwordx2 192 193 ; EG: VTX_READ_16 194 ; EG: VTX_READ_16 195 ; EG: VTX_READ_16 196 ; EG: VTX_READ_16 197 define void @global_global_zextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(1)* %in) #0 { 198 %load = load <4 x i16>, <4 x i16> addrspace(1)* %in 199 %ext = zext <4 x i16> %load to <4 x i32> 200 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 201 ret void 202 } 203 204 ; FUNC-LABEL: {{^}}global_sextload_v4i16_to_v4i32: 205 ; GCN-NOHSA: buffer_load_dwordx2 206 207 ; GCN-HSA: flat_load_dwordx2 208 209 ; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 210 ; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 211 ; EG-DAG: VTX_READ_16 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]] 212 ; EG-DAG: VTX_READ_16 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]] 213 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 214 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 215 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal 216 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal 217 ; EG-DAG: 16 218 ; EG-DAG: 16 219 ; EG-DAG: 16 220 ; EG-DAG: 16 221 define void @global_sextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(1)* %in) #0 { 222 %load = load <4 x i16>, <4 x i16> addrspace(1)* %in 223 %ext = sext <4 x i16> %load to <4 x i32> 224 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 225 ret void 226 } 227 228 ; FUNC-LABEL: {{^}}global_zextload_v8i16_to_v8i32: 229 ; GCN-NOHSA: buffer_load_dwordx4 230 ; GCN-HSA: flat_load_dwordx4 231 define void @global_zextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(1)* %in) #0 { 232 %load = load <8 x i16>, <8 x i16> addrspace(1)* %in 233 %ext = zext <8 x i16> %load to <8 x i32> 234 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 235 ret void 236 } 237 238 ; FUNC-LABEL: {{^}}global_sextload_v8i16_to_v8i32: 239 ; GCN-NOHSA: buffer_load_dwordx4 240 ; GCN-HSA: flat_load_dwordx4 241 define void @global_sextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(1)* %in) #0 { 242 %load = load <8 x i16>, <8 x i16> addrspace(1)* %in 243 %ext = sext <8 x i16> %load to <8 x i32> 244 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 245 ret void 246 } 247 248 ; FUNC-LABEL: {{^}}global_zextload_v16i16_to_v16i32: 249 ; GCN-NOHSA: buffer_load_dwordx4 250 ; GCN-NOHSA: buffer_load_dwordx4 251 252 ; GCN-HSA: flat_load_dwordx4 253 ; GCN-HSA: flat_load_dwordx4 254 define void @global_zextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(1)* %in) #0 { 255 %load = load <16 x i16>, <16 x i16> addrspace(1)* %in 256 %ext = zext <16 x i16> %load to <16 x i32> 257 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 258 ret void 259 } 260 261 ; FUNC-LABEL: {{^}}global_sextload_v16i16_to_v16i32: 262 define void @global_sextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(1)* %in) #0 { 263 %load = load <16 x i16>, <16 x i16> addrspace(1)* %in 264 %ext = sext <16 x i16> %load to <16 x i32> 265 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 266 ret void 267 } 268 269 ; FUNC-LABEL: {{^}}global_zextload_v32i16_to_v32i32: 270 ; GCN-NOHSA: buffer_load_dwordx4 271 ; GCN-NOHSA: buffer_load_dwordx4 272 ; GCN-NOHSA: buffer_load_dwordx4 273 ; GCN-NOHSA: buffer_load_dwordx4 274 275 ; GCN-HSA: flat_load_dwordx4 276 ; GCN-HSA: flat_load_dwordx4 277 ; GCN-HSA: flat_load_dwordx4 278 ; GCN-HSA: flat_load_dwordx4 279 define void @global_zextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(1)* %in) #0 { 280 %load = load <32 x i16>, <32 x i16> addrspace(1)* %in 281 %ext = zext <32 x i16> %load to <32 x i32> 282 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 283 ret void 284 } 285 286 ; FUNC-LABEL: {{^}}global_sextload_v32i16_to_v32i32: 287 ; GCN-NOHSA: buffer_load_dwordx4 288 ; GCN-NOHSA: buffer_load_dwordx4 289 ; GCN-NOHSA: buffer_load_dwordx4 290 ; GCN-NOHSA: buffer_load_dwordx4 291 292 ; GCN-HSA: flat_load_dwordx4 293 ; GCN-HSA: flat_load_dwordx4 294 ; GCN-HSA: flat_load_dwordx4 295 ; GCN-HSA: flat_load_dwordx4 296 define void @global_sextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(1)* %in) #0 { 297 %load = load <32 x i16>, <32 x i16> addrspace(1)* %in 298 %ext = sext <32 x i16> %load to <32 x i32> 299 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 300 ret void 301 } 302 303 ; FUNC-LABEL: {{^}}global_zextload_v64i16_to_v64i32: 304 ; GCN-NOHSA: buffer_load_dwordx4 305 ; GCN-NOHSA: buffer_load_dwordx4 306 ; GCN-NOHSA: buffer_load_dwordx4 307 ; GCN-NOHSA: buffer_load_dwordx4 308 ; GCN-NOHSA: buffer_load_dwordx4 309 ; GCN-NOHSA: buffer_load_dwordx4 310 ; GCN-NOHSA: buffer_load_dwordx4 311 ; GCN-NOHSA: buffer_load_dwordx4 312 313 ; GCN-HSA: flat_load_dwordx4 314 ; GCN-HSA: flat_load_dwordx4 315 ; GCN-HSA: flat_load_dwordx4 316 ; GCN-HSA: flat_load_dwordx4 317 ; GCN-HSA: flat_load_dwordx4 318 ; GCN-HSA: flat_load_dwordx4 319 ; GCN-HSA: flat_load_dwordx4 320 ; GCN-HSA: flat_load_dwordx4 321 define void @global_zextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(1)* %in) #0 { 322 %load = load <64 x i16>, <64 x i16> addrspace(1)* %in 323 %ext = zext <64 x i16> %load to <64 x i32> 324 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 325 ret void 326 } 327 328 ; FUNC-LABEL: {{^}}global_sextload_v64i16_to_v64i32: 329 define void @global_sextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(1)* %in) #0 { 330 %load = load <64 x i16>, <64 x i16> addrspace(1)* %in 331 %ext = sext <64 x i16> %load to <64 x i32> 332 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 333 ret void 334 } 335 336 ; FUNC-LABEL: {{^}}global_zextload_i16_to_i64: 337 ; GCN-NOHSA-DAG: buffer_load_ushort v[[LO:[0-9]+]], 338 ; GCN-HSA-DAG: flat_load_ushort v[[LO:[0-9]+]], 339 ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 340 341 ; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 342 ; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 343 define void @global_zextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(1)* %in) #0 { 344 %a = load i16, i16 addrspace(1)* %in 345 %ext = zext i16 %a to i64 346 store i64 %ext, i64 addrspace(1)* %out 347 ret void 348 } 349 350 ; FUNC-LABEL: {{^}}global_sextload_i16_to_i64: 351 ; GCN-NOHSA-DAG: buffer_load_sshort v[[LO:[0-9]+]], 352 ; GCN-HSA-DAG: flat_load_sshort v[[LO:[0-9]+]], 353 ; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] 354 355 ; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 356 ; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 357 define void @global_sextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(1)* %in) #0 { 358 %a = load i16, i16 addrspace(1)* %in 359 %ext = sext i16 %a to i64 360 store i64 %ext, i64 addrspace(1)* %out 361 ret void 362 } 363 364 ; FUNC-LABEL: {{^}}global_zextload_v1i16_to_v1i64: 365 define void @global_zextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(1)* %in) #0 { 366 %load = load <1 x i16>, <1 x i16> addrspace(1)* %in 367 %ext = zext <1 x i16> %load to <1 x i64> 368 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 369 ret void 370 } 371 372 ; FUNC-LABEL: {{^}}global_sextload_v1i16_to_v1i64: 373 define void @global_sextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(1)* %in) #0 { 374 %load = load <1 x i16>, <1 x i16> addrspace(1)* %in 375 %ext = sext <1 x i16> %load to <1 x i64> 376 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 377 ret void 378 } 379 380 ; FUNC-LABEL: {{^}}global_zextload_v2i16_to_v2i64: 381 define void @global_zextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) #0 { 382 %load = load <2 x i16>, <2 x i16> addrspace(1)* %in 383 %ext = zext <2 x i16> %load to <2 x i64> 384 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 385 ret void 386 } 387 388 ; FUNC-LABEL: {{^}}global_sextload_v2i16_to_v2i64: 389 define void @global_sextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) #0 { 390 %load = load <2 x i16>, <2 x i16> addrspace(1)* %in 391 %ext = sext <2 x i16> %load to <2 x i64> 392 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 393 ret void 394 } 395 396 ; FUNC-LABEL: {{^}}global_zextload_v4i16_to_v4i64: 397 define void @global_zextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(1)* %in) #0 { 398 %load = load <4 x i16>, <4 x i16> addrspace(1)* %in 399 %ext = zext <4 x i16> %load to <4 x i64> 400 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 401 ret void 402 } 403 404 ; FUNC-LABEL: {{^}}global_sextload_v4i16_to_v4i64: 405 define void @global_sextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(1)* %in) #0 { 406 %load = load <4 x i16>, <4 x i16> addrspace(1)* %in 407 %ext = sext <4 x i16> %load to <4 x i64> 408 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 409 ret void 410 } 411 412 ; FUNC-LABEL: {{^}}global_zextload_v8i16_to_v8i64: 413 define void @global_zextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(1)* %in) #0 { 414 %load = load <8 x i16>, <8 x i16> addrspace(1)* %in 415 %ext = zext <8 x i16> %load to <8 x i64> 416 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 417 ret void 418 } 419 420 ; FUNC-LABEL: {{^}}global_sextload_v8i16_to_v8i64: 421 define void @global_sextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(1)* %in) #0 { 422 %load = load <8 x i16>, <8 x i16> addrspace(1)* %in 423 %ext = sext <8 x i16> %load to <8 x i64> 424 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 425 ret void 426 } 427 428 ; FUNC-LABEL: {{^}}global_zextload_v16i16_to_v16i64: 429 define void @global_zextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(1)* %in) #0 { 430 %load = load <16 x i16>, <16 x i16> addrspace(1)* %in 431 %ext = zext <16 x i16> %load to <16 x i64> 432 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 433 ret void 434 } 435 436 ; FUNC-LABEL: {{^}}global_sextload_v16i16_to_v16i64: 437 define void @global_sextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(1)* %in) #0 { 438 %load = load <16 x i16>, <16 x i16> addrspace(1)* %in 439 %ext = sext <16 x i16> %load to <16 x i64> 440 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 441 ret void 442 } 443 444 ; FUNC-LABEL: {{^}}global_zextload_v32i16_to_v32i64: 445 define void @global_zextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(1)* %in) #0 { 446 %load = load <32 x i16>, <32 x i16> addrspace(1)* %in 447 %ext = zext <32 x i16> %load to <32 x i64> 448 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 449 ret void 450 } 451 452 ; FUNC-LABEL: {{^}}global_sextload_v32i16_to_v32i64: 453 define void @global_sextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(1)* %in) #0 { 454 %load = load <32 x i16>, <32 x i16> addrspace(1)* %in 455 %ext = sext <32 x i16> %load to <32 x i64> 456 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 457 ret void 458 } 459 460 ; ; XFUNC-LABEL: {{^}}global_zextload_v64i16_to_v64i64: 461 ; define void @global_zextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(1)* %in) #0 { 462 ; %load = load <64 x i16>, <64 x i16> addrspace(1)* %in 463 ; %ext = zext <64 x i16> %load to <64 x i64> 464 ; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 465 ; ret void 466 ; } 467 468 ; ; XFUNC-LABEL: {{^}}global_sextload_v64i16_to_v64i64: 469 ; define void @global_sextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(1)* %in) #0 { 470 ; %load = load <64 x i16>, <64 x i16> addrspace(1)* %in 471 ; %ext = sext <64 x i16> %load to <64 x i64> 472 ; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 473 ; ret void 474 ; } 475 476 attributes #0 = { nounwind } 477