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