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 8; FUNC-LABEL: {{^}}global_load_i8: 9; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}} 10; GCN-HSA: flat_load_ubyte 11 12; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0 13define void @global_load_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 14entry: 15 %ld = load i8, i8 addrspace(1)* %in 16 store i8 %ld, i8 addrspace(1)* %out 17 ret void 18} 19 20; FUNC-LABEL: {{^}}global_load_v2i8: 21; GCN-NOHSA: buffer_load_ushort v 22; GCN-HSA: flat_load_ushort v 23 24; EG: VTX_READ_16 25define void @global_load_v2i8(<2 x i8> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 26entry: 27 %ld = load <2 x i8>, <2 x i8> addrspace(1)* %in 28 store <2 x i8> %ld, <2 x i8> addrspace(1)* %out 29 ret void 30} 31 32; FUNC-LABEL: {{^}}global_load_v3i8: 33; GCN-NOHSA: buffer_load_dword v 34; GCN-HSA: flat_load_dword v 35 36; EG-DAG: VTX_READ_32 37define void @global_load_v3i8(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 { 38entry: 39 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in 40 store <3 x i8> %ld, <3 x i8> addrspace(1)* %out 41 ret void 42} 43 44; FUNC-LABEL: {{^}}global_load_v4i8: 45; GCN-NOHSA: buffer_load_dword v 46; GCN-HSA: flat_load_dword v 47 48; EG: VTX_READ_32 49define void @global_load_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 50entry: 51 %ld = load <4 x i8>, <4 x i8> addrspace(1)* %in 52 store <4 x i8> %ld, <4 x i8> addrspace(1)* %out 53 ret void 54} 55 56; FUNC-LABEL: {{^}}global_load_v8i8: 57; GCN-NOHSA: buffer_load_dwordx2 58; GCN-HSA: flat_load_dwordx2 59 60; EG: VTX_READ_64 61define void @global_load_v8i8(<8 x i8> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 62entry: 63 %ld = load <8 x i8>, <8 x i8> addrspace(1)* %in 64 store <8 x i8> %ld, <8 x i8> addrspace(1)* %out 65 ret void 66} 67 68; FUNC-LABEL: {{^}}global_load_v16i8: 69; GCN-NOHSA: buffer_load_dwordx4 70 71; GCN-HSA: flat_load_dwordx4 72 73; EG: VTX_READ_128 74define void @global_load_v16i8(<16 x i8> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 75entry: 76 %ld = load <16 x i8>, <16 x i8> addrspace(1)* %in 77 store <16 x i8> %ld, <16 x i8> addrspace(1)* %out 78 ret void 79} 80 81; FUNC-LABEL: {{^}}global_zextload_i8_to_i32: 82; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}, 83; GCN-HSA: flat_load_ubyte 84 85; EG: VTX_READ_8 T{{[0-9]+\.X, T[0-9]+\.X}} 86define void @global_zextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 87 %a = load i8, i8 addrspace(1)* %in 88 %ext = zext i8 %a to i32 89 store i32 %ext, i32 addrspace(1)* %out 90 ret void 91} 92 93; FUNC-LABEL: {{^}}global_sextload_i8_to_i32: 94; GCN-NOHSA: buffer_load_sbyte 95; GCN-HSA: flat_load_sbyte 96 97; EG: VTX_READ_8 [[DST:T[0-9]\.[XYZW]]], [[DST]] 98; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal 99; EG: 8 100define void @global_sextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 101 %ld = load i8, i8 addrspace(1)* %in 102 %ext = sext i8 %ld to i32 103 store i32 %ext, i32 addrspace(1)* %out 104 ret void 105} 106 107; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i32: 108define void @global_zextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 109 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 110 %ext = zext <1 x i8> %load to <1 x i32> 111 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 112 ret void 113} 114 115; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i32: 116define void @global_sextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 117 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 118 %ext = sext <1 x i8> %load to <1 x i32> 119 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out 120 ret void 121} 122 123; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i32: 124; GCN-NOHSA: buffer_load_ubyte 125; GCN-NOHSA: buffer_load_ubyte 126; GCN-HSA: flat_load_ubyte 127; GCN-HSA: flat_load_ubyte 128; EG: VTX_READ_8 129; EG: VTX_READ_8 130define void @global_zextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 131 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 132 %ext = zext <2 x i8> %load to <2 x i32> 133 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 134 ret void 135} 136 137; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i32: 138; GCN-NOHSA: buffer_load_sbyte 139; GCN-NOHSA: buffer_load_sbyte 140; GCN-HSA: flat_load_sbyte 141; GCN-HSA: flat_load_sbyte 142 143; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 144; EG-DAG: VTX_READ_8 [[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: 8 148; EG-DAG: 8 149define void @global_sextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 150 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 151 %ext = sext <2 x i8> %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: {{^}}global_zextload_v3i8_to_v3i32: 157; GCN-NOHSA: buffer_load_dword v 158; GCN-HSA: flat_load_dword v 159 160; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 161; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8 162; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff, 163define void @global_zextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 { 164entry: 165 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in 166 %ext = zext <3 x i8> %ld to <3 x i32> 167 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 168 ret void 169} 170 171; FUNC-LABEL: {{^}}global_sextload_v3i8_to_v3i32: 172; GCN-NOHSA: buffer_load_dword v 173; GCN-HSA: flat_load_dword v 174 175; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8 176; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8 177; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8 178define void @global_sextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 { 179entry: 180 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in 181 %ext = sext <3 x i8> %ld to <3 x i32> 182 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 183 ret void 184} 185 186; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i32: 187; GCN-NOHSA: buffer_load_ubyte 188; GCN-NOHSA: buffer_load_ubyte 189; GCN-NOHSA: buffer_load_ubyte 190; GCN-NOHSA: buffer_load_ubyte 191; GCN-HSA: flat_load_ubyte 192; GCN-HSA: flat_load_ubyte 193; GCN-HSA: flat_load_ubyte 194; GCN-HSA: flat_load_ubyte 195 196; EG: VTX_READ_8 197; EG: VTX_READ_8 198; EG: VTX_READ_8 199; EG: VTX_READ_8 200define void @global_zextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 201 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 202 %ext = zext <4 x i8> %load to <4 x i32> 203 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 204 ret void 205} 206 207; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i32: 208; GCN-NOHSA: buffer_load_sbyte 209; GCN-NOHSA: buffer_load_sbyte 210; GCN-NOHSA: buffer_load_sbyte 211; GCN-NOHSA: buffer_load_sbyte 212; GCN-HSA: flat_load_sbyte 213; GCN-HSA: flat_load_sbyte 214; GCN-HSA: flat_load_sbyte 215; GCN-HSA: flat_load_sbyte 216 217; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 218; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 219; EG-DAG: VTX_READ_8 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]] 220; EG-DAG: VTX_READ_8 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]] 221; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 222; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 223; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal 224; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal 225; EG-DAG: 8 226; EG-DAG: 8 227; EG-DAG: 8 228; EG-DAG: 8 229define void @global_sextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 230 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 231 %ext = sext <4 x i8> %load to <4 x i32> 232 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 233 ret void 234} 235 236; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i32: 237define void @global_zextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 238 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 239 %ext = zext <8 x i8> %load to <8 x i32> 240 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 241 ret void 242} 243 244; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i32: 245define void @global_sextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 246 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 247 %ext = sext <8 x i8> %load to <8 x i32> 248 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 249 ret void 250} 251 252; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i32: 253define void @global_zextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 254 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 255 %ext = zext <16 x i8> %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: {{^}}global_sextload_v16i8_to_v16i32: 261define void @global_sextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 262 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 263 %ext = sext <16 x i8> %load to <16 x i32> 264 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 265 ret void 266} 267 268; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i32: 269define void @global_zextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 270 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 271 %ext = zext <32 x i8> %load to <32 x i32> 272 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 273 ret void 274} 275 276; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i32: 277define void @global_sextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 278 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 279 %ext = sext <32 x i8> %load to <32 x i32> 280 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 281 ret void 282} 283 284; FUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i32: 285define void @global_zextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 286 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 287 %ext = zext <64 x i8> %load to <64 x i32> 288 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 289 ret void 290} 291 292; FUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i32: 293define void @global_sextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 294 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 295 %ext = sext <64 x i8> %load to <64 x i32> 296 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 297 ret void 298} 299 300; FUNC-LABEL: {{^}}global_zextload_i8_to_i64: 301; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 302 303; GCN-NOHSA-DAG: buffer_load_ubyte v[[LO:[0-9]+]], 304; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 305 306; GCN-HSA-DAG: flat_load_ubyte v[[LO:[0-9]+]], 307; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]] 308define void @global_zextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 309 %a = load i8, i8 addrspace(1)* %in 310 %ext = zext i8 %a to i64 311 store i64 %ext, i64 addrspace(1)* %out 312 ret void 313} 314 315; FUNC-LABEL: {{^}}global_sextload_i8_to_i64: 316; GCN-NOHSA: buffer_load_sbyte v[[LO:[0-9]+]], 317; GCN-HSA: flat_load_sbyte v[[LO:[0-9]+]], 318; GCN: 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]]{{\]}} 322define void @global_sextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 323 %a = load i8, i8 addrspace(1)* %in 324 %ext = sext i8 %a to i64 325 store i64 %ext, i64 addrspace(1)* %out 326 ret void 327} 328 329; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i64: 330define void @global_zextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 331 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 332 %ext = zext <1 x i8> %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: {{^}}global_sextload_v1i8_to_v1i64: 338define void @global_sextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 339 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 340 %ext = sext <1 x i8> %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: {{^}}global_zextload_v2i8_to_v2i64: 346define void @global_zextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 347 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 348 %ext = zext <2 x i8> %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: {{^}}global_sextload_v2i8_to_v2i64: 354define void @global_sextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 355 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 356 %ext = sext <2 x i8> %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: {{^}}global_zextload_v4i8_to_v4i64: 362define void @global_zextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 363 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 364 %ext = zext <4 x i8> %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: {{^}}global_sextload_v4i8_to_v4i64: 370define void @global_sextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 371 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 372 %ext = sext <4 x i8> %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: {{^}}global_zextload_v8i8_to_v8i64: 378define void @global_zextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 379 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 380 %ext = zext <8 x i8> %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: {{^}}global_sextload_v8i8_to_v8i64: 386define void @global_sextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 387 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 388 %ext = sext <8 x i8> %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: {{^}}global_zextload_v16i8_to_v16i64: 394define void @global_zextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 395 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 396 %ext = zext <16 x i8> %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: {{^}}global_sextload_v16i8_to_v16i64: 402define void @global_sextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 403 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 404 %ext = sext <16 x i8> %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: {{^}}global_zextload_v32i8_to_v32i64: 410define void @global_zextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 411 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 412 %ext = zext <32 x i8> %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: {{^}}global_sextload_v32i8_to_v32i64: 418define void @global_sextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 419 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 420 %ext = sext <32 x i8> %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: {{^}}global_zextload_v64i8_to_v64i64: 426; define void @global_zextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 427; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 428; %ext = zext <64 x i8> %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: {{^}}global_sextload_v64i8_to_v64i64: 434; define void @global_sextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 435; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 436; %ext = sext <64 x i8> %load to <64 x i64> 437; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 438; ret void 439; } 440 441; FUNC-LABEL: {{^}}global_zextload_i8_to_i16: 442; GCN-NOHSA: buffer_load_ubyte v[[VAL:[0-9]+]], 443; GCN-NOHSA: buffer_store_short v[[VAL]] 444 445; GCN-HSA: flat_load_ubyte v[[VAL:[0-9]+]], 446; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]] 447define void @global_zextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 448 %a = load i8, i8 addrspace(1)* %in 449 %ext = zext i8 %a to i16 450 store i16 %ext, i16 addrspace(1)* %out 451 ret void 452} 453 454; FUNC-LABEL: {{^}}global_sextload_i8_to_i16: 455; GCN-NOHSA: buffer_load_sbyte v[[VAL:[0-9]+]], 456; GCN-HSA: flat_load_sbyte v[[VAL:[0-9]+]], 457 458; GCN-NOHSA: buffer_store_short v[[VAL]] 459; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]] 460define void @global_sextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 { 461 %a = load i8, i8 addrspace(1)* %in 462 %ext = sext i8 %a to i16 463 store i16 %ext, i16 addrspace(1)* %out 464 ret void 465} 466 467; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i16: 468define void @global_zextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 469 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 470 %ext = zext <1 x i8> %load to <1 x i16> 471 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out 472 ret void 473} 474 475; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i16: 476define void @global_sextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 { 477 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in 478 %ext = sext <1 x i8> %load to <1 x i16> 479 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out 480 ret void 481} 482 483; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i16: 484define void @global_zextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 485 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 486 %ext = zext <2 x i8> %load to <2 x i16> 487 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out 488 ret void 489} 490 491; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i16: 492define void @global_sextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 { 493 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in 494 %ext = sext <2 x i8> %load to <2 x i16> 495 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out 496 ret void 497} 498 499; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i16: 500define void @global_zextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 501 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 502 %ext = zext <4 x i8> %load to <4 x i16> 503 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out 504 ret void 505} 506 507; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i16: 508define void @global_sextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 { 509 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in 510 %ext = sext <4 x i8> %load to <4 x i16> 511 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out 512 ret void 513} 514 515; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i16: 516define void @global_zextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 517 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 518 %ext = zext <8 x i8> %load to <8 x i16> 519 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out 520 ret void 521} 522 523; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i16: 524define void @global_sextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 { 525 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in 526 %ext = sext <8 x i8> %load to <8 x i16> 527 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out 528 ret void 529} 530 531; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i16: 532define void @global_zextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 533 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 534 %ext = zext <16 x i8> %load to <16 x i16> 535 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out 536 ret void 537} 538 539; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i16: 540define void @global_sextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 { 541 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in 542 %ext = sext <16 x i8> %load to <16 x i16> 543 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out 544 ret void 545} 546 547; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i16: 548define void @global_zextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 549 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 550 %ext = zext <32 x i8> %load to <32 x i16> 551 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out 552 ret void 553} 554 555; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i16: 556define void @global_sextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 { 557 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in 558 %ext = sext <32 x i8> %load to <32 x i16> 559 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out 560 ret void 561} 562 563; XFUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i16: 564; define void @global_zextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 565; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 566; %ext = zext <64 x i8> %load to <64 x i16> 567; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out 568; ret void 569; } 570 571; XFUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i16: 572; define void @global_sextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 { 573; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in 574; %ext = sext <64 x i8> %load to <64 x i16> 575; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out 576; ret void 577; } 578 579attributes #0 = { nounwind } 580