Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -march=amdgcn -mcpu=hawaii -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,CI,CIVI %s
      2 ; RUN: llc -march=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI,CIVI,GFX89 %s
      3 ; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI,GFX89 %s
      4 
      5 ; GCN-LABEL: {{^}}void_func_i1:
      6 ; GCN: v_and_b32_e32 v0, 1, v0
      7 ; GCN: buffer_store_byte v0, off
      8 define void @void_func_i1(i1 %arg0) #0 {
      9   store i1 %arg0, i1 addrspace(1)* undef
     10   ret void
     11 }
     12 
     13 ; GCN-LABEL: {{^}}void_func_i1_zeroext:
     14 ; GCN: s_waitcnt
     15 ; GCN-NEXT: v_or_b32_e32 v0, 12, v0
     16 ; GCN-NOT: v0
     17 ; GCN: buffer_store_dword v0, off
     18 define void @void_func_i1_zeroext(i1 zeroext %arg0) #0 {
     19   %ext = zext i1 %arg0 to i32
     20   %add = add i32 %ext, 12
     21   store i32 %add, i32 addrspace(1)* undef
     22   ret void
     23 }
     24 
     25 ; GCN-LABEL: {{^}}void_func_i1_signext:
     26 ; GCN: s_waitcnt
     27 ; GCN-NEXT: v_add_{{i|u}}32_e32 v0, {{(vcc, )?}}12, v0
     28 ; GCN-NOT: v0
     29 ; GCN: buffer_store_dword v0, off
     30 define void @void_func_i1_signext(i1 signext %arg0) #0 {
     31   %ext = sext i1 %arg0 to i32
     32   %add = add i32 %ext, 12
     33   store i32 %add, i32 addrspace(1)* undef
     34   ret void
     35 }
     36 
     37 ; GCN-LABEL: {{^}}i1_arg_i1_use:
     38 ; GCN: v_and_b32_e32 v0, 1, v0
     39 ; GCN: v_cmp_eq_u32_e32 vcc, 1, v0
     40 ; GCN: s_xor_b64 s{{\[[0-9]+:[0-9]+\]}}, vcc, -1
     41 define void @i1_arg_i1_use(i1 %arg) #0 {
     42 bb:
     43   br i1 %arg, label %bb2, label %bb1
     44 
     45 bb1:
     46   store volatile i32 0, i32 addrspace(1)* undef
     47   br label %bb2
     48 
     49 bb2:
     50   ret void
     51 }
     52 
     53 ; GCN-LABEL: {{^}}void_func_i8:
     54 ; GCN-NOT: v0
     55 ; GCN: buffer_store_byte v0, off
     56 define void @void_func_i8(i8 %arg0) #0 {
     57   store i8 %arg0, i8 addrspace(1)* undef
     58   ret void
     59 }
     60 
     61 ; GCN-LABEL: {{^}}void_func_i8_zeroext:
     62 ; GCN-NOT: and_b32
     63 ; GCN: v_add_{{i|u}}32_e32 v0, {{(vcc, )?}}12, v0
     64 define void @void_func_i8_zeroext(i8 zeroext %arg0) #0 {
     65   %ext = zext i8 %arg0 to i32
     66   %add = add i32 %ext, 12
     67   store i32 %add, i32 addrspace(1)* undef
     68   ret void
     69 }
     70 
     71 ; GCN-LABEL: {{^}}void_func_i8_signext:
     72 ; GCN-NOT: v_bfe_i32
     73 ; GCN: v_add_{{i|u}}32_e32 v0, {{(vcc, )?}}12, v0
     74 define void @void_func_i8_signext(i8 signext %arg0) #0 {
     75   %ext = sext i8 %arg0 to i32
     76   %add = add i32 %ext, 12
     77   store i32 %add, i32 addrspace(1)* undef
     78   ret void
     79 }
     80 
     81 ; GCN-LABEL: {{^}}void_func_i16:
     82 ; GCN: buffer_store_short v0, off
     83 define void @void_func_i16(i16 %arg0) #0 {
     84   store i16 %arg0, i16 addrspace(1)* undef
     85   ret void
     86 }
     87 
     88 ; GCN-LABEL: {{^}}void_func_i16_zeroext:
     89 ; GCN-NOT: v0
     90 ; GCN: v_add_{{i|u}}32_e32 v0, {{(vcc, )?}}12, v0
     91 define void @void_func_i16_zeroext(i16 zeroext %arg0) #0 {
     92   %ext = zext i16 %arg0 to i32
     93   %add = add i32 %ext, 12
     94   store i32 %add, i32 addrspace(1)* undef
     95   ret void
     96 }
     97 
     98 ; GCN-LABEL: {{^}}void_func_i16_signext:
     99 ; GCN-NOT: v0
    100 ; GCN: v_add_{{i|u}}32_e32 v0, {{(vcc, )?}}12, v0
    101 define void @void_func_i16_signext(i16 signext %arg0) #0 {
    102   %ext = sext i16 %arg0 to i32
    103   %add = add i32 %ext, 12
    104   store i32 %add, i32 addrspace(1)* undef
    105   ret void
    106 }
    107 
    108 ; GCN-LABEL: {{^}}void_func_i32:
    109 ; GCN-NOT: v0
    110 ; GCN: buffer_store_dword v0, off
    111 define void @void_func_i32(i32 %arg0) #0 {
    112   store i32 %arg0, i32 addrspace(1)* undef
    113   ret void
    114 }
    115 
    116 ; GCN-LABEL: {{^}}void_func_i64:
    117 ; GCN-NOT: v[0:1]
    118 ; GCN-NOT: v0
    119 ; GCN-NOT: v1
    120 ; GCN: buffer_store_dwordx2 v[0:1], off
    121 define void @void_func_i64(i64 %arg0) #0 {
    122   store i64 %arg0, i64 addrspace(1)* undef
    123   ret void
    124 }
    125 
    126 ; GCN-LABEL: {{^}}void_func_f16:
    127 ; VI-NOT: v0
    128 ; CI: v_cvt_f16_f32_e32 v0, v0
    129 ; GCN: buffer_store_short v0, off
    130 define void @void_func_f16(half %arg0) #0 {
    131   store half %arg0, half addrspace(1)* undef
    132   ret void
    133 }
    134 
    135 ; GCN-LABEL: {{^}}void_func_f32
    136 ; GCN-NOT: v0
    137 ; GCN: buffer_store_dword v0, off
    138 define void @void_func_f32(float %arg0) #0 {
    139   store float %arg0, float addrspace(1)* undef
    140   ret void
    141 }
    142 
    143 ; GCN-LABEL: {{^}}void_func_f64:
    144 ; GCN-NOT: v[0:1]
    145 ; GCN-NOT: v0
    146 ; GCN-NOT: v1
    147 ; GCN: buffer_store_dwordx2 v[0:1], off
    148 define void @void_func_f64(double %arg0) #0 {
    149   store double %arg0, double addrspace(1)* undef
    150   ret void
    151 }
    152 
    153 ; GCN-LABEL: {{^}}void_func_v2i32:
    154 ; GCN-NOT: v[0:1]
    155 ; GCN-NOT: v0
    156 ; GCN-NOT: v1
    157 ; GCN: buffer_store_dwordx2 v[0:1], off
    158 define void @void_func_v2i32(<2 x i32> %arg0) #0 {
    159   store <2 x i32> %arg0, <2 x i32> addrspace(1)* undef
    160   ret void
    161 }
    162 
    163 ; GCN-LABEL: {{^}}void_func_v3i32:
    164 ; GCN-DAG: buffer_store_dword v2, off
    165 ; GCN-DAG: buffer_store_dwordx2 v[0:1], off
    166 define void @void_func_v3i32(<3 x i32> %arg0) #0 {
    167   store <3 x i32> %arg0, <3 x i32> addrspace(1)* undef
    168   ret void
    169 }
    170 
    171 ; GCN-LABEL: {{^}}void_func_v4i32:
    172 ; GCN: buffer_store_dwordx4 v[0:3], off
    173 define void @void_func_v4i32(<4 x i32> %arg0) #0 {
    174   store <4 x i32> %arg0, <4 x i32> addrspace(1)* undef
    175   ret void
    176 }
    177 
    178 ; GCN-LABEL: {{^}}void_func_v5i32:
    179 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    180 ; GCN-DAG: buffer_store_dword v4, off
    181 define void @void_func_v5i32(<5 x i32> %arg0) #0 {
    182   store <5 x i32> %arg0, <5 x i32> addrspace(1)* undef
    183   ret void
    184 }
    185 
    186 ; GCN-LABEL: {{^}}void_func_v8i32:
    187 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    188 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    189 define void @void_func_v8i32(<8 x i32> %arg0) #0 {
    190   store <8 x i32> %arg0, <8 x i32> addrspace(1)* undef
    191   ret void
    192 }
    193 
    194 ; GCN-LABEL: {{^}}void_func_v16i32:
    195 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    196 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    197 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    198 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    199 define void @void_func_v16i32(<16 x i32> %arg0) #0 {
    200   store <16 x i32> %arg0, <16 x i32> addrspace(1)* undef
    201   ret void
    202 }
    203 
    204 ; GCN-LABEL: {{^}}void_func_v32i32:
    205 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    206 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    207 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    208 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    209 ; GCN-DAG: buffer_store_dwordx4 v[16:19], off
    210 ; GCN-DAG: buffer_store_dwordx4 v[20:23], off
    211 ; GCN-DAG: buffer_store_dwordx4 v[24:27], off
    212 ; GCN-DAG: buffer_store_dwordx4 v[28:31], off
    213 define void @void_func_v32i32(<32 x i32> %arg0) #0 {
    214   store <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    215   ret void
    216 }
    217 
    218 ; 1 over register limit
    219 ; GCN-LABEL: {{^}}void_func_v33i32:
    220 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    221 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    222 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    223 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    224 ; GCN-DAG: buffer_load_dword [[STACKLOAD:v[0-9]+]], off, s[0:3], s5
    225 ; GCN-DAG: buffer_store_dwordx4 v[16:19], off
    226 ; GCN-DAG: buffer_store_dwordx4 v[20:23], off
    227 ; GCN-DAG: buffer_store_dwordx4 v[24:27], off
    228 ; GCN-DAG: buffer_store_dwordx4 v[28:31], off
    229 ; GCN: buffer_store_dword [[STACKLOAD]], off
    230 define void @void_func_v33i32(<33 x i32> %arg0) #0 {
    231   store <33 x i32> %arg0, <33 x i32> addrspace(1)* undef
    232   ret void
    233 }
    234 
    235 ; GCN-LABEL: {{^}}void_func_v2i64:
    236 ; GCN: buffer_store_dwordx4 v[0:3], off
    237 define void @void_func_v2i64(<2 x i64> %arg0) #0 {
    238   store <2 x i64> %arg0, <2 x i64> addrspace(1)* undef
    239   ret void
    240 }
    241 
    242 ; GCN-LABEL: {{^}}void_func_v3i64:
    243 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    244 ; GCN-DAG: buffer_store_dwordx2 v[4:5], off
    245 define void @void_func_v3i64(<3 x i64> %arg0) #0 {
    246   store <3 x i64> %arg0, <3 x i64> addrspace(1)* undef
    247   ret void
    248 }
    249 
    250 ; GCN-LABEL: {{^}}void_func_v4i64:
    251 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    252 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    253 define void @void_func_v4i64(<4 x i64> %arg0) #0 {
    254   store <4 x i64> %arg0, <4 x i64> addrspace(1)* undef
    255   ret void
    256 }
    257 
    258 ; GCN-LABEL: {{^}}void_func_v5i64:
    259 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    260 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    261 ; GCN-DAG: buffer_store_dwordx2 v[8:9], off
    262 define void @void_func_v5i64(<5 x i64> %arg0) #0 {
    263   store <5 x i64> %arg0, <5 x i64> addrspace(1)* undef
    264   ret void
    265 }
    266 
    267 ; GCN-LABEL: {{^}}void_func_v8i64:
    268 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    269 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    270 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    271 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    272 define void @void_func_v8i64(<8 x i64> %arg0) #0 {
    273   store <8 x i64> %arg0, <8 x i64> addrspace(1)* undef
    274   ret void
    275 }
    276 
    277 ; GCN-LABEL: {{^}}void_func_v16i64:
    278 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    279 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    280 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    281 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    282 ; GCN-DAG: buffer_store_dwordx4 v[16:19], off
    283 ; GCN-DAG: buffer_store_dwordx4 v[20:23], off
    284 ; GCN-DAG: buffer_store_dwordx4 v[24:27], off
    285 ; GCN-DAG: buffer_store_dwordx4 v[28:31], off
    286 define void @void_func_v16i64(<16 x i64> %arg0) #0 {
    287   store <16 x i64> %arg0, <16 x i64> addrspace(1)* undef
    288   ret void
    289 }
    290 
    291 ; GCN-LABEL: {{^}}void_func_v2i16:
    292 ; GFX9-NOT: v0
    293 ; GFX9: buffer_store_dword v0, off
    294 define void @void_func_v2i16(<2 x i16> %arg0) #0 {
    295   store <2 x i16> %arg0, <2 x i16> addrspace(1)* undef
    296   ret void
    297 }
    298 
    299 ; GCN-LABEL: {{^}}void_func_v3i16:
    300 ; GCN-DAG: buffer_store_dword v{{[0-9]+}}, off
    301 ; GCN-DAG: buffer_store_short v{{[0-9]+}}, off
    302 define void @void_func_v3i16(<3 x i16> %arg0) #0 {
    303   store <3 x i16> %arg0, <3 x i16> addrspace(1)* undef
    304   ret void
    305 }
    306 
    307 ; GCN-LABEL: {{^}}void_func_v4i16:
    308 ; GFX9-NOT: v0
    309 ; GFX9-NOT: v1
    310 ; GFX9: buffer_store_dwordx2 v[0:1], off
    311 define void @void_func_v4i16(<4 x i16> %arg0) #0 {
    312   store <4 x i16> %arg0, <4 x i16> addrspace(1)* undef
    313   ret void
    314 }
    315 
    316 ; GCN-LABEL: {{^}}void_func_v5i16:
    317 ; GCN-DAG: buffer_store_short v4, off,
    318 ; GCN-DAG: buffer_store_dwordx2 v[1:2], off
    319 define void @void_func_v5i16(<5 x i16> %arg0) #0 {
    320   store <5 x i16> %arg0, <5 x i16> addrspace(1)* undef
    321   ret void
    322 }
    323 
    324 ; GCN-LABEL: {{^}}void_func_v8i16:
    325 ; GFX9-DAG: buffer_store_dwordx4 v[0:3], off
    326 define void @void_func_v8i16(<8 x i16> %arg0) #0 {
    327   store <8 x i16> %arg0, <8 x i16> addrspace(1)* undef
    328   ret void
    329 }
    330 
    331 ; GCN-LABEL: {{^}}void_func_v16i16:
    332 ; GFX9-DAG: buffer_store_dwordx4 v[0:3], off
    333 ; GFX9-DAG: buffer_store_dwordx4 v[4:7], off
    334 define void @void_func_v16i16(<16 x i16> %arg0) #0 {
    335   store <16 x i16> %arg0, <16 x i16> addrspace(1)* undef
    336   ret void
    337 }
    338 
    339 ; GCN-LABEL: {{^}}void_func_v2f32:
    340 ; GCN-NOT: v[0:1]
    341 ; GCN-NOT: v0
    342 ; GCN-NOT: v1
    343 ; GCN: buffer_store_dwordx2 v[0:1], off
    344 define void @void_func_v2f32(<2 x float> %arg0) #0 {
    345   store <2 x float> %arg0, <2 x float> addrspace(1)* undef
    346   ret void
    347 }
    348 
    349 ; GCN-LABEL: {{^}}void_func_v3f32:
    350 ; GCN-DAG: buffer_store_dword v2, off
    351 ; GCN-DAG: buffer_store_dwordx2 v[0:1], off
    352 define void @void_func_v3f32(<3 x float> %arg0) #0 {
    353   store <3 x float> %arg0, <3 x float> addrspace(1)* undef
    354   ret void
    355 }
    356 
    357 ; GCN-LABEL: {{^}}void_func_v4f32:
    358 ; GCN: buffer_store_dwordx4 v[0:3], off
    359 define void @void_func_v4f32(<4 x float> %arg0) #0 {
    360   store <4 x float> %arg0, <4 x float> addrspace(1)* undef
    361   ret void
    362 }
    363 
    364 ; GCN-LABEL: {{^}}void_func_v8f32:
    365 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    366 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    367 define void @void_func_v8f32(<8 x float> %arg0) #0 {
    368   store <8 x float> %arg0, <8 x float> addrspace(1)* undef
    369   ret void
    370 }
    371 
    372 ; GCN-LABEL: {{^}}void_func_v16f32:
    373 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    374 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    375 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    376 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    377 define void @void_func_v16f32(<16 x float> %arg0) #0 {
    378   store <16 x float> %arg0, <16 x float> addrspace(1)* undef
    379   ret void
    380 }
    381 
    382 ; GCN-LABEL: {{^}}void_func_v2f64:
    383 ; GCN: buffer_store_dwordx4 v[0:3], off
    384 define void @void_func_v2f64(<2 x double> %arg0) #0 {
    385   store <2 x double> %arg0, <2 x double> addrspace(1)* undef
    386   ret void
    387 }
    388 
    389 ; GCN-LABEL: {{^}}void_func_v3f64:
    390 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    391 ; GCN-DAG: buffer_store_dwordx2 v[4:5], off
    392 define void @void_func_v3f64(<3 x double> %arg0) #0 {
    393   store <3 x double> %arg0, <3 x double> addrspace(1)* undef
    394   ret void
    395 }
    396 
    397 ; GCN-LABEL: {{^}}void_func_v4f64:
    398 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    399 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    400 define void @void_func_v4f64(<4 x double> %arg0) #0 {
    401   store <4 x double> %arg0, <4 x double> addrspace(1)* undef
    402   ret void
    403 }
    404 
    405 ; GCN-LABEL: {{^}}void_func_v8f64:
    406 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    407 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    408 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    409 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    410 define void @void_func_v8f64(<8 x double> %arg0) #0 {
    411   store <8 x double> %arg0, <8 x double> addrspace(1)* undef
    412   ret void
    413 }
    414 
    415 ; GCN-LABEL: {{^}}void_func_v16f64:
    416 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    417 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    418 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    419 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    420 ; GCN-DAG: buffer_store_dwordx4 v[16:19], off
    421 ; GCN-DAG: buffer_store_dwordx4 v[20:23], off
    422 ; GCN-DAG: buffer_store_dwordx4 v[24:27], off
    423 ; GCN-DAG: buffer_store_dwordx4 v[28:31], off
    424 define void @void_func_v16f64(<16 x double> %arg0) #0 {
    425   store <16 x double> %arg0, <16 x double> addrspace(1)* undef
    426   ret void
    427 }
    428 
    429 ; GCN-LABEL: {{^}}void_func_v2f16:
    430 ; GFX9-NOT: v0
    431 ; GFX9: buffer_store_dword v0, off
    432 define void @void_func_v2f16(<2 x half> %arg0) #0 {
    433   store <2 x half> %arg0, <2 x half> addrspace(1)* undef
    434   ret void
    435 }
    436 
    437 ; FIXME: Different abi if f16 legal
    438 ; GCN-LABEL: {{^}}void_func_v3f16:
    439 ; CI-DAG: v_cvt_f16_f32_e32 v{{[0-9]+}}, v0
    440 ; CI-DAG: v_cvt_f16_f32_e32 v{{[0-9]+}}, v1
    441 ; CI-DAG: v_cvt_f16_f32_e32 v{{[0-9]+}}, v2
    442 
    443 ; GFX89-DAG: v0
    444 ; GFX89-DAG: v1
    445 
    446 ; GCN-DAG: buffer_store_short
    447 ; GCN-DAG: buffer_store_dword
    448 define void @void_func_v3f16(<3 x half> %arg0) #0 {
    449   store <3 x half> %arg0, <3 x half> addrspace(1)* undef
    450   ret void
    451 }
    452 
    453 ; GCN-LABEL: {{^}}void_func_v4f16:
    454 ; GFX9-NOT: v0
    455 ; GFX9-NOT: v1
    456 ; GFX9-NOT: v[0:1]
    457 ; GFX9: buffer_store_dwordx2 v[0:1], off
    458 define void @void_func_v4f16(<4 x half> %arg0) #0 {
    459   store <4 x half> %arg0, <4 x half> addrspace(1)* undef
    460   ret void
    461 }
    462 
    463 ; GCN-LABEL: {{^}}void_func_v8f16:
    464 ; GFX9-NOT: v0
    465 ; GFX9-NOT: v1
    466 ; GFX9: buffer_store_dwordx4 v[0:3], off
    467 define void @void_func_v8f16(<8 x half> %arg0) #0 {
    468   store <8 x half> %arg0, <8 x half> addrspace(1)* undef
    469   ret void
    470 }
    471 
    472 ; GCN-LABEL: {{^}}void_func_v16f16:
    473 ; GFX9-NOT: v0
    474 ; GFX9-NOT: v1
    475 ; GFX9-DAG: buffer_store_dwordx4 v[0:3], off
    476 ; GFX9-DAG: buffer_store_dwordx4 v[4:7], off
    477 define void @void_func_v16f16(<16 x half> %arg0) #0 {
    478   store <16 x half> %arg0, <16 x half> addrspace(1)* undef
    479   ret void
    480 }
    481 
    482 ; Make sure there is no alignment requirement for passed vgprs.
    483 ; GCN-LABEL: {{^}}void_func_i32_i64_i32:
    484 ; GCN-NOT: v0
    485 ; GCN: buffer_store_dword v0, off
    486 ; GCN: buffer_store_dwordx2 v[1:2]
    487 ; GCN: buffer_store_dword v3
    488 define void @void_func_i32_i64_i32(i32 %arg0, i64 %arg1, i32 %arg2) #0 {
    489   store volatile i32 %arg0, i32 addrspace(1)* undef
    490   store volatile i64 %arg1, i64 addrspace(1)* undef
    491   store volatile i32 %arg2, i32 addrspace(1)* undef
    492   ret void
    493 }
    494 
    495 ; GCN-LABEL: {{^}}void_func_struct_i32:
    496 ; GCN-NOT: v0
    497 ; GCN: buffer_store_dword v0, off
    498 define void @void_func_struct_i32({ i32 } %arg0) #0 {
    499   store { i32 } %arg0, { i32 } addrspace(1)* undef
    500   ret void
    501 }
    502 
    503 ; GCN-LABEL: {{^}}void_func_struct_i8_i32:
    504 ; GCN-DAG: buffer_store_byte v0, off
    505 ; GCN-DAG: buffer_store_dword v1, off
    506 define void @void_func_struct_i8_i32({ i8, i32 } %arg0) #0 {
    507   store { i8, i32 } %arg0, { i8, i32 } addrspace(1)* undef
    508   ret void
    509 }
    510 
    511 ; GCN-LABEL: {{^}}void_func_byval_struct_i8_i32:
    512 ; GCN-DAG: buffer_load_ubyte v[[ELT0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    513 ; GCN-DAG: buffer_load_dword v[[ELT1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    514 ; GCN-DAG: buffer_store_dword v[[ELT1]]
    515 ; GCN-DAG: buffer_store_byte v[[ELT0]]
    516 define void @void_func_byval_struct_i8_i32({ i8, i32 } addrspace(5)* byval %arg0) #0 {
    517   %arg0.load = load { i8, i32 }, { i8, i32 } addrspace(5)* %arg0
    518   store { i8, i32 } %arg0.load, { i8, i32 } addrspace(1)* undef
    519   ret void
    520 }
    521 
    522 ; GCN-LABEL: {{^}}void_func_byval_struct_i8_i32_x2:
    523 ; GCN: buffer_load_ubyte v[[ELT0_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    524 ; GCN: buffer_load_dword v[[ELT1_0:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    525 ; GCN: buffer_load_ubyte v[[ELT0_1:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    526 ; GCN: buffer_load_dword v[[ELT1_1:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    527 
    528 ; GCN: ds_write_b32 v0, v0
    529 ; GCN: s_setpc_b64
    530 define void @void_func_byval_struct_i8_i32_x2({ i8, i32 } addrspace(5)* byval %arg0, { i8, i32 } addrspace(5)* byval %arg1, i32 %arg2) #0 {
    531   %arg0.load = load volatile { i8, i32 }, { i8, i32 } addrspace(5)* %arg0
    532   %arg1.load = load volatile { i8, i32 }, { i8, i32 } addrspace(5)* %arg1
    533   store volatile { i8, i32 } %arg0.load, { i8, i32 } addrspace(1)* undef
    534   store volatile { i8, i32 } %arg1.load, { i8, i32 } addrspace(1)* undef
    535   store volatile i32 %arg2, i32 addrspace(3)* undef
    536   ret void
    537 }
    538 
    539 ; GCN-LABEL: {{^}}void_func_byval_i32_byval_i64:
    540 ; GCN-DAG: buffer_load_dword v[[ARG0_LOAD:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    541 ; GCN-DAG: buffer_load_dword v[[ARG1_LOAD0:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    542 ; GCN-DAG: buffer_load_dword v[[ARG1_LOAD1:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    543 ; GCN-DAG: buffer_store_dword v[[ARG0_LOAD]], off
    544 ; GCN-DAG: buffer_store_dwordx2 v{{\[}}[[ARG1_LOAD0]]:[[ARG1_LOAD1]]{{\]}}, off
    545 define void @void_func_byval_i32_byval_i64(i32 addrspace(5)* byval %arg0, i64 addrspace(5)* byval %arg1) #0 {
    546   %arg0.load = load i32, i32 addrspace(5)* %arg0
    547   %arg1.load = load i64, i64 addrspace(5)* %arg1
    548   store i32 %arg0.load, i32 addrspace(1)* undef
    549   store i64 %arg1.load, i64 addrspace(1)* undef
    550   ret void
    551 }
    552 
    553 ; GCN-LABEL: {{^}}void_func_v32i32_i32_i64:
    554 ; GCN-DAG: buffer_store_dwordx4 v[0:3], off
    555 ; GCN-DAG: buffer_store_dwordx4 v[4:7], off
    556 ; GCN-DAG: buffer_store_dwordx4 v[8:11], off
    557 ; GCN-DAG: buffer_store_dwordx4 v[12:15], off
    558 ; GCN-DAG: buffer_store_dwordx4 v[16:19], off
    559 ; GCN-DAG: buffer_store_dwordx4 v[20:23], off
    560 ; GCN-DAG: buffer_store_dwordx4 v[24:27], off
    561 ; GCN-DAG: buffer_store_dwordx4 v[28:31], off
    562 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    563 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:8
    564 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:12
    565 
    566 ; GCN: buffer_store_dword v[[LOAD_ARG1]]
    567 ; GCN: buffer_store_dwordx2 v{{\[}}[[LOAD_ARG2_0]]:[[LOAD_ARG2_1]]{{\]}}, off
    568 define void @void_func_v32i32_i32_i64(<32 x i32> %arg0, i32 %arg1, i64 %arg2) #0 {
    569   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    570   store volatile i32 %arg1, i32 addrspace(1)* undef
    571   store volatile i64 %arg2, i64 addrspace(1)* undef
    572   ret void
    573 }
    574 
    575 ; FIXME: Different ext load types on CI vs. VI
    576 ; GCN-LABEL: {{^}}void_func_v32i32_i1_i8_i16:
    577 ; GCN-DAG: buffer_load_ubyte [[LOAD_ARG1:v[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    578 ; VI-DAG: buffer_load_ushort [[LOAD_ARG2:v[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    579 ; VI-DAG: buffer_load_ushort [[LOAD_ARG3:v[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    580 ; VI-DAG: buffer_load_ushort [[LOAD_ARG4:v[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    581 
    582 ; CI-DAG: buffer_load_dword [[LOAD_ARG2:v[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    583 ; CI-DAG: buffer_load_dword [[LOAD_ARG3:v[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    584 ; CI-DAG: buffer_load_dword [[LOAD_ARG4:v[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    585 
    586 ; GCN-DAG: v_and_b32_e32 [[TRUNC_ARG1_I1:v[0-9]+]], 1, [[LOAD_ARG1]]
    587 ; CI-DAG: v_cvt_f16_f32_e32 [[CVT_ARG4:v[0-9]+]], [[LOAD_ARG4]]
    588 
    589 ; GCN: buffer_store_byte [[TRUNC_ARG1_I1]], off
    590 ; GCN: buffer_store_byte [[LOAD_ARG2]], off
    591 ; GCN: buffer_store_short [[LOAD_ARG3]], off
    592 ; GFX89 buffer_store_short [[LOAD_ARG4]], off
    593 
    594 ; CI: buffer_store_short [[CVT_ARG4]], off
    595 define void @void_func_v32i32_i1_i8_i16(<32 x i32> %arg0, i1 %arg1, i8 %arg2, i16 %arg3, half %arg4) #0 {
    596   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    597   store volatile i1 %arg1, i1 addrspace(1)* undef
    598   store volatile i8 %arg2, i8 addrspace(1)* undef
    599   store volatile i16 %arg3, i16 addrspace(1)* undef
    600   store volatile half %arg4, half addrspace(1)* undef
    601   ret void
    602 }
    603 
    604 ; GCN-LABEL: {{^}}void_func_v32i32_v2i32_v2f32:
    605 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    606 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    607 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    608 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    609 
    610 ; GCN: buffer_store_dwordx2 v{{\[}}[[LOAD_ARG1_0]]:[[LOAD_ARG1_1]]{{\]}}, off
    611 ; GCN: buffer_store_dwordx2 v{{\[}}[[LOAD_ARG2_0]]:[[LOAD_ARG2_1]]{{\]}}, off
    612 define void @void_func_v32i32_v2i32_v2f32(<32 x i32> %arg0, <2 x i32> %arg1, <2 x float> %arg2) #0 {
    613   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    614   store volatile <2 x i32> %arg1, <2 x i32> addrspace(1)* undef
    615   store volatile <2 x float> %arg2, <2 x float> addrspace(1)* undef
    616   ret void
    617 }
    618 
    619 ; GCN-LABEL: {{^}}void_func_v32i32_v2i16_v2f16:
    620 ; GFX9-DAG: buffer_load_dword [[LOAD_ARG1:v[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    621 ; GFX9-DAG: buffer_load_dword [[LOAD_ARG2:v[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    622 ; GFX9: buffer_store_dword [[LOAD_ARG1]], off
    623 ; GFX9: buffer_store_short [[LOAD_ARG2]], off
    624 define void @void_func_v32i32_v2i16_v2f16(<32 x i32> %arg0, <2 x i16> %arg1, <2 x half> %arg2) #0 {
    625   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    626   store volatile <2 x i16> %arg1, <2 x i16> addrspace(1)* undef
    627   store volatile <2 x half> %arg2, <2 x half> addrspace(1)* undef
    628   ret void
    629 }
    630 
    631 ; GCN-LABEL: {{^}}void_func_v32i32_v2i64_v2f64:
    632 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    633 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    634 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_2:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    635 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_3:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    636 
    637 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:20{{$}}
    638 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:24{{$}}
    639 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_2:[0-9]+]], off, s[0:3], s5 offset:28{{$}}
    640 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_3:[0-9]+]], off, s[0:3], s5 offset:32{{$}}
    641 
    642 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG1_0]]:[[LOAD_ARG1_3]]{{\]}}, off
    643 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG2_0]]:[[LOAD_ARG2_3]]{{\]}}, off
    644 define void @void_func_v32i32_v2i64_v2f64(<32 x i32> %arg0, <2 x i64> %arg1, <2 x double> %arg2) #0 {
    645   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    646   store volatile <2 x i64> %arg1, <2 x i64> addrspace(1)* undef
    647   store volatile <2 x double> %arg2, <2 x double> addrspace(1)* undef
    648   ret void
    649 }
    650 
    651 ; GCN-LABEL: {{^}}void_func_v32i32_v4i32_v4f32:
    652 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    653 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    654 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_2:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    655 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_3:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    656 
    657 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:20{{$}}
    658 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:24{{$}}
    659 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_2:[0-9]+]], off, s[0:3], s5 offset:28{{$}}
    660 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_3:[0-9]+]], off, s[0:3], s5 offset:32{{$}}
    661 
    662 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG1_0]]:[[LOAD_ARG1_3]]{{\]}}, off
    663 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG2_0]]:[[LOAD_ARG2_3]]{{\]}}, off
    664 define void @void_func_v32i32_v4i32_v4f32(<32 x i32> %arg0, <4 x i32> %arg1, <4 x float> %arg2) #0 {
    665   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    666   store volatile <4 x i32> %arg1, <4 x i32> addrspace(1)* undef
    667   store volatile <4 x float> %arg2, <4 x float> addrspace(1)* undef
    668   ret void
    669 }
    670 
    671 ; GCN-LABEL: {{^}}void_func_v32i32_v8i32_v8f32:
    672 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    673 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    674 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_2:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    675 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_3:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    676 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_4:[0-9]+]], off, s[0:3], s5 offset:20{{$}}
    677 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_5:[0-9]+]], off, s[0:3], s5 offset:24{{$}}
    678 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_6:[0-9]+]], off, s[0:3], s5 offset:28{{$}}
    679 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_7:[0-9]+]], off, s[0:3], s5 offset:32{{$}}
    680 
    681 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:36{{$}}
    682 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:40{{$}}
    683 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_2:[0-9]+]], off, s[0:3], s5 offset:44{{$}}
    684 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_3:[0-9]+]], off, s[0:3], s5 offset:48{{$}}
    685 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_4:[0-9]+]], off, s[0:3], s5 offset:52{{$}}
    686 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_5:[0-9]+]], off, s[0:3], s5 offset:56{{$}}
    687 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_6:[0-9]+]], off, s[0:3], s5 offset:60{{$}}
    688 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_7:[0-9]+]], off, s[0:3], s5 offset:64{{$}}
    689 
    690 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG1_4]]:[[LOAD_ARG1_7]]{{\]}}, off
    691 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG1_0]]:[[LOAD_ARG1_3]]{{\]}}, off
    692 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG2_4]]:[[LOAD_ARG2_7]]{{\]}}, off
    693 ; GCN: buffer_store_dwordx4 v{{\[}}[[LOAD_ARG2_0]]:[[LOAD_ARG2_3]]{{\]}}, off
    694 define void @void_func_v32i32_v8i32_v8f32(<32 x i32> %arg0, <8 x i32> %arg1, <8 x float> %arg2) #0 {
    695   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    696   store volatile <8 x i32> %arg1, <8 x i32> addrspace(1)* undef
    697   store volatile <8 x float> %arg2, <8 x float> addrspace(1)* undef
    698   ret void
    699 }
    700 
    701 ; GCN-LABEL: {{^}}void_func_v32i32_v16i32_v16f32:
    702 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_0:[0-9]+]], off, s[0:3], s5 offset:4{{$}}
    703 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_1:[0-9]+]], off, s[0:3], s5 offset:8{{$}}
    704 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_2:[0-9]+]], off, s[0:3], s5 offset:12{{$}}
    705 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_:[0-9]+]], off, s[0:3], s5 offset:16{{$}}
    706 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_4:[0-9]+]], off, s[0:3], s5 offset:20{{$}}
    707 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_5:[0-9]+]], off, s[0:3], s5 offset:24{{$}}
    708 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_6:[0-9]+]], off, s[0:3], s5 offset:28{{$}}
    709 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_7:[0-9]+]], off, s[0:3], s5 offset:32{{$}}
    710 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_8:[0-9]+]], off, s[0:3], s5 offset:36{{$}}
    711 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_9:[0-9]+]], off, s[0:3], s5 offset:40{{$}}
    712 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_10:[0-9]+]], off, s[0:3], s5 offset:44{{$}}
    713 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_11:[0-9]+]], off, s[0:3], s5 offset:48{{$}}
    714 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_12:[0-9]+]], off, s[0:3], s5 offset:52{{$}}
    715 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_13:[0-9]+]], off, s[0:3], s5 offset:56{{$}}
    716 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG1_14:[0-9]+]], off, s[0:3], s5 offset:60{{$}}
    717 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_15:[0-9]+]], off, s[0:3], s5 offset:64{{$}}
    718 
    719 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_0:[0-9]+]], off, s[0:3], s5 offset:68{{$}}
    720 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_1:[0-9]+]], off, s[0:3], s5 offset:72{{$}}
    721 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_2:[0-9]+]], off, s[0:3], s5 offset:76{{$}}
    722 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_3:[0-9]+]], off, s[0:3], s5 offset:80{{$}}
    723 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_4:[0-9]+]], off, s[0:3], s5 offset:84{{$}}
    724 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_5:[0-9]+]], off, s[0:3], s5 offset:88{{$}}
    725 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_6:[0-9]+]], off, s[0:3], s5 offset:92{{$}}
    726 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_7:[0-9]+]], off, s[0:3], s5 offset:96{{$}}
    727 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_8:[0-9]+]], off, s[0:3], s5 offset:100{{$}}
    728 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_9:[0-9]+]], off, s[0:3], s5 offset:104{{$}}
    729 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_10:[0-9]+]], off, s[0:3], s5 offset:108{{$}}
    730 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_11:[0-9]+]], off, s[0:3], s5 offset:112{{$}}
    731 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_12:[0-9]+]], off, s[0:3], s5 offset:116{{$}}
    732 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_13:[0-9]+]], off, s[0:3], s5 offset:120{{$}}
    733 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_14:[0-9]+]], off, s[0:3], s5 offset:124{{$}}
    734 ; GCN-DAG: buffer_load_dword v[[LOAD_ARG2_15:[0-9]+]], off, s[0:3], s5 offset:128{{$}}
    735 define void @void_func_v32i32_v16i32_v16f32(<32 x i32> %arg0, <16 x i32> %arg1, <16 x float> %arg2) #0 {
    736   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    737   store volatile <16 x i32> %arg1, <16 x i32> addrspace(1)* undef
    738   store volatile <16 x float> %arg2, <16 x float> addrspace(1)* undef
    739   ret void
    740 }
    741 
    742 ; Make sure v3 isn't a wasted register because of v3 types being promoted to v4
    743 ; GCN-LABEL: {{^}}void_func_v3f32_wasted_reg:
    744 ; GCN: s_waitcnt
    745 ; GCN: ds_write_b32 v{{[0-9]+}}, v0
    746 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v1
    747 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v2
    748 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v3
    749 ; GCN-NEXT: s_waitcnt
    750 ; GCN-NEXT: s_setpc_b64
    751 define void @void_func_v3f32_wasted_reg(<3 x float> %arg0, i32 %arg1) #0 {
    752   %arg0.0 = extractelement <3 x float> %arg0, i32 0
    753   %arg0.1 = extractelement <3 x float> %arg0, i32 1
    754   %arg0.2 = extractelement <3 x float> %arg0, i32 2
    755   store volatile float %arg0.0, float addrspace(3)* undef
    756   store volatile float %arg0.1, float addrspace(3)* undef
    757   store volatile float %arg0.2, float addrspace(3)* undef
    758   store volatile i32 %arg1, i32 addrspace(3)* undef
    759   ret void
    760 }
    761 
    762 ; GCN-LABEL: {{^}}void_func_v3i32_wasted_reg:
    763 ; GCN: s_waitcnt
    764 ; GCN: ds_write_b32 v{{[0-9]+}}, v0
    765 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v1
    766 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v2
    767 ; GCN-NEXT: ds_write_b32 v{{[0-9]+}}, v3
    768 ; GCN-NEXT: s_waitcnt
    769 ; GCN-NEXT: s_setpc_b64
    770 define void @void_func_v3i32_wasted_reg(<3 x i32> %arg0, i32 %arg1) #0 {
    771   %arg0.0 = extractelement <3 x i32> %arg0, i32 0
    772   %arg0.1 = extractelement <3 x i32> %arg0, i32 1
    773   %arg0.2 = extractelement <3 x i32> %arg0, i32 2
    774   store volatile i32 %arg0.0, i32 addrspace(3)* undef
    775   store volatile i32 %arg0.1, i32 addrspace(3)* undef
    776   store volatile i32 %arg0.2, i32 addrspace(3)* undef
    777   store volatile i32 %arg1, i32 addrspace(3)* undef
    778   ret void
    779 }
    780 
    781 ; Check there is no crash.
    782 ; GCN-LABEL: {{^}}void_func_v16i8:
    783 define void @void_func_v16i8(<16 x i8> %arg0) #0 {
    784   store volatile <16 x i8> %arg0, <16 x i8> addrspace(1)* undef
    785   ret void
    786 }
    787 
    788 ; Check there is no crash.
    789 ; GCN-LABEL: {{^}}void_func_v32i32_v16i8:
    790 define void @void_func_v32i32_v16i8(<32 x i32> %arg0, <16 x i8> %arg1) #0 {
    791   store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
    792   store volatile <16 x i8> %arg1, <16 x i8> addrspace(1)* undef
    793   ret void
    794 }
    795 
    796 attributes #0 = { nounwind }
    797