Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -O0 -march=amdgcn -mcpu=hawaii -verify-machineinstrs < %s | FileCheck -check-prefix=ALL -check-prefix=VGPR -check-prefix=GCN %s
      2 
      3 ; FIXME: we should disable sdwa peephole because dead-code elimination, that
      4 ; runs after peephole, ruins this test (different register numbers)
      5 
      6 ; Spill all SGPRs so multiple VGPRs are required for spilling all of them.
      7 
      8 ; Ideally we only need 2 VGPRs for all spilling. The VGPRs are
      9 ; allocated per-frame index, so it's possible to get up with more.
     10 
     11 ; GCN-LABEL: {{^}}spill_sgprs_to_multiple_vgprs:
     12 
     13 ; GCN: def s[4:11]
     14 ; GCN: def s[12:19]
     15 ; GCN: def s[20:27]
     16 ; GCN: def s[28:35]
     17 ; GCN: def s[36:43]
     18 ; GCN: def s[44:51]
     19 ; GCN: def s[52:59]
     20 ; GCN: def s[60:67]
     21 ; GCN: def s[68:75]
     22 ; GCN: def s[76:83]
     23 ; GCN: def s[84:91]
     24 
     25 ; GCN: v_writelane_b32 v0, s4, 0
     26 ; GCN-NEXT: v_writelane_b32 v0, s5, 1
     27 ; GCN-NEXT: v_writelane_b32 v0, s6, 2
     28 ; GCN-NEXT: v_writelane_b32 v0, s7, 3
     29 ; GCN-NEXT: v_writelane_b32 v0, s8, 4
     30 ; GCN-NEXT: v_writelane_b32 v0, s9, 5
     31 ; GCN-NEXT: v_writelane_b32 v0, s10, 6
     32 ; GCN-NEXT: v_writelane_b32 v0, s11, 7
     33 
     34 ; GCN: def s{{\[}}[[TMP_LO:[0-9]+]]:[[TMP_HI:[0-9]+]]{{\]}}
     35 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 8
     36 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 9
     37 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 10
     38 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 11
     39 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 12
     40 ; GCN-NEXT: v_writelane_b32 v0, s9, 13
     41 ; GCN-NEXT: v_writelane_b32 v0, s10, 14
     42 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 15
     43 
     44 ; GCN: def s{{\[}}[[TMP_LO]]:[[TMP_HI]]{{\]}}
     45 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 16
     46 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 17
     47 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 18
     48 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 19
     49 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 20
     50 ; GCN-NEXT: v_writelane_b32 v0, s9, 21
     51 ; GCN-NEXT: v_writelane_b32 v0, s10, 22
     52 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 23
     53 
     54 ; GCN: def s{{\[}}[[TMP_LO]]:[[TMP_HI]]{{\]}}
     55 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 24
     56 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 25
     57 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 26
     58 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 27
     59 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 28
     60 ; GCN-NEXT: v_writelane_b32 v0, s9, 29
     61 ; GCN-NEXT: v_writelane_b32 v0, s10, 30
     62 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 31
     63 
     64 ; GCN: def s{{\[}}[[TMP_LO]]:[[TMP_HI]]{{\]}}
     65 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 32
     66 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 33
     67 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 34
     68 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 35
     69 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 36
     70 ; GCN-NEXT: v_writelane_b32 v0, s9, 37
     71 ; GCN-NEXT: v_writelane_b32 v0, s10, 38
     72 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 39
     73 
     74 ; GCN: def s{{\[}}[[TMP_LO]]:[[TMP_HI]]{{\]}}
     75 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 40
     76 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 41
     77 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 42
     78 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 43
     79 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 44
     80 ; GCN-NEXT: v_writelane_b32 v0, s9, 45
     81 ; GCN-NEXT: v_writelane_b32 v0, s10, 46
     82 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 47
     83 
     84 ; GCN: def s{{\[}}[[TMP_LO]]:[[TMP_HI]]{{\]}}
     85 ; GCN: v_writelane_b32 v0, s[[TMP_LO]], 48
     86 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 49
     87 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 50
     88 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 51
     89 ; GCN-NEXT: v_writelane_b32 v0, s{{[0-9]+}}, 52
     90 ; GCN-NEXT: v_writelane_b32 v0, s9, 53
     91 ; GCN-NEXT: v_writelane_b32 v0, s10, 54
     92 ; GCN-NEXT: v_writelane_b32 v0, s[[TMP_HI]], 55
     93 
     94 ; GCN-NEXT: v_writelane_b32 v0, s84, 56
     95 ; GCN-NEXT: v_writelane_b32 v0, s85, 57
     96 ; GCN-NEXT: v_writelane_b32 v0, s86, 58
     97 ; GCN-NEXT: v_writelane_b32 v0, s87, 59
     98 ; GCN-NEXT: v_writelane_b32 v0, s88, 60
     99 ; GCN-NEXT: v_writelane_b32 v0, s89, 61
    100 ; GCN-NEXT: v_writelane_b32 v0, s90, 62
    101 ; GCN-NEXT: v_writelane_b32 v0, s91, 63
    102 ; GCN-NEXT: v_writelane_b32 v1, s12, 0
    103 ; GCN-NEXT: v_writelane_b32 v1, s13, 1
    104 ; GCN-NEXT: v_writelane_b32 v1, s14, 2
    105 ; GCN-NEXT: v_writelane_b32 v1, s15, 3
    106 ; GCN-NEXT: v_writelane_b32 v1, s16, 4
    107 ; GCN-NEXT: v_writelane_b32 v1, s17, 5
    108 ; GCN-NEXT: v_writelane_b32 v1, s18, 6
    109 ; GCN-NEXT: v_writelane_b32 v1, s19, 7
    110 ; GCN-NEXT: v_writelane_b32 v1, s20, 8
    111 ; GCN-NEXT: v_writelane_b32 v1, s21, 9
    112 ; GCN-NEXT: v_writelane_b32 v1, s22, 10
    113 ; GCN-NEXT: v_writelane_b32 v1, s23, 11
    114 ; GCN-NEXT: v_writelane_b32 v1, s24, 12
    115 ; GCN-NEXT: v_writelane_b32 v1, s25, 13
    116 ; GCN-NEXT: v_writelane_b32 v1, s26, 14
    117 ; GCN-NEXT: v_writelane_b32 v1, s27, 15
    118 ; GCN-NEXT: v_writelane_b32 v1, s28, 16
    119 ; GCN-NEXT: v_writelane_b32 v1, s29, 17
    120 ; GCN-NEXT: v_writelane_b32 v1, s30, 18
    121 ; GCN-NEXT: v_writelane_b32 v1, s31, 19
    122 ; GCN-NEXT: v_writelane_b32 v1, s32, 20
    123 ; GCN-NEXT: v_writelane_b32 v1, s33, 21
    124 ; GCN-NEXT: v_writelane_b32 v1, s34, 22
    125 ; GCN-NEXT: v_writelane_b32 v1, s35, 23
    126 ; GCN-NEXT: v_writelane_b32 v1, s36, 24
    127 ; GCN-NEXT: v_writelane_b32 v1, s37, 25
    128 ; GCN-NEXT: v_writelane_b32 v1, s38, 26
    129 ; GCN-NEXT: v_writelane_b32 v1, s39, 27
    130 ; GCN-NEXT: v_writelane_b32 v1, s40, 28
    131 ; GCN-NEXT: v_writelane_b32 v1, s41, 29
    132 ; GCN-NEXT: v_writelane_b32 v1, s42, 30
    133 ; GCN-NEXT: v_writelane_b32 v1, s43, 31
    134 ; GCN-NEXT: v_writelane_b32 v1, s44, 32
    135 ; GCN-NEXT: v_writelane_b32 v1, s45, 33
    136 ; GCN-NEXT: v_writelane_b32 v1, s46, 34
    137 ; GCN-NEXT: v_writelane_b32 v1, s47, 35
    138 ; GCN-NEXT: v_writelane_b32 v1, s48, 36
    139 ; GCN-NEXT: v_writelane_b32 v1, s49, 37
    140 ; GCN-NEXT: v_writelane_b32 v1, s50, 38
    141 ; GCN-NEXT: v_writelane_b32 v1, s51, 39
    142 ; GCN-NEXT: v_writelane_b32 v1, s52, 40
    143 ; GCN-NEXT: v_writelane_b32 v1, s53, 41
    144 ; GCN-NEXT: v_writelane_b32 v1, s54, 42
    145 ; GCN-NEXT: v_writelane_b32 v1, s55, 43
    146 ; GCN-NEXT: v_writelane_b32 v1, s56, 44
    147 ; GCN-NEXT: v_writelane_b32 v1, s57, 45
    148 ; GCN-NEXT: v_writelane_b32 v1, s58, 46
    149 ; GCN-NEXT: v_writelane_b32 v1, s59, 47
    150 ; GCN-NEXT: v_writelane_b32 v1, s60, 48
    151 ; GCN-NEXT: v_writelane_b32 v1, s61, 49
    152 ; GCN-NEXT: v_writelane_b32 v1, s62, 50
    153 ; GCN-NEXT: v_writelane_b32 v1, s63, 51
    154 ; GCN-NEXT: v_writelane_b32 v1, s64, 52
    155 ; GCN-NEXT: v_writelane_b32 v1, s65, 53
    156 ; GCN-NEXT: v_writelane_b32 v1, s66, 54
    157 ; GCN-NEXT: v_writelane_b32 v1, s67, 55
    158 ; GCN-NEXT: v_writelane_b32 v1, s68, 56
    159 ; GCN-NEXT: v_writelane_b32 v1, s69, 57
    160 ; GCN-NEXT: v_writelane_b32 v1, s70, 58
    161 ; GCN-NEXT: v_writelane_b32 v1, s71, 59
    162 ; GCN-NEXT: v_writelane_b32 v1, s72, 60
    163 ; GCN-NEXT: v_writelane_b32 v1, s73, 61
    164 ; GCN-NEXT: v_writelane_b32 v1, s74, 62
    165 ; GCN-NEXT: v_writelane_b32 v1, s75, 63
    166 ; GCN-NEXT: v_writelane_b32 v2, s76, 0
    167 ; GCN-NEXT: v_writelane_b32 v2, s77, 1
    168 ; GCN-NEXT: v_writelane_b32 v2, s78, 2
    169 ; GCN-NEXT: v_writelane_b32 v2, s79, 3
    170 ; GCN-NEXT: v_writelane_b32 v2, s80, 4
    171 ; GCN-NEXT: v_writelane_b32 v2, s81, 5
    172 ; GCN-NEXT: v_writelane_b32 v2, s82, 6
    173 ; GCN-NEXT: v_writelane_b32 v2, s83, 7
    174 ; GCN: s_cbranch_scc1
    175 
    176 
    177 ; GCN: v_readlane_b32 s[[USE_TMP_LO:[0-9]+]], v0, 0
    178 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 1
    179 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 2
    180 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 3
    181 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 4
    182 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 5
    183 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 6
    184 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI:[0-9]+]], v0, 7
    185 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    186 
    187 
    188 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 0
    189 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 1
    190 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 2
    191 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 3
    192 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 4
    193 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 5
    194 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 6
    195 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 7
    196 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    197 
    198 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 8
    199 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 9
    200 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 10
    201 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 11
    202 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 12
    203 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 13
    204 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 14
    205 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 15
    206 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    207 
    208 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 16
    209 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 17
    210 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 18
    211 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 19
    212 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 20
    213 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 21
    214 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 22
    215 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 23
    216 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    217 
    218 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 24
    219 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 25
    220 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 26
    221 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 27
    222 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 28
    223 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 29
    224 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 30
    225 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 31
    226 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    227 
    228 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 32
    229 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 33
    230 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 34
    231 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 35
    232 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 36
    233 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 37
    234 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 38
    235 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 39
    236 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    237 
    238 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 40
    239 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 41
    240 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 42
    241 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 43
    242 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 44
    243 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 45
    244 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 46
    245 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 47
    246 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    247 
    248 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 48
    249 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 49
    250 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 50
    251 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 51
    252 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 52
    253 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 53
    254 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 54
    255 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 55
    256 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    257 
    258 ; GCN: v_readlane_b32 s[[USE_TMP_LO]], v1, 56
    259 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 57
    260 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 58
    261 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 59
    262 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 60
    263 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 61
    264 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v1, 62
    265 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI]], v1, 63
    266 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    267 
    268 ; GCN: v_readlane_b32 s{{[0-9]+}}, v2, 0
    269 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 1
    270 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 2
    271 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 3
    272 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 4
    273 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 5
    274 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 6
    275 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v2, 7
    276 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    277 
    278 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 56
    279 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 57
    280 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 58
    281 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 59
    282 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 60
    283 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 61
    284 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 62
    285 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 63
    286 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    287 
    288 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 8
    289 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 9
    290 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 10
    291 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 11
    292 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 12
    293 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 13
    294 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 14
    295 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 15
    296 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    297 
    298 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 16
    299 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 17
    300 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 18
    301 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 19
    302 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 20
    303 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 21
    304 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 22
    305 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 23
    306 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    307 
    308 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 24
    309 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 25
    310 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 26
    311 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 27
    312 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 28
    313 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 29
    314 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 30
    315 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 31
    316 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    317 
    318 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 32
    319 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 33
    320 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 34
    321 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 35
    322 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 36
    323 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 37
    324 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 38
    325 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 39
    326 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    327 
    328 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 40
    329 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 41
    330 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 42
    331 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 43
    332 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 44
    333 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 45
    334 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 46
    335 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 47
    336 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    337 
    338 ; GCN: v_readlane_b32 s{{[0-9]+}}, v0, 48
    339 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 49
    340 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 50
    341 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 51
    342 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 52
    343 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 53
    344 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 54
    345 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v0, 55
    346 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    347 define amdgpu_kernel void @spill_sgprs_to_multiple_vgprs(i32 addrspace(1)* %out, i32 %in) #0 {
    348   %wide.sgpr0 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    349   %wide.sgpr1 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    350   %wide.sgpr2 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    351   %wide.sgpr3 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    352   %wide.sgpr4 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    353   %wide.sgpr5 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    354   %wide.sgpr6 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    355   %wide.sgpr7 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    356   %wide.sgpr8 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    357   %wide.sgpr9 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    358   %wide.sgpr10 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    359   %wide.sgpr11 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    360   %wide.sgpr12 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    361   %wide.sgpr13 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    362   %wide.sgpr14 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    363   %wide.sgpr15 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    364   %wide.sgpr16 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    365   %cmp = icmp eq i32 %in, 0
    366   br i1 %cmp, label %bb0, label %ret
    367 
    368 bb0:
    369   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr0) #0
    370   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr1) #0
    371   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr2) #0
    372   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr3) #0
    373   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr4) #0
    374   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr5) #0
    375   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr6) #0
    376   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr7) #0
    377   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr8) #0
    378   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr9) #0
    379   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr10) #0
    380   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr11) #0
    381   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr12) #0
    382   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr13) #0
    383   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr14) #0
    384   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr15) #0
    385   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr16) #0
    386   br label %ret
    387 
    388 ret:
    389   ret void
    390 }
    391 
    392 ; Some of the lanes of an SGPR spill are in one VGPR and some forced
    393 ; into the next available VGPR.
    394 
    395 ; GCN-LABEL: {{^}}split_sgpr_spill_2_vgprs:
    396 ; GCN: def s[4:19]
    397 ; GCN: def s[20:35]
    398 
    399 ; GCN: v_writelane_b32 v0, s4, 50
    400 ; GCN-NEXT: v_writelane_b32 v0, s5, 51
    401 ; GCN-NEXT: v_writelane_b32 v0, s6, 52
    402 ; GCN-NEXT: v_writelane_b32 v0, s7, 53
    403 ; GCN-NEXT: v_writelane_b32 v0, s8, 54
    404 ; GCN-NEXT: v_writelane_b32 v0, s9, 55
    405 ; GCN-NEXT: v_writelane_b32 v0, s10, 56
    406 ; GCN-NEXT: v_writelane_b32 v0, s11, 57
    407 ; GCN-NEXT: v_writelane_b32 v0, s12, 58
    408 ; GCN-NEXT: v_writelane_b32 v0, s13, 59
    409 ; GCN-NEXT: v_writelane_b32 v0, s14, 60
    410 ; GCN-NEXT: v_writelane_b32 v0, s15, 61
    411 ; GCN-NEXT: v_writelane_b32 v0, s16, 62
    412 ; GCN-NEXT: v_writelane_b32 v0, s17, 63
    413 ; GCN-NEXT: v_writelane_b32 v1, s18, 0
    414 ; GCN-NEXT: v_writelane_b32 v1, s19, 1
    415 
    416 ; GCN: v_readlane_b32 s4, v0, 50
    417 ; GCN-NEXT: v_readlane_b32 s5, v0, 51
    418 ; GCN-NEXT: v_readlane_b32 s6, v0, 52
    419 ; GCN-NEXT: v_readlane_b32 s7, v0, 53
    420 ; GCN-NEXT: v_readlane_b32 s8, v0, 54
    421 ; GCN-NEXT: v_readlane_b32 s9, v0, 55
    422 ; GCN-NEXT: v_readlane_b32 s10, v0, 56
    423 ; GCN-NEXT: v_readlane_b32 s11, v0, 57
    424 ; GCN-NEXT: v_readlane_b32 s12, v0, 58
    425 ; GCN-NEXT: v_readlane_b32 s13, v0, 59
    426 ; GCN-NEXT: v_readlane_b32 s14, v0, 60
    427 ; GCN-NEXT: v_readlane_b32 s15, v0, 61
    428 ; GCN-NEXT: v_readlane_b32 s16, v0, 62
    429 ; GCN-NEXT: v_readlane_b32 s17, v0, 63
    430 ; GCN-NEXT: v_readlane_b32 s18, v1, 0
    431 ; GCN-NEXT: v_readlane_b32 s19, v1, 1
    432 define amdgpu_kernel void @split_sgpr_spill_2_vgprs(i32 addrspace(1)* %out, i32 %in) #1 {
    433   %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    434   %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    435   %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    436   %wide.sgpr5 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    437   %wide.sgpr3 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
    438   %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
    439 
    440   %cmp = icmp eq i32 %in, 0
    441   br i1 %cmp, label %bb0, label %ret
    442 
    443 bb0:
    444   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #0
    445   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #0
    446   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #0
    447   call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr3) #0
    448   call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #0
    449   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr5) #0
    450   br label %ret
    451 
    452 ret:
    453   ret void
    454 }
    455 
    456 ; The first 64 SGPR spills can go to a VGPR, but there isn't a second
    457 ; so some spills must be to memory. The last 16 element spill runs out of lanes at the 15th element.
    458 
    459 ; GCN-LABEL: {{^}}no_vgprs_last_sgpr_spill:
    460 
    461 ; GCN: v_writelane_b32 v23, s{{[0-9]+}}, 0
    462 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 1
    463 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 2
    464 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 3
    465 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 4
    466 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 5
    467 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 6
    468 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 7
    469 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 8
    470 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 9
    471 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 10
    472 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 11
    473 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 12
    474 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 13
    475 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 14
    476 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 15
    477 
    478 ; GCN: v_writelane_b32 v23, s{{[0-9]+}}, 16
    479 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 17
    480 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 18
    481 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 19
    482 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 20
    483 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 21
    484 ; GCN-NEXT: v_writelane_b32 v23, s{{[0-9]+}}, 22
    485 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 23
    486 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 24
    487 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 25
    488 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 26
    489 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 27
    490 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 28
    491 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 29
    492 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 30
    493 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 31
    494 
    495 ; GCN: def s[0:1]
    496 ; GCN:      v_writelane_b32 v23, s0, 32
    497 ; GCN-NEXT: v_writelane_b32 v23, s1, 33
    498 
    499 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 34
    500 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 35
    501 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 36
    502 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 37
    503 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 38
    504 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 39
    505 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 40
    506 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 41
    507 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 42
    508 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 43
    509 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 44
    510 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 45
    511 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 46
    512 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 47
    513 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 48
    514 ; GCN-NEXT: v_writelane_b32 v23, s{{[[0-9]+}}, 49
    515 
    516 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    517 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    518 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    519 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    520 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    521 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    522 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    523 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    524 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    525 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    526 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    527 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    528 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    529 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    530 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    531 ; GCN: buffer_store_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    532 ; GCN: s_cbranch_scc1
    533 
    534 
    535 ; GCN: v_readlane_b32 s[[USE_TMP_LO:[0-9]+]], v23, 0
    536 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 1
    537 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 2
    538 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 3
    539 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 4
    540 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 5
    541 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 6
    542 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 7
    543 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 8
    544 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 9
    545 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 10
    546 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 11
    547 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 12
    548 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 13
    549 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 14
    550 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI:[0-9]+]], v23, 15
    551 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    552 
    553 
    554 ; GCN: v_readlane_b32 s[[USE_TMP_LO:[0-9]+]], v23, 34
    555 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 35
    556 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 36
    557 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 37
    558 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 38
    559 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 39
    560 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 40
    561 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 41
    562 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 42
    563 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 43
    564 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 44
    565 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 45
    566 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 46
    567 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 47
    568 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 48
    569 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI:[0-9]+]], v23, 49
    570 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    571 
    572 ; GCN: v_readlane_b32 s[[USE_TMP_LO:[0-9]+]], v23, 16
    573 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 17
    574 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 18
    575 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 19
    576 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 20
    577 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 21
    578 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 22
    579 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 23
    580 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 24
    581 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 25
    582 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 26
    583 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 27
    584 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 28
    585 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 29
    586 ; GCN-NEXT: v_readlane_b32 s{{[0-9]+}}, v23, 30
    587 ; GCN-NEXT: v_readlane_b32 s[[USE_TMP_HI:[0-9]+]], v23, 31
    588 ; GCN: ; use s{{\[}}[[USE_TMP_LO]]:[[USE_TMP_HI]]{{\]}}
    589 
    590 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    591 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    592 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    593 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    594 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    595 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    596 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    597 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    598 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    599 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    600 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    601 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    602 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    603 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    604 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    605 ; GCN: buffer_load_dword v{{[0-9]+}}, off, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}}
    606 
    607 ; GCN: v_readlane_b32 s0, v23, 32
    608 ; GCN: v_readlane_b32 s1, v23, 33
    609 ; GCN: ;;#ASMSTART
    610 ; GCN: ; use s[0:1]
    611 define amdgpu_kernel void @no_vgprs_last_sgpr_spill(i32 addrspace(1)* %out, i32 %in) #1 {
    612   call void asm sideeffect "", "~{v[0:7]}" () #0
    613   call void asm sideeffect "", "~{v[8:15]}" () #0
    614   call void asm sideeffect "", "~{v[16:19]}"() #0
    615   call void asm sideeffect "", "~{v[20:21]}"() #0
    616   call void asm sideeffect "", "~{v22}"() #0
    617 
    618   %wide.sgpr0 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    619   %wide.sgpr1 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    620   %wide.sgpr2 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    621   %wide.sgpr3 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
    622   %wide.sgpr4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
    623   %cmp = icmp eq i32 %in, 0
    624   br i1 %cmp, label %bb0, label %ret
    625 
    626 bb0:
    627   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr0) #0
    628   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr1) #0
    629   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr2) #0
    630   call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr3) #0
    631   call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr4) #0
    632   br label %ret
    633 
    634 ret:
    635   ret void
    636 }
    637 
    638 attributes #0 = { nounwind }
    639 attributes #1 = { nounwind "amdgpu-waves-per-eu"="10,10" }
    640