1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4 5 6; FUNC-LABEL: {{^}}local_load_i8: 7; GCN-NOT: s_wqm_b64 8; GCN: s_mov_b32 m0 9; GCN: ds_read_u8 10 11; EG: LDS_UBYTE_READ_RET 12define void @local_load_i8(i8 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 13entry: 14 %ld = load i8, i8 addrspace(3)* %in 15 store i8 %ld, i8 addrspace(3)* %out 16 ret void 17} 18 19; FUNC-LABEL: {{^}}local_load_v2i8: 20; GCN-NOT: s_wqm_b64 21; GCN: s_mov_b32 m0 22; GCN: ds_read_u16 23 24; EG: LDS_USHORT_READ_RET 25define void @local_load_v2i8(<2 x i8> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 26entry: 27 %ld = load <2 x i8>, <2 x i8> addrspace(3)* %in 28 store <2 x i8> %ld, <2 x i8> addrspace(3)* %out 29 ret void 30} 31 32; FUNC-LABEL: {{^}}local_load_v3i8: 33; GCN: ds_read_b32 34 35; EG: DS_READ_RET 36define void @local_load_v3i8(<3 x i8> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 { 37entry: 38 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in 39 store <3 x i8> %ld, <3 x i8> addrspace(3)* %out 40 ret void 41} 42 43; FUNC-LABEL: {{^}}local_load_v4i8: 44; GCN: ds_read_b32 45 46; EG: LDS_READ_RET 47define void @local_load_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 48entry: 49 %ld = load <4 x i8>, <4 x i8> addrspace(3)* %in 50 store <4 x i8> %ld, <4 x i8> addrspace(3)* %out 51 ret void 52} 53 54; FUNC-LABEL: {{^}}local_load_v8i8: 55; GCN: ds_read_b64 56 57; EG: LDS_READ_RET 58; EG: LDS_READ_RET 59define void @local_load_v8i8(<8 x i8> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 60entry: 61 %ld = load <8 x i8>, <8 x i8> addrspace(3)* %in 62 store <8 x i8> %ld, <8 x i8> addrspace(3)* %out 63 ret void 64} 65 66; FUNC-LABEL: {{^}}local_load_v16i8: 67; GCN: ds_read2_b64 v{{\[}}[[LO:[0-9]+]]:[[HI:[0-9]+]]{{\]}}, v{{[0-9]+}} offset0:1{{$}} 68; GCN: ds_write2_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]{{\]}} offset0:1{{$}} 69 70; EG: LDS_READ_RET 71; EG: LDS_READ_RET 72; EG: LDS_READ_RET 73; EG: LDS_READ_RET 74define void @local_load_v16i8(<16 x i8> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 75entry: 76 %ld = load <16 x i8>, <16 x i8> addrspace(3)* %in 77 store <16 x i8> %ld, <16 x i8> addrspace(3)* %out 78 ret void 79} 80 81; FUNC-LABEL: {{^}}local_zextload_i8_to_i32: 82; GCN-NOT: s_wqm_b64 83; GCN: s_mov_b32 m0 84; GCN: ds_read_u8 85 86; EG: LDS_UBYTE_READ_RET 87define void @local_zextload_i8_to_i32(i32 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 88 %a = load i8, i8 addrspace(3)* %in 89 %ext = zext i8 %a to i32 90 store i32 %ext, i32 addrspace(3)* %out 91 ret void 92} 93 94; FUNC-LABEL: {{^}}local_sextload_i8_to_i32: 95; GCN-NOT: s_wqm_b64 96; GCN: s_mov_b32 m0 97; GCN: ds_read_i8 98 99; EG: LDS_UBYTE_READ_RET 100; EG: BFE_INT 101define void @local_sextload_i8_to_i32(i32 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 102 %ld = load i8, i8 addrspace(3)* %in 103 %ext = sext i8 %ld to i32 104 store i32 %ext, i32 addrspace(3)* %out 105 ret void 106} 107 108; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i32: 109define void @local_zextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 110 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 111 %ext = zext <1 x i8> %load to <1 x i32> 112 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out 113 ret void 114} 115 116; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i32: 117define void @local_sextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 118 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 119 %ext = sext <1 x i8> %load to <1 x i32> 120 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out 121 ret void 122} 123 124; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i32: 125; GCN: ds_read_u8 126; GCN: ds_read_u8 127 128; EG: LDS_UBYTE_READ_RET 129; EG: LDS_UBYTE_READ_RET 130define void @local_zextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 131 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 132 %ext = zext <2 x i8> %load to <2 x i32> 133 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out 134 ret void 135} 136 137; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i32: 138; GCN-NOT: s_wqm_b64 139; GCN: s_mov_b32 m0 140; GCN: ds_read_i8 141; GCN: ds_read_i8 142 143; EG-DAG: LDS_UBYTE_READ_RET 144; EG-DAG: LDS_UBYTE_READ_RET 145; EG-DAG: BFE_INT 146; EG-DAG: BFE_INT 147define void @local_sextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 148 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 149 %ext = sext <2 x i8> %load to <2 x i32> 150 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out 151 ret void 152} 153 154; FUNC-LABEL: {{^}}local_zextload_v3i8_to_v3i32: 155; GCN: ds_read_b32 156 157; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 158; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8 159; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff, 160define void @local_zextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 { 161entry: 162 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in 163 %ext = zext <3 x i8> %ld to <3 x i32> 164 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out 165 ret void 166} 167 168; FUNC-LABEL: {{^}}local_sextload_v3i8_to_v3i32: 169; GCN-NOT: s_wqm_b64 170; GCN: s_mov_b32 m0 171; GCN: ds_read_b32 172 173; GCN-DAG: v_bfe_i32 174; GCN-DAG: v_bfe_i32 175; GCN-DAG: v_bfe_i32 176; GCN-DAG: v_bfe_i32 177 178; GCN-DAG: ds_write_b64 179; GCN-DAG: ds_write_b32 180 181define void @local_sextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 { 182entry: 183 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in 184 %ext = sext <3 x i8> %ld to <3 x i32> 185 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out 186 ret void 187} 188 189; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i32: 190; GCN-NOT: s_wqm_b64 191; GCN: s_mov_b32 m0 192; GCN: ds_read_u8 193; GCN: ds_read_u8 194; GCN: ds_read_u8 195; GCN: ds_read_u8 196 197; EG: LDS_UBYTE_READ_RET 198; EG: LDS_UBYTE_READ_RET 199; EG: LDS_UBYTE_READ_RET 200; EG: LDS_UBYTE_READ_RET 201define void @local_zextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 202 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 203 %ext = zext <4 x i8> %load to <4 x i32> 204 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out 205 ret void 206} 207 208; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i32: 209; GCN-NOT: s_wqm_b64 210; GCN: s_mov_b32 m0 211; GCN: ds_read_i8 212; GCN: ds_read_i8 213; GCN: ds_read_i8 214; GCN: ds_read_i8 215 216; EG-DAG: LDS_UBYTE_READ_RET 217; EG-DAG: LDS_UBYTE_READ_RET 218; EG-DAG: LDS_UBYTE_READ_RET 219; EG-DAG: LDS_UBYTE_READ_RET 220; EG-DAG: BFE_INT 221; EG-DAG: BFE_INT 222; EG-DAG: BFE_INT 223; EG-DAG: BFE_INT 224define void @local_sextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 225 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 226 %ext = sext <4 x i8> %load to <4 x i32> 227 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out 228 ret void 229} 230 231; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i32: 232define void @local_zextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 233 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 234 %ext = zext <8 x i8> %load to <8 x i32> 235 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out 236 ret void 237} 238 239; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i32: 240define void @local_sextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 241 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 242 %ext = sext <8 x i8> %load to <8 x i32> 243 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out 244 ret void 245} 246 247; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i32: 248define void @local_zextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 249 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 250 %ext = zext <16 x i8> %load to <16 x i32> 251 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out 252 ret void 253} 254 255; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i32: 256define void @local_sextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 257 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 258 %ext = sext <16 x i8> %load to <16 x i32> 259 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out 260 ret void 261} 262 263; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i32: 264define void @local_zextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 265 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 266 %ext = zext <32 x i8> %load to <32 x i32> 267 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out 268 ret void 269} 270 271; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i32: 272define void @local_sextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 273 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 274 %ext = sext <32 x i8> %load to <32 x i32> 275 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out 276 ret void 277} 278 279; FUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i32: 280define void @local_zextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 281 %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 282 %ext = zext <64 x i8> %load to <64 x i32> 283 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out 284 ret void 285} 286 287; FUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i32: 288define void @local_sextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 289 %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 290 %ext = sext <64 x i8> %load to <64 x i32> 291 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out 292 ret void 293} 294 295; FUNC-LABEL: {{^}}local_zextload_i8_to_i64: 296; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 297; GCN-DAG: ds_read_u8 v[[LO:[0-9]+]], 298; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]] 299define void @local_zextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 300 %a = load i8, i8 addrspace(3)* %in 301 %ext = zext i8 %a to i64 302 store i64 %ext, i64 addrspace(3)* %out 303 ret void 304} 305 306; FUNC-LABEL: {{^}}local_sextload_i8_to_i64: 307; GCN: ds_read_i8 v[[LO:[0-9]+]], 308; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] 309 310; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 311define void @local_sextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 312 %a = load i8, i8 addrspace(3)* %in 313 %ext = sext i8 %a to i64 314 store i64 %ext, i64 addrspace(3)* %out 315 ret void 316} 317 318; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i64: 319define void @local_zextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 320 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 321 %ext = zext <1 x i8> %load to <1 x i64> 322 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out 323 ret void 324} 325 326; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i64: 327define void @local_sextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 328 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 329 %ext = sext <1 x i8> %load to <1 x i64> 330 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out 331 ret void 332} 333 334; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i64: 335define void @local_zextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 336 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 337 %ext = zext <2 x i8> %load to <2 x i64> 338 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out 339 ret void 340} 341 342; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i64: 343define void @local_sextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 344 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 345 %ext = sext <2 x i8> %load to <2 x i64> 346 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out 347 ret void 348} 349 350; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i64: 351define void @local_zextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 352 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 353 %ext = zext <4 x i8> %load to <4 x i64> 354 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out 355 ret void 356} 357 358; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i64: 359define void @local_sextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 360 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 361 %ext = sext <4 x i8> %load to <4 x i64> 362 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out 363 ret void 364} 365 366; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i64: 367define void @local_zextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 368 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 369 %ext = zext <8 x i8> %load to <8 x i64> 370 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out 371 ret void 372} 373 374; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i64: 375define void @local_sextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 376 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 377 %ext = sext <8 x i8> %load to <8 x i64> 378 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out 379 ret void 380} 381 382; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i64: 383define void @local_zextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 384 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 385 %ext = zext <16 x i8> %load to <16 x i64> 386 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out 387 ret void 388} 389 390; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i64: 391define void @local_sextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 392 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 393 %ext = sext <16 x i8> %load to <16 x i64> 394 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out 395 ret void 396} 397 398; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i64: 399define void @local_zextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 400 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 401 %ext = zext <32 x i8> %load to <32 x i64> 402 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out 403 ret void 404} 405 406; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i64: 407define void @local_sextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 408 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 409 %ext = sext <32 x i8> %load to <32 x i64> 410 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out 411 ret void 412} 413 414; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i64: 415; define void @local_zextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 416; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 417; %ext = zext <64 x i8> %load to <64 x i64> 418; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out 419; ret void 420; } 421 422; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i64: 423; define void @local_sextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 424; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 425; %ext = sext <64 x i8> %load to <64 x i64> 426; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out 427; ret void 428; } 429 430; FUNC-LABEL: {{^}}local_zextload_i8_to_i16: 431; GCN: ds_read_u8 v[[VAL:[0-9]+]], 432; GCN: ds_write_b16 v[[VAL:[0-9]+]] 433define void @local_zextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 434 %a = load i8, i8 addrspace(3)* %in 435 %ext = zext i8 %a to i16 436 store i16 %ext, i16 addrspace(3)* %out 437 ret void 438} 439 440; FUNC-LABEL: {{^}}local_sextload_i8_to_i16: 441; GCN: ds_read_i8 v[[VAL:[0-9]+]], 442; GCN: ds_write_b16 v{{[0-9]+}}, v[[VAL]] 443define void @local_sextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 { 444 %a = load i8, i8 addrspace(3)* %in 445 %ext = sext i8 %a to i16 446 store i16 %ext, i16 addrspace(3)* %out 447 ret void 448} 449 450; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i16: 451define void @local_zextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 452 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 453 %ext = zext <1 x i8> %load to <1 x i16> 454 store <1 x i16> %ext, <1 x i16> addrspace(3)* %out 455 ret void 456} 457 458; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i16: 459define void @local_sextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 { 460 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in 461 %ext = sext <1 x i8> %load to <1 x i16> 462 store <1 x i16> %ext, <1 x i16> addrspace(3)* %out 463 ret void 464} 465 466; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i16: 467define void @local_zextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 468 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 469 %ext = zext <2 x i8> %load to <2 x i16> 470 store <2 x i16> %ext, <2 x i16> addrspace(3)* %out 471 ret void 472} 473 474; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i16: 475define void @local_sextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 { 476 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in 477 %ext = sext <2 x i8> %load to <2 x i16> 478 store <2 x i16> %ext, <2 x i16> addrspace(3)* %out 479 ret void 480} 481 482; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i16: 483define void @local_zextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 484 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 485 %ext = zext <4 x i8> %load to <4 x i16> 486 store <4 x i16> %ext, <4 x i16> addrspace(3)* %out 487 ret void 488} 489 490; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i16: 491define void @local_sextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 { 492 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in 493 %ext = sext <4 x i8> %load to <4 x i16> 494 store <4 x i16> %ext, <4 x i16> addrspace(3)* %out 495 ret void 496} 497 498; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i16: 499define void @local_zextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 500 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 501 %ext = zext <8 x i8> %load to <8 x i16> 502 store <8 x i16> %ext, <8 x i16> addrspace(3)* %out 503 ret void 504} 505 506; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i16: 507define void @local_sextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 { 508 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in 509 %ext = sext <8 x i8> %load to <8 x i16> 510 store <8 x i16> %ext, <8 x i16> addrspace(3)* %out 511 ret void 512} 513 514; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i16: 515define void @local_zextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 516 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 517 %ext = zext <16 x i8> %load to <16 x i16> 518 store <16 x i16> %ext, <16 x i16> addrspace(3)* %out 519 ret void 520} 521 522; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i16: 523define void @local_sextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 { 524 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in 525 %ext = sext <16 x i8> %load to <16 x i16> 526 store <16 x i16> %ext, <16 x i16> addrspace(3)* %out 527 ret void 528} 529 530; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i16: 531define void @local_zextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 532 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 533 %ext = zext <32 x i8> %load to <32 x i16> 534 store <32 x i16> %ext, <32 x i16> addrspace(3)* %out 535 ret void 536} 537 538; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i16: 539define void @local_sextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 { 540 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in 541 %ext = sext <32 x i8> %load to <32 x i16> 542 store <32 x i16> %ext, <32 x i16> addrspace(3)* %out 543 ret void 544} 545 546; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i16: 547; define void @local_zextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 548; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 549; %ext = zext <64 x i8> %load to <64 x i16> 550; store <64 x i16> %ext, <64 x i16> addrspace(3)* %out 551; ret void 552; } 553 554; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i16: 555; define void @local_sextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 { 556; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in 557; %ext = sext <64 x i8> %load to <64 x i16> 558; store <64 x i16> %ext, <64 x i16> addrspace(3)* %out 559; ret void 560; } 561 562attributes #0 = { nounwind } 563