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 6 ; FUNC-LABEL: {{^}}constant_load_i16: 7 ; GCN-NOHSA: buffer_load_ushort v{{[0-9]+}} 8 ; GCN-HSA: flat_load_ushort 9 10 ; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0 11 define void @constant_load_i16(i16 addrspace(1)* %out, i16 addrspace(2)* %in) { 12 entry: 13 %ld = load i16, i16 addrspace(2)* %in 14 store i16 %ld, i16 addrspace(1)* %out 15 ret void 16 } 17 18 ; FUNC-LABEL: {{^}}constant_load_v2i16: 19 ; GCN: s_load_dword s 20 21 ; EG: VTX_READ_32 22 define void @constant_load_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) { 23 entry: 24 %ld = load <2 x i16>, <2 x i16> addrspace(2)* %in 25 store <2 x i16> %ld, <2 x i16> addrspace(1)* %out 26 ret void 27 } 28 29 ; FUNC-LABEL: {{^}}constant_load_v3i16: 30 ; GCN: s_load_dwordx2 s 31 32 ; EG-DAG: VTX_READ_32 33 ; EG-DAG: VTX_READ_16 34 define void @constant_load_v3i16(<3 x i16> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 35 entry: 36 %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in 37 store <3 x i16> %ld, <3 x i16> addrspace(1)* %out 38 ret void 39 } 40 41 ; FUNC-LABEL: {{^}}constant_load_v4i16: 42 ; GCN: s_load_dwordx2 43 44 ; EG: VTX_READ_64 45 define void @constant_load_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) { 46 entry: 47 %ld = load <4 x i16>, <4 x i16> addrspace(2)* %in 48 store <4 x i16> %ld, <4 x i16> addrspace(1)* %out 49 ret void 50 } 51 52 ; FUNC-LABEL: {{^}}constant_load_v8i16: 53 ; GCN: s_load_dwordx4 54 55 ; EG: VTX_READ_128 56 define void @constant_load_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) { 57 entry: 58 %ld = load <8 x i16>, <8 x i16> addrspace(2)* %in 59 store <8 x i16> %ld, <8 x i16> addrspace(1)* %out 60 ret void 61 } 62 63 ; FUNC-LABEL: {{^}}constant_load_v16i16: 64 ; GCN: s_load_dwordx8 65 66 ; EG: VTX_READ_128 67 ; EG: VTX_READ_128 68 define void @constant_load_v16i16(<16 x i16> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) { 69 entry: 70 %ld = load <16 x i16>, <16 x i16> addrspace(2)* %in 71 store <16 x i16> %ld, <16 x i16> addrspace(1)* %out 72 ret void 73 } 74 75 ; FUNC-LABEL: {{^}}constant_zextload_i16_to_i32: 76 ; GCN-NOHSA: buffer_load_ushort 77 ; GCN-NOHSA: buffer_store_dword 78 79 ; GCN-HSA: flat_load_ushort 80 ; GCN-HSA: flat_store_dword 81 82 ; EG: VTX_READ_16 T{{[0-9]+\.X, T[0-9]+\.X}} 83 define void @constant_zextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 84 %a = load i16, i16 addrspace(2)* %in 85 %ext = zext i16 %a to i32 86 store i32 %ext, i32 addrspace(1)* %out 87 ret void 88 } 89 90 ; FUNC-LABEL: {{^}}constant_sextload_i16_to_i32: 91 ; GCN-NOHSA: buffer_load_sshort 92 ; GCN-NOHSA: buffer_store_dword 93 94 ; GCN-HSA: flat_load_sshort 95 ; GCN-HSA: flat_store_dword 96 97 ; EG: VTX_READ_16 [[DST:T[0-9]\.[XYZW]]], [[DST]] 98 ; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal 99 ; EG: 16 100 define void @constant_sextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 101 %a = load i16, i16 addrspace(2)* %in 102 %ext = sext i16 %a to i32 103 store i32 %ext, i32 addrspace(1)* %out 104 ret void 105 } 106 107 ; FUNC-LABEL: {{^}}constant_zextload_v1i16_to_v1i32: 108 ; GCN-NOHSA: buffer_load_ushort 109 ; GCN-HSA: flat_load_ushort 110 define void @constant_zextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 111 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 112 %ext = zext <1 x i16> %load to <1 x i32> 113 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 114 ret void 115 } 116 117 ; FUNC-LABEL: {{^}}constant_sextload_v1i16_to_v1i32: 118 ; GCN-NOHSA: buffer_load_sshort 119 ; GCN-HSA: flat_load_sshort 120 define void @constant_sextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 121 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 122 %ext = sext <1 x i16> %load to <1 x i32> 123 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 124 ret void 125 } 126 127 ; FUNC-LABEL: {{^}}constant_zextload_v2i16_to_v2i32: 128 ; GCN: s_load_dword s 129 ; GCN-DAG: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 0xffff{{$}} 130 ; GCN-DAG: s_lshr_b32 s{{[0-9]+}}, s{{[0-9]+}}, 16 131 define void @constant_zextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 132 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 133 %ext = zext <2 x i16> %load to <2 x i32> 134 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 135 ret void 136 } 137 138 ; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i32: 139 ; GCN: s_load_dword s 140 ; GCN-DAG: s_ashr_i32 141 ; GCN-DAG: s_sext_i32_i16 142 143 ; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 144 ; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 145 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 146 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 147 ; EG-DAG: 16 148 ; EG-DAG: 16 149 define void @constant_sextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 150 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 151 %ext = sext <2 x i16> %load to <2 x i32> 152 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 153 ret void 154 } 155 156 ; FUNC-LABEL: {{^}}constant_constant_zextload_v3i16_to_v3i32: 157 ; GCN: s_load_dwordx2 158 define void @constant_constant_zextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 159 entry: 160 %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in 161 %ext = zext <3 x i16> %ld to <3 x i32> 162 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 163 ret void 164 } 165 166 ; FUNC-LABEL: {{^}}constant_constant_sextload_v3i16_to_v3i32: 167 ; GCN: s_load_dwordx2 168 define void @constant_constant_sextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 169 entry: 170 %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in 171 %ext = sext <3 x i16> %ld to <3 x i32> 172 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 173 ret void 174 } 175 176 ; FUNC-LABEL: {{^}}constant_constant_zextload_v4i16_to_v4i32: 177 ; GCN: s_load_dwordx2 178 ; GCN-DAG: s_and_b32 179 ; GCN-DAG: s_lshr_b32 180 181 ; EG: VTX_READ_16 182 ; EG: VTX_READ_16 183 ; EG: VTX_READ_16 184 ; EG: VTX_READ_16 185 define void @constant_constant_zextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 186 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 187 %ext = zext <4 x i16> %load to <4 x i32> 188 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 189 ret void 190 } 191 192 ; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i32: 193 ; GCN: s_load_dwordx2 194 ; GCN-DAG: s_ashr_i32 195 ; GCN-DAG: s_sext_i32_i16 196 197 ; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 198 ; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 199 ; EG-DAG: VTX_READ_16 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]] 200 ; EG-DAG: VTX_READ_16 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]] 201 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 202 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 203 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal 204 ; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal 205 ; EG-DAG: 16 206 ; EG-DAG: 16 207 ; EG-DAG: 16 208 ; EG-DAG: 16 209 define void @constant_sextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 210 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 211 %ext = sext <4 x i16> %load to <4 x i32> 212 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 213 ret void 214 } 215 216 ; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i32: 217 ; GCN: s_load_dwordx4 218 ; GCN-DAG: s_and_b32 219 ; GCN-DAG: s_lshr_b32 220 define void @constant_zextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 221 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 222 %ext = zext <8 x i16> %load to <8 x i32> 223 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 224 ret void 225 } 226 227 ; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i32: 228 ; GCN: s_load_dwordx4 229 ; GCN-DAG: s_ashr_i32 230 ; GCN-DAG: s_sext_i32_i16 231 define void @constant_sextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 232 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 233 %ext = sext <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: {{^}}constant_zextload_v16i16_to_v16i32: 239 ; GCN: s_load_dwordx8 240 ; GCN-DAG: s_and_b32 241 ; GCN-DAG: s_lshr_b32 242 define void @constant_zextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 243 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 244 %ext = zext <16 x i16> %load to <16 x i32> 245 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 246 ret void 247 } 248 249 ; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i32: 250 ; GCN: s_load_dwordx8 251 ; GCN-DAG: s_ashr_i32 252 ; GCN-DAG: s_sext_i32_i16 253 define void @constant_sextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 254 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 255 %ext = sext <16 x i16> %load to <16 x i32> 256 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 257 ret void 258 } 259 260 ; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i32: 261 ; GCN-DAG: s_load_dwordx16 262 ; GCN-DAG: s_mov_b32 [[K:s[0-9]+]], 0xffff{{$}} 263 ; GCN: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, [[K]] 264 ; GCN: s_lshr_b32 s{{[0-9]+}}, s{{[0-9]+}}, 16 265 define void @constant_zextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 266 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 267 %ext = zext <32 x i16> %load to <32 x i32> 268 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 269 ret void 270 } 271 272 ; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i32: 273 ; GCN: s_load_dwordx16 274 ; GCN-DAG: s_ashr_i32 275 ; GCN-DAG: s_sext_i32_i16 276 define void @constant_sextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 277 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 278 %ext = sext <32 x i16> %load to <32 x i32> 279 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 280 ret void 281 } 282 283 ; FUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i32: 284 ; GCN: s_load_dwordx16 285 ; GCN: s_load_dwordx16 286 define void @constant_zextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 287 %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 288 %ext = zext <64 x i16> %load to <64 x i32> 289 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 290 ret void 291 } 292 293 ; FUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i32: 294 define void @constant_sextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 295 %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 296 %ext = sext <64 x i16> %load to <64 x i32> 297 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 298 ret void 299 } 300 301 ; FUNC-LABEL: {{^}}constant_zextload_i16_to_i64: 302 ; GCN-NOHSA-DAG: buffer_load_ushort v[[LO:[0-9]+]], 303 ; GCN-HSA-DAG: flat_load_ushort v[[LO:[0-9]+]], 304 ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 305 306 ; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 307 ; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 308 define void @constant_zextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 309 %a = load i16, i16 addrspace(2)* %in 310 %ext = zext i16 %a to i64 311 store i64 %ext, i64 addrspace(1)* %out 312 ret void 313 } 314 315 ; FUNC-LABEL: {{^}}constant_sextload_i16_to_i64: 316 ; GCN-NOHSA-DAG: buffer_load_sshort v[[LO:[0-9]+]], 317 ; GCN-HSA-DAG: flat_load_sshort v[[LO:[0-9]+]], 318 ; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] 319 320 ; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 321 ; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 322 define void @constant_sextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 323 %a = load i16, i16 addrspace(2)* %in 324 %ext = sext i16 %a to i64 325 store i64 %ext, i64 addrspace(1)* %out 326 ret void 327 } 328 329 ; FUNC-LABEL: {{^}}constant_zextload_v1i16_to_v1i64: 330 define void @constant_zextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 331 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 332 %ext = zext <1 x i16> %load to <1 x i64> 333 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 334 ret void 335 } 336 337 ; FUNC-LABEL: {{^}}constant_sextload_v1i16_to_v1i64: 338 define void @constant_sextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 339 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 340 %ext = sext <1 x i16> %load to <1 x i64> 341 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 342 ret void 343 } 344 345 ; FUNC-LABEL: {{^}}constant_zextload_v2i16_to_v2i64: 346 define void @constant_zextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 347 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 348 %ext = zext <2 x i16> %load to <2 x i64> 349 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 350 ret void 351 } 352 353 ; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i64: 354 define void @constant_sextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 355 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 356 %ext = sext <2 x i16> %load to <2 x i64> 357 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 358 ret void 359 } 360 361 ; FUNC-LABEL: {{^}}constant_zextload_v4i16_to_v4i64: 362 define void @constant_zextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 363 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 364 %ext = zext <4 x i16> %load to <4 x i64> 365 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 366 ret void 367 } 368 369 ; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i64: 370 define void @constant_sextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 371 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 372 %ext = sext <4 x i16> %load to <4 x i64> 373 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 374 ret void 375 } 376 377 ; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i64: 378 define void @constant_zextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 379 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 380 %ext = zext <8 x i16> %load to <8 x i64> 381 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 382 ret void 383 } 384 385 ; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i64: 386 define void @constant_sextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 387 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 388 %ext = sext <8 x i16> %load to <8 x i64> 389 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 390 ret void 391 } 392 393 ; FUNC-LABEL: {{^}}constant_zextload_v16i16_to_v16i64: 394 define void @constant_zextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 395 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 396 %ext = zext <16 x i16> %load to <16 x i64> 397 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 398 ret void 399 } 400 401 ; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i64: 402 define void @constant_sextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 403 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 404 %ext = sext <16 x i16> %load to <16 x i64> 405 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 406 ret void 407 } 408 409 ; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i64: 410 define void @constant_zextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 411 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 412 %ext = zext <32 x i16> %load to <32 x i64> 413 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 414 ret void 415 } 416 417 ; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i64: 418 define void @constant_sextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 419 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 420 %ext = sext <32 x i16> %load to <32 x i64> 421 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 422 ret void 423 } 424 425 ; ; XFUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i64: 426 ; define void @constant_zextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 427 ; %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 428 ; %ext = zext <64 x i16> %load to <64 x i64> 429 ; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 430 ; ret void 431 ; } 432 433 ; ; XFUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i64: 434 ; define void @constant_sextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 435 ; %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 436 ; %ext = sext <64 x i16> %load to <64 x i64> 437 ; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 438 ; ret void 439 ; } 440 441 attributes #0 = { nounwind } 442