1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_i16: 6*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16 v{{[0-9]+}} 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 9*9880d681SAndroid Build Coastguard Workerdefine void @local_load_i16(i16 addrspace(3)* %out, i16 addrspace(3)* %in) { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %ld = load i16, i16 addrspace(3)* %in 12*9880d681SAndroid Build Coastguard Worker store i16 %ld, i16 addrspace(3)* %out 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v2i16: 17*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 20*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker %ld = load <2 x i16>, <2 x i16> addrspace(3)* %in 23*9880d681SAndroid Build Coastguard Worker store <2 x i16> %ld, <2 x i16> addrspace(3)* %out 24*9880d681SAndroid Build Coastguard Worker ret void 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v3i16: 28*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 29*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32 30*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b16 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 33*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_READ_RET 34*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v3i16(<3 x i16> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in 37*9880d681SAndroid Build Coastguard Worker store <3 x i16> %ld, <3 x i16> addrspace(3)* %out 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v4i16: 42*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 45*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 46*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v4i16(<4 x i16> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker %ld = load <4 x i16>, <4 x i16> addrspace(3)* %in 49*9880d681SAndroid Build Coastguard Worker store <4 x i16> %ld, <4 x i16> addrspace(3)* %out 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v8i16: 54*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 57*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 58*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 59*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 60*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v8i16(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in 63*9880d681SAndroid Build Coastguard Worker store <8 x i16> %ld, <8 x i16> addrspace(3)* %out 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v16i16: 68*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:2{{$}} 69*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 73*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 74*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 75*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 78*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 79*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 80*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET 81*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v16i16(<16 x i16> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) { 82*9880d681SAndroid Build Coastguard Workerentry: 83*9880d681SAndroid Build Coastguard Worker %ld = load <16 x i16>, <16 x i16> addrspace(3)* %in 84*9880d681SAndroid Build Coastguard Worker store <16 x i16> %ld, <16 x i16> addrspace(3)* %out 85*9880d681SAndroid Build Coastguard Worker ret void 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_i16_to_i32: 89*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16 90*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b32 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 93*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 { 94*9880d681SAndroid Build Coastguard Worker %a = load i16, i16 addrspace(3)* %in 95*9880d681SAndroid Build Coastguard Worker %ext = zext i16 %a to i32 96*9880d681SAndroid Build Coastguard Worker store i32 %ext, i32 addrspace(3)* %out 97*9880d681SAndroid Build Coastguard Worker ret void 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_i16_to_i32: 101*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64 102*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0 103*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 106*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT 107*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 { 108*9880d681SAndroid Build Coastguard Worker %a = load i16, i16 addrspace(3)* %in 109*9880d681SAndroid Build Coastguard Worker %ext = sext i16 %a to i32 110*9880d681SAndroid Build Coastguard Worker store i32 %ext, i32 addrspace(3)* %out 111*9880d681SAndroid Build Coastguard Worker ret void 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i32: 115*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16 116*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 { 117*9880d681SAndroid Build Coastguard Worker %load = load <1 x i16>, <1 x i16> addrspace(3)* %in 118*9880d681SAndroid Build Coastguard Worker %ext = zext <1 x i16> %load to <1 x i32> 119*9880d681SAndroid Build Coastguard Worker store <1 x i32> %ext, <1 x i32> addrspace(3)* %out 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i32: 124*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16 125*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 { 126*9880d681SAndroid Build Coastguard Worker %load = load <1 x i16>, <1 x i16> addrspace(3)* %in 127*9880d681SAndroid Build Coastguard Worker %ext = sext <1 x i16> %load to <1 x i32> 128*9880d681SAndroid Build Coastguard Worker store <1 x i32> %ext, <1 x i32> addrspace(3)* %out 129*9880d681SAndroid Build Coastguard Worker ret void 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i32: 133*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64 134*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0 135*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 138*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 139*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 { 140*9880d681SAndroid Build Coastguard Worker %load = load <2 x i16>, <2 x i16> addrspace(3)* %in 141*9880d681SAndroid Build Coastguard Worker %ext = zext <2 x i16> %load to <2 x i32> 142*9880d681SAndroid Build Coastguard Worker store <2 x i32> %ext, <2 x i32> addrspace(3)* %out 143*9880d681SAndroid Build Coastguard Worker ret void 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i32: 147*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64 148*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0 149*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 152*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 153*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 154*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 155*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 { 156*9880d681SAndroid Build Coastguard Worker %load = load <2 x i16>, <2 x i16> addrspace(3)* %in 157*9880d681SAndroid Build Coastguard Worker %ext = sext <2 x i16> %load to <2 x i32> 158*9880d681SAndroid Build Coastguard Worker store <2 x i32> %ext, <2 x i32> addrspace(3)* %out 159*9880d681SAndroid Build Coastguard Worker ret void 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_zextload_v3i16_to_v3i32: 163*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 164*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32 165*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b64 166*9880d681SAndroid Build Coastguard Workerdefine void @local_local_zextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) { 167*9880d681SAndroid Build Coastguard Workerentry: 168*9880d681SAndroid Build Coastguard Worker %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in 169*9880d681SAndroid Build Coastguard Worker %ext = zext <3 x i16> %ld to <3 x i32> 170*9880d681SAndroid Build Coastguard Worker store <3 x i32> %ext, <3 x i32> addrspace(3)* %out 171*9880d681SAndroid Build Coastguard Worker ret void 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32: 175*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 176*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32 177*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b64 178*9880d681SAndroid Build Coastguard Workerdefine void @local_local_sextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) { 179*9880d681SAndroid Build Coastguard Workerentry: 180*9880d681SAndroid Build Coastguard Worker %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in 181*9880d681SAndroid Build Coastguard Worker %ext = sext <3 x i16> %ld to <3 x i32> 182*9880d681SAndroid Build Coastguard Worker store <3 x i32> %ext, <3 x i32> addrspace(3)* %out 183*9880d681SAndroid Build Coastguard Worker ret void 184*9880d681SAndroid Build Coastguard Worker} 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32: 187*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64 188*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0 189*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 192*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 193*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 194*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET 195*9880d681SAndroid Build Coastguard Workerdefine void @local_local_zextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 { 196*9880d681SAndroid Build Coastguard Worker %load = load <4 x i16>, <4 x i16> addrspace(3)* %in 197*9880d681SAndroid Build Coastguard Worker %ext = zext <4 x i16> %load to <4 x i32> 198*9880d681SAndroid Build Coastguard Worker store <4 x i32> %ext, <4 x i32> addrspace(3)* %out 199*9880d681SAndroid Build Coastguard Worker ret void 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32: 203*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64 204*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0 205*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 208*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 209*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 210*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET 211*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 212*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 213*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 214*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT 215*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 { 216*9880d681SAndroid Build Coastguard Worker %load = load <4 x i16>, <4 x i16> addrspace(3)* %in 217*9880d681SAndroid Build Coastguard Worker %ext = sext <4 x i16> %load to <4 x i32> 218*9880d681SAndroid Build Coastguard Worker store <4 x i32> %ext, <4 x i32> addrspace(3)* %out 219*9880d681SAndroid Build Coastguard Worker ret void 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32: 223*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}} 224*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 { 225*9880d681SAndroid Build Coastguard Worker %load = load <8 x i16>, <8 x i16> addrspace(3)* %in 226*9880d681SAndroid Build Coastguard Worker %ext = zext <8 x i16> %load to <8 x i32> 227*9880d681SAndroid Build Coastguard Worker store <8 x i32> %ext, <8 x i32> addrspace(3)* %out 228*9880d681SAndroid Build Coastguard Worker ret void 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32: 232*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}} 233*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 { 234*9880d681SAndroid Build Coastguard Worker %load = load <8 x i16>, <8 x i16> addrspace(3)* %in 235*9880d681SAndroid Build Coastguard Worker %ext = sext <8 x i16> %load to <8 x i32> 236*9880d681SAndroid Build Coastguard Worker store <8 x i32> %ext, <8 x i32> addrspace(3)* %out 237*9880d681SAndroid Build Coastguard Worker ret void 238*9880d681SAndroid Build Coastguard Worker} 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker; FIXME: Should have 2 ds_read_b64 241*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32: 242*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}} 243*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+$}} 244*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:24 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64 247*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64 248*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64 249*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64 250*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 { 251*9880d681SAndroid Build Coastguard Worker %load = load <16 x i16>, <16 x i16> addrspace(3)* %in 252*9880d681SAndroid Build Coastguard Worker %ext = zext <16 x i16> %load to <16 x i32> 253*9880d681SAndroid Build Coastguard Worker store <16 x i32> %ext, <16 x i32> addrspace(3)* %out 254*9880d681SAndroid Build Coastguard Worker ret void 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32: 258*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+$}} 259*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:1{{$}} 260*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:16{{$}} 261*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 { 262*9880d681SAndroid Build Coastguard Worker %load = load <16 x i16>, <16 x i16> addrspace(3)* %in 263*9880d681SAndroid Build Coastguard Worker %ext = sext <16 x i16> %load to <16 x i32> 264*9880d681SAndroid Build Coastguard Worker store <16 x i32> %ext, <16 x i32> addrspace(3)* %out 265*9880d681SAndroid Build Coastguard Worker ret void 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32: 269*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}} 270*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3 271*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5 272*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7 273*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 { 274*9880d681SAndroid Build Coastguard Worker %load = load <32 x i16>, <32 x i16> addrspace(3)* %in 275*9880d681SAndroid Build Coastguard Worker %ext = zext <32 x i16> %load to <32 x i32> 276*9880d681SAndroid Build Coastguard Worker store <32 x i32> %ext, <32 x i32> addrspace(3)* %out 277*9880d681SAndroid Build Coastguard Worker ret void 278*9880d681SAndroid Build Coastguard Worker} 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32: 281*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}} 282*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:4 283*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:5{{$}} 284*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7 285*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 { 286*9880d681SAndroid Build Coastguard Worker %load = load <32 x i16>, <32 x i16> addrspace(3)* %in 287*9880d681SAndroid Build Coastguard Worker %ext = sext <32 x i16> %load to <32 x i32> 288*9880d681SAndroid Build Coastguard Worker store <32 x i32> %ext, <32 x i32> addrspace(3)* %out 289*9880d681SAndroid Build Coastguard Worker ret void 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker; FIXME: Missed read2 293*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32: 294*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:11 offset1:15 295*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}} 296*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3 297*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5 298*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7 299*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:64 300*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:9 offset1:10 301*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:12 offset1:13 302*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:112 303*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 { 304*9880d681SAndroid Build Coastguard Worker %load = load <64 x i16>, <64 x i16> addrspace(3)* %in 305*9880d681SAndroid Build Coastguard Worker %ext = zext <64 x i16> %load to <64 x i32> 306*9880d681SAndroid Build Coastguard Worker store <64 x i32> %ext, <64 x i32> addrspace(3)* %out 307*9880d681SAndroid Build Coastguard Worker ret void 308*9880d681SAndroid Build Coastguard Worker} 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32: 311*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 { 312*9880d681SAndroid Build Coastguard Worker %load = load <64 x i16>, <64 x i16> addrspace(3)* %in 313*9880d681SAndroid Build Coastguard Worker %ext = sext <64 x i16> %load to <64 x i32> 314*9880d681SAndroid Build Coastguard Worker store <64 x i32> %ext, <64 x i32> addrspace(3)* %out 315*9880d681SAndroid Build Coastguard Worker ret void 316*9880d681SAndroid Build Coastguard Worker} 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_i16_to_i64: 319*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]], 320*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]] 323*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 { 324*9880d681SAndroid Build Coastguard Worker %a = load i16, i16 addrspace(3)* %in 325*9880d681SAndroid Build Coastguard Worker %ext = zext i16 %a to i64 326*9880d681SAndroid Build Coastguard Worker store i64 %ext, i64 addrspace(3)* %out 327*9880d681SAndroid Build Coastguard Worker ret void 328*9880d681SAndroid Build Coastguard Worker} 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_i16_to_i64: 331*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16 v[[LO:[0-9]+]], 332*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]] 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]] 335*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 { 336*9880d681SAndroid Build Coastguard Worker %a = load i16, i16 addrspace(3)* %in 337*9880d681SAndroid Build Coastguard Worker %ext = sext i16 %a to i64 338*9880d681SAndroid Build Coastguard Worker store i64 %ext, i64 addrspace(3)* %out 339*9880d681SAndroid Build Coastguard Worker ret void 340*9880d681SAndroid Build Coastguard Worker} 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64: 343*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 { 344*9880d681SAndroid Build Coastguard Worker %load = load <1 x i16>, <1 x i16> addrspace(3)* %in 345*9880d681SAndroid Build Coastguard Worker %ext = zext <1 x i16> %load to <1 x i64> 346*9880d681SAndroid Build Coastguard Worker store <1 x i64> %ext, <1 x i64> addrspace(3)* %out 347*9880d681SAndroid Build Coastguard Worker ret void 348*9880d681SAndroid Build Coastguard Worker} 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64: 351*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 { 352*9880d681SAndroid Build Coastguard Worker %load = load <1 x i16>, <1 x i16> addrspace(3)* %in 353*9880d681SAndroid Build Coastguard Worker %ext = sext <1 x i16> %load to <1 x i64> 354*9880d681SAndroid Build Coastguard Worker store <1 x i64> %ext, <1 x i64> addrspace(3)* %out 355*9880d681SAndroid Build Coastguard Worker ret void 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64: 359*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 { 360*9880d681SAndroid Build Coastguard Worker %load = load <2 x i16>, <2 x i16> addrspace(3)* %in 361*9880d681SAndroid Build Coastguard Worker %ext = zext <2 x i16> %load to <2 x i64> 362*9880d681SAndroid Build Coastguard Worker store <2 x i64> %ext, <2 x i64> addrspace(3)* %out 363*9880d681SAndroid Build Coastguard Worker ret void 364*9880d681SAndroid Build Coastguard Worker} 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64: 367*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 { 368*9880d681SAndroid Build Coastguard Worker %load = load <2 x i16>, <2 x i16> addrspace(3)* %in 369*9880d681SAndroid Build Coastguard Worker %ext = sext <2 x i16> %load to <2 x i64> 370*9880d681SAndroid Build Coastguard Worker store <2 x i64> %ext, <2 x i64> addrspace(3)* %out 371*9880d681SAndroid Build Coastguard Worker ret void 372*9880d681SAndroid Build Coastguard Worker} 373*9880d681SAndroid Build Coastguard Worker 374*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64: 375*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 { 376*9880d681SAndroid Build Coastguard Worker %load = load <4 x i16>, <4 x i16> addrspace(3)* %in 377*9880d681SAndroid Build Coastguard Worker %ext = zext <4 x i16> %load to <4 x i64> 378*9880d681SAndroid Build Coastguard Worker store <4 x i64> %ext, <4 x i64> addrspace(3)* %out 379*9880d681SAndroid Build Coastguard Worker ret void 380*9880d681SAndroid Build Coastguard Worker} 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64: 383*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 { 384*9880d681SAndroid Build Coastguard Worker %load = load <4 x i16>, <4 x i16> addrspace(3)* %in 385*9880d681SAndroid Build Coastguard Worker %ext = sext <4 x i16> %load to <4 x i64> 386*9880d681SAndroid Build Coastguard Worker store <4 x i64> %ext, <4 x i64> addrspace(3)* %out 387*9880d681SAndroid Build Coastguard Worker ret void 388*9880d681SAndroid Build Coastguard Worker} 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64: 391*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 { 392*9880d681SAndroid Build Coastguard Worker %load = load <8 x i16>, <8 x i16> addrspace(3)* %in 393*9880d681SAndroid Build Coastguard Worker %ext = zext <8 x i16> %load to <8 x i64> 394*9880d681SAndroid Build Coastguard Worker store <8 x i64> %ext, <8 x i64> addrspace(3)* %out 395*9880d681SAndroid Build Coastguard Worker ret void 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64: 399*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 { 400*9880d681SAndroid Build Coastguard Worker %load = load <8 x i16>, <8 x i16> addrspace(3)* %in 401*9880d681SAndroid Build Coastguard Worker %ext = sext <8 x i16> %load to <8 x i64> 402*9880d681SAndroid Build Coastguard Worker store <8 x i64> %ext, <8 x i64> addrspace(3)* %out 403*9880d681SAndroid Build Coastguard Worker ret void 404*9880d681SAndroid Build Coastguard Worker} 405*9880d681SAndroid Build Coastguard Worker 406*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64: 407*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 { 408*9880d681SAndroid Build Coastguard Worker %load = load <16 x i16>, <16 x i16> addrspace(3)* %in 409*9880d681SAndroid Build Coastguard Worker %ext = zext <16 x i16> %load to <16 x i64> 410*9880d681SAndroid Build Coastguard Worker store <16 x i64> %ext, <16 x i64> addrspace(3)* %out 411*9880d681SAndroid Build Coastguard Worker ret void 412*9880d681SAndroid Build Coastguard Worker} 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64: 415*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 { 416*9880d681SAndroid Build Coastguard Worker %load = load <16 x i16>, <16 x i16> addrspace(3)* %in 417*9880d681SAndroid Build Coastguard Worker %ext = sext <16 x i16> %load to <16 x i64> 418*9880d681SAndroid Build Coastguard Worker store <16 x i64> %ext, <16 x i64> addrspace(3)* %out 419*9880d681SAndroid Build Coastguard Worker ret void 420*9880d681SAndroid Build Coastguard Worker} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64: 423*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 { 424*9880d681SAndroid Build Coastguard Worker %load = load <32 x i16>, <32 x i16> addrspace(3)* %in 425*9880d681SAndroid Build Coastguard Worker %ext = zext <32 x i16> %load to <32 x i64> 426*9880d681SAndroid Build Coastguard Worker store <32 x i64> %ext, <32 x i64> addrspace(3)* %out 427*9880d681SAndroid Build Coastguard Worker ret void 428*9880d681SAndroid Build Coastguard Worker} 429*9880d681SAndroid Build Coastguard Worker 430*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64: 431*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 { 432*9880d681SAndroid Build Coastguard Worker %load = load <32 x i16>, <32 x i16> addrspace(3)* %in 433*9880d681SAndroid Build Coastguard Worker %ext = sext <32 x i16> %load to <32 x i64> 434*9880d681SAndroid Build Coastguard Worker store <32 x i64> %ext, <32 x i64> addrspace(3)* %out 435*9880d681SAndroid Build Coastguard Worker ret void 436*9880d681SAndroid Build Coastguard Worker} 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Worker; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64: 439*9880d681SAndroid Build Coastguard Worker; define void @local_zextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 { 440*9880d681SAndroid Build Coastguard Worker; %load = load <64 x i16>, <64 x i16> addrspace(3)* %in 441*9880d681SAndroid Build Coastguard Worker; %ext = zext <64 x i16> %load to <64 x i64> 442*9880d681SAndroid Build Coastguard Worker; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out 443*9880d681SAndroid Build Coastguard Worker; ret void 444*9880d681SAndroid Build Coastguard Worker; } 445*9880d681SAndroid Build Coastguard Worker 446*9880d681SAndroid Build Coastguard Worker; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64: 447*9880d681SAndroid Build Coastguard Worker; define void @local_sextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 { 448*9880d681SAndroid Build Coastguard Worker; %load = load <64 x i16>, <64 x i16> addrspace(3)* %in 449*9880d681SAndroid Build Coastguard Worker; %ext = sext <64 x i16> %load to <64 x i64> 450*9880d681SAndroid Build Coastguard Worker; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out 451*9880d681SAndroid Build Coastguard Worker; ret void 452*9880d681SAndroid Build Coastguard Worker; } 453*9880d681SAndroid Build Coastguard Worker 454*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 455