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 11define void @constant_load_i16(i16 addrspace(1)* %out, i16 addrspace(2)* %in) { 12entry: 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 22define void @constant_load_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) { 23entry: 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 34define void @constant_load_v3i16(<3 x i16> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 35entry: 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 45define void @constant_load_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) { 46entry: 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 56define void @constant_load_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) { 57entry: 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 68define void @constant_load_v16i16(<16 x i16> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) { 69entry: 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}} 83define 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 100define 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 110define 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 120define 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-NOHSA: buffer_load_ushort 129; GCN-NOHSA: buffer_load_ushort 130; GCN-HSA: flat_load_ushort 131; GCN-HSA: flat_load_ushort 132define void @constant_zextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 133 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 134 %ext = zext <2 x i16> %load to <2 x i32> 135 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 136 ret void 137} 138 139; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i32: 140; GCN-NOHSA: buffer_load_sshort 141; GCN-NOHSA: buffer_load_sshort 142 143; GCN-HSA: flat_load_sshort 144; GCN-HSA: flat_load_sshort 145 146; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 147; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 148; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 149; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 150; EG-DAG: 16 151; EG-DAG: 16 152define void @constant_sextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 153 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 154 %ext = sext <2 x i16> %load to <2 x i32> 155 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out 156 ret void 157} 158 159; FUNC-LABEL: {{^}}constant_constant_zextload_v3i16_to_v3i32: 160; GCN: s_load_dwordx2 161define void @constant_constant_zextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 162entry: 163 %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in 164 %ext = zext <3 x i16> %ld to <3 x i32> 165 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 166 ret void 167} 168 169; FUNC-LABEL: {{^}}constant_constant_sextload_v3i16_to_v3i32: 170; GCN: s_load_dwordx2 171define void @constant_constant_sextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) { 172entry: 173 %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in 174 %ext = sext <3 x i16> %ld to <3 x i32> 175 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out 176 ret void 177} 178 179; FUNC-LABEL: {{^}}constant_constant_zextload_v4i16_to_v4i32: 180; GCN-NOHSA: buffer_load_ushort 181; GCN-NOHSA: buffer_load_ushort 182; GCN-NOHSA: buffer_load_ushort 183; GCN-NOHSA: buffer_load_ushort 184 185; GCN-HSA: flat_load_ushort 186; GCN-HSA: flat_load_ushort 187; GCN-HSA: flat_load_ushort 188; GCN-HSA: flat_load_ushort 189 190; EG: VTX_READ_16 191; EG: VTX_READ_16 192; EG: VTX_READ_16 193; EG: VTX_READ_16 194define void @constant_constant_zextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 195 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 196 %ext = zext <4 x i16> %load to <4 x i32> 197 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 198 ret void 199} 200 201; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i32: 202; GCN-NOHSA: buffer_load_sshort 203; GCN-NOHSA: buffer_load_sshort 204; GCN-NOHSA: buffer_load_sshort 205; GCN-NOHSA: buffer_load_sshort 206 207; GCN-HSA: flat_load_sshort 208; GCN-HSA: flat_load_sshort 209; GCN-HSA: flat_load_sshort 210; GCN-HSA: flat_load_sshort 211 212; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]] 213; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]] 214; EG-DAG: VTX_READ_16 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]] 215; EG-DAG: VTX_READ_16 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]] 216; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal 217; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal 218; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal 219; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal 220; EG-DAG: 16 221; EG-DAG: 16 222; EG-DAG: 16 223; EG-DAG: 16 224define void @constant_sextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 225 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 226 %ext = sext <4 x i16> %load to <4 x i32> 227 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out 228 ret void 229} 230 231; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i32: 232; GCN-NOHSA: buffer_load_ushort 233; GCN-NOHSA: buffer_load_ushort 234; GCN-NOHSA: buffer_load_ushort 235; GCN-NOHSA: buffer_load_ushort 236; GCN-NOHSA: buffer_load_ushort 237; GCN-NOHSA: buffer_load_ushort 238; GCN-NOHSA: buffer_load_ushort 239; GCN-NOHSA: buffer_load_ushort 240 241; GCN-HSA: flat_load_ushort 242; GCN-HSA: flat_load_ushort 243; GCN-HSA: flat_load_ushort 244; GCN-HSA: flat_load_ushort 245; GCN-HSA: flat_load_ushort 246; GCN-HSA: flat_load_ushort 247; GCN-HSA: flat_load_ushort 248; GCN-HSA: flat_load_ushort 249define void @constant_zextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 250 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 251 %ext = zext <8 x i16> %load to <8 x i32> 252 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 253 ret void 254} 255 256; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i32: 257; GCN-NOHSA: buffer_load_sshort 258; GCN-NOHSA: buffer_load_sshort 259; GCN-NOHSA: buffer_load_sshort 260; GCN-NOHSA: buffer_load_sshort 261; GCN-NOHSA: buffer_load_sshort 262; GCN-NOHSA: buffer_load_sshort 263; GCN-NOHSA: buffer_load_sshort 264; GCN-NOHSA: buffer_load_sshort 265 266; GCN-HSA: flat_load_sshort 267; GCN-HSA: flat_load_sshort 268; GCN-HSA: flat_load_sshort 269; GCN-HSA: flat_load_sshort 270; GCN-HSA: flat_load_sshort 271; GCN-HSA: flat_load_sshort 272; GCN-HSA: flat_load_sshort 273; GCN-HSA: flat_load_sshort 274define void @constant_sextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 275 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 276 %ext = sext <8 x i16> %load to <8 x i32> 277 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out 278 ret void 279} 280 281; FUNC-LABEL: {{^}}constant_zextload_v16i16_to_v16i32: 282; GCN-NOHSA: buffer_load_ushort 283; GCN-NOHSA: buffer_load_ushort 284; GCN-NOHSA: buffer_load_ushort 285; GCN-NOHSA: buffer_load_ushort 286; GCN-NOHSA: buffer_load_ushort 287; GCN-NOHSA: buffer_load_ushort 288; GCN-NOHSA: buffer_load_ushort 289; GCN-NOHSA: buffer_load_ushort 290; GCN-NOHSA: buffer_load_ushort 291; GCN-NOHSA: buffer_load_ushort 292; GCN-NOHSA: buffer_load_ushort 293; GCN-NOHSA: buffer_load_ushort 294; GCN-NOHSA: buffer_load_ushort 295; GCN-NOHSA: buffer_load_ushort 296; GCN-NOHSA: buffer_load_ushort 297; GCN-NOHSA: buffer_load_ushort 298 299; GCN-HSA: flat_load_ushort 300; GCN-HSA: flat_load_ushort 301; GCN-HSA: flat_load_ushort 302; GCN-HSA: flat_load_ushort 303; GCN-HSA: flat_load_ushort 304; GCN-HSA: flat_load_ushort 305; GCN-HSA: flat_load_ushort 306; GCN-HSA: flat_load_ushort 307; GCN-HSA: flat_load_ushort 308; GCN-HSA: flat_load_ushort 309; GCN-HSA: flat_load_ushort 310; GCN-HSA: flat_load_ushort 311; GCN-HSA: flat_load_ushort 312; GCN-HSA: flat_load_ushort 313; GCN-HSA: flat_load_ushort 314; GCN-HSA: flat_load_ushort 315define void @constant_zextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 316 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 317 %ext = zext <16 x i16> %load to <16 x i32> 318 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 319 ret void 320} 321 322; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i32: 323define void @constant_sextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 324 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 325 %ext = sext <16 x i16> %load to <16 x i32> 326 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out 327 ret void 328} 329 330; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i32: 331; GCN-NOHSA: buffer_load_ushort 332; GCN-NOHSA: buffer_load_ushort 333; GCN-NOHSA: buffer_load_ushort 334; GCN-NOHSA: buffer_load_ushort 335; GCN-NOHSA: buffer_load_ushort 336; GCN-NOHSA: buffer_load_ushort 337; GCN-NOHSA: buffer_load_ushort 338; GCN-NOHSA: buffer_load_ushort 339; GCN-NOHSA: buffer_load_ushort 340; GCN-NOHSA: buffer_load_ushort 341; GCN-NOHSA: buffer_load_ushort 342; GCN-NOHSA: buffer_load_ushort 343; GCN-NOHSA: buffer_load_ushort 344; GCN-NOHSA: buffer_load_ushort 345; GCN-NOHSA: buffer_load_ushort 346; GCN-NOHSA: buffer_load_ushort 347; GCN-NOHSA: buffer_load_ushort 348; GCN-NOHSA: buffer_load_ushort 349; GCN-NOHSA: buffer_load_ushort 350; GCN-NOHSA: buffer_load_ushort 351; GCN-NOHSA: buffer_load_ushort 352; GCN-NOHSA: buffer_load_ushort 353; GCN-NOHSA: buffer_load_ushort 354; GCN-NOHSA: buffer_load_ushort 355; GCN-NOHSA: buffer_load_ushort 356; GCN-NOHSA: buffer_load_ushort 357; GCN-NOHSA: buffer_load_ushort 358; GCN-NOHSA: buffer_load_ushort 359; GCN-NOHSA: buffer_load_ushort 360; GCN-NOHSA: buffer_load_ushort 361; GCN-NOHSA: buffer_load_ushort 362; GCN-NOHSA: buffer_load_ushort 363 364; GCN-HSA: flat_load_ushort 365; GCN-HSA: flat_load_ushort 366; GCN-HSA: flat_load_ushort 367; GCN-HSA: flat_load_ushort 368; GCN-HSA: flat_load_ushort 369; GCN-HSA: flat_load_ushort 370; GCN-HSA: flat_load_ushort 371; GCN-HSA: flat_load_ushort 372; GCN-HSA: flat_load_ushort 373; GCN-HSA: flat_load_ushort 374; GCN-HSA: flat_load_ushort 375; GCN-HSA: flat_load_ushort 376; GCN-HSA: flat_load_ushort 377; GCN-HSA: flat_load_ushort 378; GCN-HSA: flat_load_ushort 379; GCN-HSA: flat_load_ushort 380; GCN-HSA: flat_load_ushort 381; GCN-HSA: flat_load_ushort 382; GCN-HSA: flat_load_ushort 383; GCN-HSA: flat_load_ushort 384; GCN-HSA: flat_load_ushort 385; GCN-HSA: flat_load_ushort 386; GCN-HSA: flat_load_ushort 387; GCN-HSA: flat_load_ushort 388; GCN-HSA: flat_load_ushort 389; GCN-HSA: flat_load_ushort 390; GCN-HSA: flat_load_ushort 391; GCN-HSA: flat_load_ushort 392; GCN-HSA: flat_load_ushort 393; GCN-HSA: flat_load_ushort 394; GCN-HSA: flat_load_ushort 395; GCN-HSA: flat_load_ushort 396define void @constant_zextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 397 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 398 %ext = zext <32 x i16> %load to <32 x i32> 399 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 400 ret void 401} 402 403; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i32: 404; GCN-NOHSA: buffer_load_sshort 405; GCN-NOHSA: buffer_load_sshort 406; GCN-NOHSA: buffer_load_sshort 407; GCN-NOHSA: buffer_load_sshort 408; GCN-NOHSA: buffer_load_sshort 409; GCN-NOHSA: buffer_load_sshort 410; GCN-NOHSA: buffer_load_sshort 411; GCN-NOHSA: buffer_load_sshort 412; GCN-NOHSA: buffer_load_sshort 413; GCN-NOHSA: buffer_load_sshort 414; GCN-NOHSA: buffer_load_sshort 415; GCN-NOHSA: buffer_load_sshort 416; GCN-NOHSA: buffer_load_sshort 417; GCN-NOHSA: buffer_load_sshort 418; GCN-NOHSA: buffer_load_sshort 419; GCN-NOHSA: buffer_load_sshort 420; GCN-NOHSA: buffer_load_sshort 421; GCN-NOHSA: buffer_load_sshort 422; GCN-NOHSA: buffer_load_sshort 423; GCN-NOHSA: buffer_load_sshort 424; GCN-NOHSA: buffer_load_sshort 425; GCN-NOHSA: buffer_load_sshort 426; GCN-NOHSA: buffer_load_sshort 427; GCN-NOHSA: buffer_load_sshort 428; GCN-NOHSA: buffer_load_sshort 429; GCN-NOHSA: buffer_load_sshort 430; GCN-NOHSA: buffer_load_sshort 431; GCN-NOHSA: buffer_load_sshort 432; GCN-NOHSA: buffer_load_sshort 433; GCN-NOHSA: buffer_load_sshort 434; GCN-NOHSA: buffer_load_sshort 435; GCN-NOHSA: buffer_load_sshort 436 437; GCN-HSA: flat_load_sshort 438; GCN-HSA: flat_load_sshort 439; GCN-HSA: flat_load_sshort 440; GCN-HSA: flat_load_sshort 441; GCN-HSA: flat_load_sshort 442; GCN-HSA: flat_load_sshort 443; GCN-HSA: flat_load_sshort 444; GCN-HSA: flat_load_sshort 445; GCN-HSA: flat_load_sshort 446; GCN-HSA: flat_load_sshort 447; GCN-HSA: flat_load_sshort 448; GCN-HSA: flat_load_sshort 449; GCN-HSA: flat_load_sshort 450; GCN-HSA: flat_load_sshort 451; GCN-HSA: flat_load_sshort 452; GCN-HSA: flat_load_sshort 453; GCN-HSA: flat_load_sshort 454; GCN-HSA: flat_load_sshort 455; GCN-HSA: flat_load_sshort 456; GCN-HSA: flat_load_sshort 457; GCN-HSA: flat_load_sshort 458; GCN-HSA: flat_load_sshort 459; GCN-HSA: flat_load_sshort 460; GCN-HSA: flat_load_sshort 461; GCN-HSA: flat_load_sshort 462; GCN-HSA: flat_load_sshort 463; GCN-HSA: flat_load_sshort 464; GCN-HSA: flat_load_sshort 465; GCN-HSA: flat_load_sshort 466; GCN-HSA: flat_load_sshort 467; GCN-HSA: flat_load_sshort 468; GCN-HSA: flat_load_sshort 469define void @constant_sextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 470 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 471 %ext = sext <32 x i16> %load to <32 x i32> 472 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out 473 ret void 474} 475 476; FUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i32: 477; GCN-NOHSA: buffer_load_ushort 478; GCN-NOHSA: buffer_load_ushort 479; GCN-NOHSA: buffer_load_ushort 480; GCN-NOHSA: buffer_load_ushort 481; GCN-NOHSA: buffer_load_ushort 482; GCN-NOHSA: buffer_load_ushort 483; GCN-NOHSA: buffer_load_ushort 484; GCN-NOHSA: buffer_load_ushort 485; GCN-NOHSA: buffer_load_ushort 486; GCN-NOHSA: buffer_load_ushort 487; GCN-NOHSA: buffer_load_ushort 488; GCN-NOHSA: buffer_load_ushort 489; GCN-NOHSA: buffer_load_ushort 490; GCN-NOHSA: buffer_load_ushort 491; GCN-NOHSA: buffer_load_ushort 492; GCN-NOHSA: buffer_load_ushort 493; GCN-NOHSA: buffer_load_ushort 494; GCN-NOHSA: buffer_load_ushort 495; GCN-NOHSA: buffer_load_ushort 496; GCN-NOHSA: buffer_load_ushort 497; GCN-NOHSA: buffer_load_ushort 498; GCN-NOHSA: buffer_load_ushort 499; GCN-NOHSA: buffer_load_ushort 500; GCN-NOHSA: buffer_load_ushort 501; GCN-NOHSA: buffer_load_ushort 502; GCN-NOHSA: buffer_load_ushort 503; GCN-NOHSA: buffer_load_ushort 504; GCN-NOHSA: buffer_load_ushort 505; GCN-NOHSA: buffer_load_ushort 506; GCN-NOHSA: buffer_load_ushort 507; GCN-NOHSA: buffer_load_ushort 508; GCN-NOHSA: buffer_load_ushort 509; GCN-NOHSA: buffer_load_ushort 510; GCN-NOHSA: buffer_load_ushort 511; GCN-NOHSA: buffer_load_ushort 512; GCN-NOHSA: buffer_load_ushort 513; GCN-NOHSA: buffer_load_ushort 514; GCN-NOHSA: buffer_load_ushort 515; GCN-NOHSA: buffer_load_ushort 516; GCN-NOHSA: buffer_load_ushort 517; GCN-NOHSA: buffer_load_ushort 518; GCN-NOHSA: buffer_load_ushort 519; GCN-NOHSA: buffer_load_ushort 520; GCN-NOHSA: buffer_load_ushort 521; GCN-NOHSA: buffer_load_ushort 522; GCN-NOHSA: buffer_load_ushort 523; GCN-NOHSA: buffer_load_ushort 524; GCN-NOHSA: buffer_load_ushort 525; GCN-NOHSA: buffer_load_ushort 526; GCN-NOHSA: buffer_load_ushort 527; GCN-NOHSA: buffer_load_ushort 528; GCN-NOHSA: buffer_load_ushort 529; GCN-NOHSA: buffer_load_ushort 530; GCN-NOHSA: buffer_load_ushort 531; GCN-NOHSA: buffer_load_ushort 532; GCN-NOHSA: buffer_load_ushort 533; GCN-NOHSA: buffer_load_ushort 534; GCN-NOHSA: buffer_load_ushort 535; GCN-NOHSA: buffer_load_ushort 536; GCN-NOHSA: buffer_load_ushort 537; GCN-NOHSA: buffer_load_ushort 538; GCN-NOHSA: buffer_load_ushort 539; GCN-NOHSA: buffer_load_ushort 540; GCN-NOHSA: buffer_load_ushort 541 542; GCN-HSA: flat_load_ushort 543; GCN-HSA: flat_load_ushort 544; GCN-HSA: flat_load_ushort 545; GCN-HSA: flat_load_ushort 546; GCN-HSA: flat_load_ushort 547; GCN-HSA: flat_load_ushort 548; GCN-HSA: flat_load_ushort 549; GCN-HSA: flat_load_ushort 550; GCN-HSA: flat_load_ushort 551; GCN-HSA: flat_load_ushort 552; GCN-HSA: flat_load_ushort 553; GCN-HSA: flat_load_ushort 554; GCN-HSA: flat_load_ushort 555; GCN-HSA: flat_load_ushort 556; GCN-HSA: flat_load_ushort 557; GCN-HSA: flat_load_ushort 558; GCN-HSA: flat_load_ushort 559; GCN-HSA: flat_load_ushort 560; GCN-HSA: flat_load_ushort 561; GCN-HSA: flat_load_ushort 562; GCN-HSA: flat_load_ushort 563; GCN-HSA: flat_load_ushort 564; GCN-HSA: flat_load_ushort 565; GCN-HSA: flat_load_ushort 566; GCN-HSA: flat_load_ushort 567; GCN-HSA: flat_load_ushort 568; GCN-HSA: flat_load_ushort 569; GCN-HSA: flat_load_ushort 570; GCN-HSA: flat_load_ushort 571; GCN-HSA: flat_load_ushort 572; GCN-HSA: flat_load_ushort 573; GCN-HSA: flat_load_ushort 574; GCN-HSA: flat_load_ushort 575; GCN-HSA: flat_load_ushort 576; GCN-HSA: flat_load_ushort 577; GCN-HSA: flat_load_ushort 578; GCN-HSA: flat_load_ushort 579; GCN-HSA: flat_load_ushort 580; GCN-HSA: flat_load_ushort 581; GCN-HSA: flat_load_ushort 582; GCN-HSA: flat_load_ushort 583; GCN-HSA: flat_load_ushort 584; GCN-HSA: flat_load_ushort 585; GCN-HSA: flat_load_ushort 586; GCN-HSA: flat_load_ushort 587; GCN-HSA: flat_load_ushort 588; GCN-HSA: flat_load_ushort 589; GCN-HSA: flat_load_ushort 590; GCN-HSA: flat_load_ushort 591; GCN-HSA: flat_load_ushort 592; GCN-HSA: flat_load_ushort 593; GCN-HSA: flat_load_ushort 594; GCN-HSA: flat_load_ushort 595; GCN-HSA: flat_load_ushort 596; GCN-HSA: flat_load_ushort 597; GCN-HSA: flat_load_ushort 598; GCN-HSA: flat_load_ushort 599; GCN-HSA: flat_load_ushort 600; GCN-HSA: flat_load_ushort 601; GCN-HSA: flat_load_ushort 602; GCN-HSA: flat_load_ushort 603; GCN-HSA: flat_load_ushort 604; GCN-HSA: flat_load_ushort 605; GCN-HSA: flat_load_ushort 606define void @constant_zextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 607 %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 608 %ext = zext <64 x i16> %load to <64 x i32> 609 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 610 ret void 611} 612 613; FUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i32: 614define void @constant_sextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 615 %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 616 %ext = sext <64 x i16> %load to <64 x i32> 617 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out 618 ret void 619} 620 621; FUNC-LABEL: {{^}}constant_zextload_i16_to_i64: 622; GCN-NOHSA-DAG: buffer_load_ushort v[[LO:[0-9]+]], 623; GCN-HSA-DAG: flat_load_ushort v[[LO:[0-9]+]], 624; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 625 626; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 627; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 628define void @constant_zextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 629 %a = load i16, i16 addrspace(2)* %in 630 %ext = zext i16 %a to i64 631 store i64 %ext, i64 addrspace(1)* %out 632 ret void 633} 634 635; FUNC-LABEL: {{^}}constant_sextload_i16_to_i64: 636; GCN-NOHSA-DAG: buffer_load_sshort v[[LO:[0-9]+]], 637; GCN-HSA-DAG: flat_load_sshort v[[LO:[0-9]+]], 638; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] 639 640; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]] 641; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}} 642define void @constant_sextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 { 643 %a = load i16, i16 addrspace(2)* %in 644 %ext = sext i16 %a to i64 645 store i64 %ext, i64 addrspace(1)* %out 646 ret void 647} 648 649; FUNC-LABEL: {{^}}constant_zextload_v1i16_to_v1i64: 650define void @constant_zextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 651 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 652 %ext = zext <1 x i16> %load to <1 x i64> 653 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 654 ret void 655} 656 657; FUNC-LABEL: {{^}}constant_sextload_v1i16_to_v1i64: 658define void @constant_sextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 { 659 %load = load <1 x i16>, <1 x i16> addrspace(2)* %in 660 %ext = sext <1 x i16> %load to <1 x i64> 661 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out 662 ret void 663} 664 665; FUNC-LABEL: {{^}}constant_zextload_v2i16_to_v2i64: 666define void @constant_zextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 667 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 668 %ext = zext <2 x i16> %load to <2 x i64> 669 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 670 ret void 671} 672 673; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i64: 674define void @constant_sextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 { 675 %load = load <2 x i16>, <2 x i16> addrspace(2)* %in 676 %ext = sext <2 x i16> %load to <2 x i64> 677 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out 678 ret void 679} 680 681; FUNC-LABEL: {{^}}constant_zextload_v4i16_to_v4i64: 682define void @constant_zextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 683 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 684 %ext = zext <4 x i16> %load to <4 x i64> 685 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 686 ret void 687} 688 689; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i64: 690define void @constant_sextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 { 691 %load = load <4 x i16>, <4 x i16> addrspace(2)* %in 692 %ext = sext <4 x i16> %load to <4 x i64> 693 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out 694 ret void 695} 696 697; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i64: 698define void @constant_zextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 699 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 700 %ext = zext <8 x i16> %load to <8 x i64> 701 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 702 ret void 703} 704 705; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i64: 706define void @constant_sextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 { 707 %load = load <8 x i16>, <8 x i16> addrspace(2)* %in 708 %ext = sext <8 x i16> %load to <8 x i64> 709 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out 710 ret void 711} 712 713; FUNC-LABEL: {{^}}constant_zextload_v16i16_to_v16i64: 714define void @constant_zextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 715 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 716 %ext = zext <16 x i16> %load to <16 x i64> 717 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 718 ret void 719} 720 721; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i64: 722define void @constant_sextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 { 723 %load = load <16 x i16>, <16 x i16> addrspace(2)* %in 724 %ext = sext <16 x i16> %load to <16 x i64> 725 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out 726 ret void 727} 728 729; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i64: 730define void @constant_zextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 731 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 732 %ext = zext <32 x i16> %load to <32 x i64> 733 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 734 ret void 735} 736 737; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i64: 738define void @constant_sextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 { 739 %load = load <32 x i16>, <32 x i16> addrspace(2)* %in 740 %ext = sext <32 x i16> %load to <32 x i64> 741 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out 742 ret void 743} 744 745; ; XFUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i64: 746; define void @constant_zextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 747; %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 748; %ext = zext <64 x i16> %load to <64 x i64> 749; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 750; ret void 751; } 752 753; ; XFUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i64: 754; define void @constant_sextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 { 755; %load = load <64 x i16>, <64 x i16> addrspace(2)* %in 756; %ext = sext <64 x i16> %load to <64 x i64> 757; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out 758; ret void 759; } 760 761attributes #0 = { nounwind } 762