1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-- -O0 -run-pass=legalizer -global-isel-abort=0 -o - %s | FileCheck %s 3 4--- 5name: test_unmerge_s32_s64 6body: | 7 bb.0: 8 ; CHECK-LABEL: name: test_unmerge_s32_s64 9 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 10 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64) 11 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 12 ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32) 13 %0:_(s64) = G_CONSTANT i64 0 14 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0:_(s64) 15 $vgpr0 = COPY %1(s32) 16 $vgpr1 = COPY %2(s32) 17... 18 19--- 20name: test_unmerge_s32_v2s32 21body: | 22 bb.0: 23 liveins: $vgpr0_vgpr1 24 ; CHECK-LABEL: name: test_unmerge_s32_v2s32 25 ; CHECK: liveins: $vgpr0_vgpr1 26 ; CHECK-NEXT: {{ $}} 27 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 28 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 29 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 30 ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32) 31 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 32 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0 33 $vgpr0 = COPY %1 34 $vgpr1 = COPY %2 35... 36 37--- 38name: test_unmerge_s32_v7s64 39body: | 40 bb.0: 41 liveins: 42 ; CHECK-LABEL: name: test_unmerge_s32_v7s64 43 ; CHECK: [[DEF:%[0-9]+]]:_(<7 x s64>) = IMPLICIT_DEF 44 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<7 x s64>) 45 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 46 ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32) 47 ; CHECK-NEXT: $vgpr2 = COPY [[UV2]](s32) 48 ; CHECK-NEXT: $vgpr3 = COPY [[UV3]](s32) 49 ; CHECK-NEXT: $vgpr4 = COPY [[UV4]](s32) 50 ; CHECK-NEXT: $vgpr5 = COPY [[UV5]](s32) 51 ; CHECK-NEXT: $vgpr6 = COPY [[UV6]](s32) 52 ; CHECK-NEXT: $vgpr7 = COPY [[UV7]](s32) 53 ; CHECK-NEXT: $vgpr8 = COPY [[UV8]](s32) 54 ; CHECK-NEXT: $vgpr9 = COPY [[UV9]](s32) 55 ; CHECK-NEXT: $vgpr10 = COPY [[UV10]](s32) 56 ; CHECK-NEXT: $vgpr11 = COPY [[UV11]](s32) 57 ; CHECK-NEXT: $vgpr12 = COPY [[UV12]](s32) 58 ; CHECK-NEXT: $vgpr13 = COPY [[UV13]](s32) 59 %0:_(<7 x s64>) = IMPLICIT_DEF 60 %1:_(s32), %2:_(s32), %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32), %11:_(s32), %12:_(s32), %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %0 61 $vgpr0 = COPY %1 62 $vgpr1 = COPY %2 63 $vgpr2 = COPY %3 64 $vgpr3 = COPY %4 65 $vgpr4 = COPY %5 66 $vgpr5 = COPY %6 67 $vgpr6 = COPY %7 68 $vgpr7 = COPY %8 69 $vgpr8 = COPY %9 70 $vgpr9 = COPY %10 71 $vgpr10 = COPY %11 72 $vgpr11 = COPY %12 73 $vgpr12 = COPY %13 74 $vgpr13 = COPY %14 75... 76 77--- 78name: test_unmerge_s16_v2s16 79body: | 80 bb.0: 81 liveins: $vgpr0 82 ; CHECK-LABEL: name: test_unmerge_s16_v2s16 83 ; CHECK: liveins: $vgpr0 84 ; CHECK-NEXT: {{ $}} 85 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 86 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 87 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 88 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 89 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32) 90 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 91 %0:_(<2 x s16>) = COPY $vgpr0 92 %1:_(s16), %2:_(s16) = G_UNMERGE_VALUES %0 93 %3:_(s32) = G_ANYEXT %1 94 %4:_(s32) = G_ANYEXT %2 95 $vgpr0 = COPY %3 96 $vgpr1 = COPY %4 97... 98 99--- 100name: test_unmerge_s16_v3s16 101body: | 102 bb.0: 103 ; CHECK-LABEL: name: test_unmerge_s16_v3s16 104 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 105 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 106 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 107 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 108 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 109 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 110 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32) 111 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 112 ; CHECK-NEXT: $vgpr2 = COPY [[BITCAST1]](s32) 113 %0:_(<3 x s16>) = G_IMPLICIT_DEF 114 %1:_(s16), %2:_(s16), %3:_(s16) = G_UNMERGE_VALUES %0 115 %4:_(s32) = G_ANYEXT %1 116 %5:_(s32) = G_ANYEXT %2 117 %6:_(s32) = G_ANYEXT %3 118 $vgpr0 = COPY %4 119 $vgpr1 = COPY %5 120 $vgpr2 = COPY %6 121... 122 123--- 124 125name: test_unmerge_s16_v4s16 126body: | 127 bb.0: 128 liveins: $vgpr0_vgpr1 129 ; CHECK-LABEL: name: test_unmerge_s16_v4s16 130 ; CHECK: liveins: $vgpr0_vgpr1 131 ; CHECK-NEXT: {{ $}} 132 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 133 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 134 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 135 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 136 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 137 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 138 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 139 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32) 140 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 141 ; CHECK-NEXT: $vgpr2 = COPY [[BITCAST1]](s32) 142 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR1]](s32) 143 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 144 %1:_(s16), %2:_(s16), %3:_(s16), %4:_(s16) = G_UNMERGE_VALUES %0 145 %5:_(s32) = G_ANYEXT %1 146 %6:_(s32) = G_ANYEXT %2 147 %7:_(s32) = G_ANYEXT %3 148 %8:_(s32) = G_ANYEXT %4 149 $vgpr0 = COPY %5 150 $vgpr1 = COPY %6 151 $vgpr2 = COPY %7 152 $vgpr3 = COPY %8 153... 154 155--- 156name: test_unmerge_s16_v6s16 157body: | 158 bb.0: 159 liveins: $vgpr0_vgpr1 160 ; CHECK-LABEL: name: test_unmerge_s16_v6s16 161 ; CHECK: liveins: $vgpr0_vgpr1 162 ; CHECK-NEXT: {{ $}} 163 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 164 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 165 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 166 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 167 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 168 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 169 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 170 ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV2]](<2 x s16>) 171 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 172 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32) 173 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 174 ; CHECK-NEXT: $vgpr2 = COPY [[BITCAST1]](s32) 175 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR1]](s32) 176 ; CHECK-NEXT: $vgpr4 = COPY [[BITCAST2]](s32) 177 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR2]](s32) 178 %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 179 %1:_(s16), %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16), %6:_(s16) = G_UNMERGE_VALUES %0 180 %7:_(s32) = G_ANYEXT %1 181 %8:_(s32) = G_ANYEXT %2 182 %9:_(s32) = G_ANYEXT %3 183 %10:_(s32) = G_ANYEXT %4 184 %11:_(s32) = G_ANYEXT %5 185 %12:_(s32) = G_ANYEXT %6 186 $vgpr0 = COPY %7 187 $vgpr1 = COPY %8 188 $vgpr2 = COPY %9 189 $vgpr3 = COPY %10 190 $vgpr4 = COPY %11 191 $vgpr5 = COPY %12 192... 193 194--- 195 196name: test_unmerge_s8_s16 197body: | 198 bb.0: 199 liveins: $vgpr0 200 ; CHECK-LABEL: name: test_unmerge_s8_s16 201 ; CHECK: liveins: $vgpr0 202 ; CHECK-NEXT: {{ $}} 203 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 204 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 205 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 206 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 207 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 208 %0:_(s32) = COPY $vgpr0 209 %1:_(s16) = G_TRUNC %0 210 %2:_(s8), %3:_(s8) = G_UNMERGE_VALUES %1 211 %4:_(s32) = G_ANYEXT %2 212 %5:_(s32) = G_ANYEXT %3 213 $vgpr0 = COPY %4 214 $vgpr1 = COPY %5 215... 216 217--- 218name: test_unmerge_s8_s32 219body: | 220 bb.0: 221 liveins: $vgpr0 222 ; CHECK-LABEL: name: test_unmerge_s8_s32 223 ; CHECK: liveins: $vgpr0 224 ; CHECK-NEXT: {{ $}} 225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 226 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 227 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 228 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 229 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32) 230 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 231 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32) 232 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 233 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 234 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 235 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR2]](s32) 236 %0:_(s32) = COPY $vgpr0 237 %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8) = G_UNMERGE_VALUES %0 238 %5:_(s32) = G_ANYEXT %1 239 %6:_(s32) = G_ANYEXT %2 240 %7:_(s32) = G_ANYEXT %3 241 %8:_(s32) = G_ANYEXT %4 242 $vgpr0 = COPY %5 243 $vgpr1 = COPY %6 244 $vgpr2 = COPY %7 245 $vgpr3 = COPY %8 246... 247 248--- 249name: test_unmerge_s8_s48 250body: | 251 bb.0: 252 liveins: $vgpr0_vgpr1 253 ; CHECK-LABEL: name: test_unmerge_s8_s48 254 ; CHECK: liveins: $vgpr0_vgpr1 255 ; CHECK-NEXT: {{ $}} 256 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 257 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 258 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 259 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 260 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 261 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 262 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 263 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 264 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32) 265 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 266 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY2]](s32) 267 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 268 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[C1]](s32) 269 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 270 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR1]](s32) 271 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR]](s32) 272 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR2]](s32) 273 ; CHECK-NEXT: $vgpr4 = COPY [[UV1]](s32) 274 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR3]](s32) 275 %0:_(s64) = COPY $vgpr0_vgpr1 276 %1:_(s48) = G_TRUNC %0 277 %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8) = G_UNMERGE_VALUES %1 278 %8:_(s32) = G_ANYEXT %2 279 %9:_(s32) = G_ANYEXT %3 280 %10:_(s32) = G_ANYEXT %4 281 %11:_(s32) = G_ANYEXT %5 282 %12:_(s32) = G_ANYEXT %6 283 %13:_(s32) = G_ANYEXT %7 284 $vgpr0 = COPY %8 285 $vgpr1 = COPY %9 286 $vgpr2 = COPY %10 287 $vgpr3 = COPY %11 288 $vgpr4 = COPY %12 289 $vgpr5 = COPY %13 290... 291 292--- 293name: test_unmerge_s16_s48 294body: | 295 bb.0: 296 liveins: $vgpr0_vgpr1 297 ; CHECK-LABEL: name: test_unmerge_s16_s48 298 ; CHECK: liveins: $vgpr0_vgpr1 299 ; CHECK-NEXT: {{ $}} 300 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 301 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 302 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 303 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 304 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 305 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 306 ; CHECK-NEXT: $vgpr2 = COPY [[UV1]](s32) 307 %0:_(s64) = COPY $vgpr0_vgpr1 308 %1:_(s48) = G_TRUNC %0 309 %2:_(s16), %3:_(s16), %4:_(s16) = G_UNMERGE_VALUES %1 310 %5:_(s32) = G_ANYEXT %2 311 %6:_(s32) = G_ANYEXT %3 312 %7:_(s32) = G_ANYEXT %4 313 $vgpr0 = COPY %5 314 $vgpr1 = COPY %6 315 $vgpr2 = COPY %7 316... 317 318--- 319name: test_unmerge_s8_s64 320body: | 321 bb.0: 322 liveins: $vgpr0_vgpr1 323 ; CHECK-LABEL: name: test_unmerge_s8_s64 324 ; CHECK: liveins: $vgpr0_vgpr1 325 ; CHECK-NEXT: {{ $}} 326 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 327 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 328 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 329 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 330 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 331 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 332 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 333 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 334 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 335 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32) 336 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 337 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY2]](s32) 338 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 339 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 340 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY3]](s32) 341 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[LSHR1]], [[C1]](s32) 342 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 343 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR2]](s32) 344 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR]](s32) 345 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR3]](s32) 346 ; CHECK-NEXT: $vgpr4 = COPY [[UV1]](s32) 347 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR4]](s32) 348 ; CHECK-NEXT: $vgpr6 = COPY [[LSHR1]](s32) 349 ; CHECK-NEXT: $vgpr7 = COPY [[LSHR5]](s32) 350 %0:_(s64) = COPY $vgpr0_vgpr1 351 %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8) = G_UNMERGE_VALUES %0 352 %10:_(s32) = G_ANYEXT %1 353 %11:_(s32) = G_ANYEXT %2 354 %12:_(s32) = G_ANYEXT %3 355 %13:_(s32) = G_ANYEXT %4 356 %14:_(s32) = G_ANYEXT %5 357 %15:_(s32) = G_ANYEXT %6 358 %16:_(s32) = G_ANYEXT %7 359 %17:_(s32) = G_ANYEXT %8 360 $vgpr0 = COPY %10 361 $vgpr1 = COPY %11 362 $vgpr2 = COPY %12 363 $vgpr3 = COPY %13 364 $vgpr4 = COPY %14 365 $vgpr5 = COPY %15 366 $vgpr6 = COPY %16 367 $vgpr7 = COPY %17 368... 369 370--- 371name: test_unmerge_s8_p1 372body: | 373 bb.0: 374 liveins: $vgpr0_vgpr1 375 ; CHECK-LABEL: name: test_unmerge_s8_p1 376 ; CHECK: liveins: $vgpr0_vgpr1 377 ; CHECK-NEXT: {{ $}} 378 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 379 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](p1) 380 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 381 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 382 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 383 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 384 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 385 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 386 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 387 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32) 388 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 389 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY2]](s32) 390 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 391 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 392 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY3]](s32) 393 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[LSHR1]], [[C1]](s32) 394 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 395 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR2]](s32) 396 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR]](s32) 397 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR3]](s32) 398 ; CHECK-NEXT: $vgpr4 = COPY [[UV1]](s32) 399 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR4]](s32) 400 ; CHECK-NEXT: $vgpr6 = COPY [[LSHR1]](s32) 401 ; CHECK-NEXT: $vgpr7 = COPY [[LSHR5]](s32) 402 %0:_(p1) = COPY $vgpr0_vgpr1 403 %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8) = G_UNMERGE_VALUES %0 404 %10:_(s32) = G_ANYEXT %1 405 %11:_(s32) = G_ANYEXT %2 406 %12:_(s32) = G_ANYEXT %3 407 %13:_(s32) = G_ANYEXT %4 408 %14:_(s32) = G_ANYEXT %5 409 %15:_(s32) = G_ANYEXT %6 410 %16:_(s32) = G_ANYEXT %7 411 %17:_(s32) = G_ANYEXT %8 412 $vgpr0 = COPY %10 413 $vgpr1 = COPY %11 414 $vgpr2 = COPY %12 415 $vgpr3 = COPY %13 416 $vgpr4 = COPY %14 417 $vgpr5 = COPY %15 418 $vgpr6 = COPY %16 419 $vgpr7 = COPY %17 420... 421 422--- 423name: test_unmerge_s4_p1 424body: | 425 bb.0: 426 liveins: $vgpr0_vgpr1 427 ; CHECK-LABEL: name: test_unmerge_s4_p1 428 ; CHECK: liveins: $vgpr0_vgpr1 429 ; CHECK-NEXT: {{ $}} 430 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 431 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](p1) 432 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 433 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 434 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 435 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4 436 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 437 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 438 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 439 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32) 440 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 441 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C3]](s32) 442 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 443 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY2]](s32) 444 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 12 445 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C4]](s32) 446 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C2]] 447 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY3]](s32) 448 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 449 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY4]](s32) 450 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[C3]](s32) 451 ; CHECK-NEXT: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY5]](s32) 452 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C4]](s32) 453 ; CHECK-NEXT: [[LSHR7:%[0-9]+]]:_(s32) = G_LSHR [[LSHR]], [[COPY6]](s32) 454 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 455 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 456 ; CHECK-NEXT: [[LSHR8:%[0-9]+]]:_(s32) = G_LSHR [[AND3]], [[COPY7]](s32) 457 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY [[C3]](s32) 458 ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 459 ; CHECK-NEXT: [[LSHR9:%[0-9]+]]:_(s32) = G_LSHR [[AND4]], [[COPY8]](s32) 460 ; CHECK-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY [[C4]](s32) 461 ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C2]] 462 ; CHECK-NEXT: [[LSHR10:%[0-9]+]]:_(s32) = G_LSHR [[AND5]], [[COPY9]](s32) 463 ; CHECK-NEXT: [[LSHR11:%[0-9]+]]:_(s32) = G_LSHR [[LSHR1]], [[C1]](s32) 464 ; CHECK-NEXT: [[LSHR12:%[0-9]+]]:_(s32) = G_LSHR [[LSHR1]], [[C3]](s32) 465 ; CHECK-NEXT: [[LSHR13:%[0-9]+]]:_(s32) = G_LSHR [[LSHR1]], [[C4]](s32) 466 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 467 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR2]](s32) 468 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR3]](s32) 469 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR4]](s32) 470 ; CHECK-NEXT: $vgpr4 = COPY [[LSHR]](s32) 471 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR5]](s32) 472 ; CHECK-NEXT: $vgpr6 = COPY [[LSHR6]](s32) 473 ; CHECK-NEXT: $vgpr7 = COPY [[LSHR7]](s32) 474 ; CHECK-NEXT: $vgpr8 = COPY [[UV1]](s32) 475 ; CHECK-NEXT: $vgpr9 = COPY [[LSHR8]](s32) 476 ; CHECK-NEXT: $vgpr10 = COPY [[LSHR9]](s32) 477 ; CHECK-NEXT: $vgpr11 = COPY [[LSHR10]](s32) 478 ; CHECK-NEXT: $vgpr12 = COPY [[LSHR1]](s32) 479 ; CHECK-NEXT: $vgpr13 = COPY [[LSHR11]](s32) 480 ; CHECK-NEXT: $vgpr14 = COPY [[LSHR12]](s32) 481 ; CHECK-NEXT: $vgpr15 = COPY [[LSHR13]](s32) 482 %0:_(p1) = COPY $vgpr0_vgpr1 483 %1:_(s4), %2:_(s4), %3:_(s4), %4:_(s4), %5:_(s4), %6:_(s4), %7:_(s4), %8:_(s4), %9:_(s4), %10:_(s4), %11:_(s4), %12:_(s4), %13:_(s4), %14:_(s4), %15:_(s4), %16:_(s4) = G_UNMERGE_VALUES %0 484 %17:_(s32) = G_ANYEXT %1 485 %18:_(s32) = G_ANYEXT %2 486 %19:_(s32) = G_ANYEXT %3 487 %20:_(s32) = G_ANYEXT %4 488 %21:_(s32) = G_ANYEXT %5 489 %22:_(s32) = G_ANYEXT %6 490 %23:_(s32) = G_ANYEXT %7 491 %24:_(s32) = G_ANYEXT %8 492 %25:_(s32) = G_ANYEXT %9 493 %26:_(s32) = G_ANYEXT %10 494 %27:_(s32) = G_ANYEXT %11 495 %28:_(s32) = G_ANYEXT %12 496 %29:_(s32) = G_ANYEXT %13 497 %30:_(s32) = G_ANYEXT %14 498 %31:_(s32) = G_ANYEXT %15 499 %32:_(s32) = G_ANYEXT %16 500 $vgpr0 = COPY %17 501 $vgpr1 = COPY %18 502 $vgpr2 = COPY %19 503 $vgpr3 = COPY %20 504 $vgpr4 = COPY %21 505 $vgpr5 = COPY %22 506 $vgpr6 = COPY %23 507 $vgpr7 = COPY %24 508 $vgpr8 = COPY %25 509 $vgpr9 = COPY %26 510 $vgpr10 = COPY %27 511 $vgpr11 = COPY %28 512 $vgpr12 = COPY %29 513 $vgpr13 = COPY %30 514 $vgpr14 = COPY %31 515 $vgpr15 = COPY %32 516... 517 518--- 519name: test_unmerge_s16_p1 520body: | 521 bb.0: 522 liveins: $vgpr0_vgpr1 523 ; CHECK-LABEL: name: test_unmerge_s16_p1 524 ; CHECK: liveins: $vgpr0_vgpr1 525 ; CHECK-NEXT: {{ $}} 526 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 527 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](p1) 528 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 529 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 530 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 531 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 532 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 533 ; CHECK-NEXT: $vgpr2 = COPY [[UV1]](s32) 534 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR1]](s32) 535 %0:_(p1) = COPY $vgpr0_vgpr1 536 %1:_(s16), %2:_(s16), %3:_(s16), %4:_(s16) = G_UNMERGE_VALUES %0 537 %5:_(s32) = G_ANYEXT %1 538 %6:_(s32) = G_ANYEXT %2 539 %7:_(s32) = G_ANYEXT %3 540 %8:_(s32) = G_ANYEXT %4 541 $vgpr0 = COPY %5 542 $vgpr1 = COPY %6 543 $vgpr2 = COPY %7 544 $vgpr3 = COPY %8 545... 546 547--- 548name: test_unmerge_s32_p1 549body: | 550 bb.0: 551 liveins: $vgpr0_vgpr1 552 ; CHECK-LABEL: name: test_unmerge_s32_p1 553 ; CHECK: liveins: $vgpr0_vgpr1 554 ; CHECK-NEXT: {{ $}} 555 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 556 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](p1) 557 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 558 ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32) 559 %0:_(p1) = COPY $vgpr0_vgpr1 560 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0 561 $vgpr0 = COPY %1 562 $vgpr1 = COPY %2 563... 564 565--- 566name: test_unmerge_s16_s32 567body: | 568 bb.0: 569 liveins: $vgpr0 570 ; CHECK-LABEL: name: test_unmerge_s16_s32 571 ; CHECK: liveins: $vgpr0 572 ; CHECK-NEXT: {{ $}} 573 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 574 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 575 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 576 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 577 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 578 %0:_(s32) = COPY $vgpr0 579 %1:_(s16), %2:_(s16) = G_UNMERGE_VALUES %0 580 %3:_(s32) = G_ANYEXT %1 581 %4:_(s32) = G_ANYEXT %2 582 $vgpr0 = COPY %3 583 $vgpr1 = COPY %4 584... 585 586--- 587name: test_unmerge_s16_p3 588body: | 589 bb.0: 590 liveins: $vgpr0 591 ; CHECK-LABEL: name: test_unmerge_s16_p3 592 ; CHECK: liveins: $vgpr0 593 ; CHECK-NEXT: {{ $}} 594 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 595 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3) 596 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 597 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C]](s32) 598 ; CHECK-NEXT: $vgpr0 = COPY [[PTRTOINT]](s32) 599 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 600 %0:_(p3) = COPY $vgpr0 601 %1:_(s16), %2:_(s16) = G_UNMERGE_VALUES %0 602 %3:_(s32) = G_ANYEXT %1 603 %4:_(s32) = G_ANYEXT %2 604 $vgpr0 = COPY %3 605 $vgpr1 = COPY %4 606... 607 608--- 609name: test_unmerge_s8_p3 610body: | 611 bb.0: 612 liveins: $vgpr0 613 ; CHECK-LABEL: name: test_unmerge_s8_p3 614 ; CHECK: liveins: $vgpr0 615 ; CHECK-NEXT: {{ $}} 616 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 617 ; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3) 618 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 619 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C]](s32) 620 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 621 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C1]](s32) 622 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 623 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C2]](s32) 624 ; CHECK-NEXT: $vgpr0 = COPY [[PTRTOINT]](s32) 625 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 626 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 627 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR2]](s32) 628 %0:_(p3) = COPY $vgpr0 629 %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8) = G_UNMERGE_VALUES %0 630 %5:_(s32) = G_ANYEXT %1 631 %6:_(s32) = G_ANYEXT %2 632 %7:_(s32) = G_ANYEXT %3 633 %8:_(s32) = G_ANYEXT %4 634 $vgpr0 = COPY %5 635 $vgpr1 = COPY %6 636 $vgpr2 = COPY %7 637 $vgpr3 = COPY %8 638 639... 640 641--- 642name: test_unmerge_s16_s64 643body: | 644 bb.0: 645 liveins: $vgpr0_vgpr1 646 ; CHECK-LABEL: name: test_unmerge_s16_s64 647 ; CHECK: liveins: $vgpr0_vgpr1 648 ; CHECK-NEXT: {{ $}} 649 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 650 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 651 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 652 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 653 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 654 ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32) 655 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 656 ; CHECK-NEXT: $vgpr2 = COPY [[UV1]](s32) 657 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR1]](s32) 658 %0:_(s64) = COPY $vgpr0_vgpr1 659 %1:_(s16), %2:_(s16), %3:_(s16), %4:_(s16) = G_UNMERGE_VALUES %0 660 %5:_(s32) = G_ANYEXT %1 661 %6:_(s32) = G_ANYEXT %2 662 %7:_(s32) = G_ANYEXT %3 663 %8:_(s32) = G_ANYEXT %4 664 $vgpr0 = COPY %5 665 $vgpr1 = COPY %6 666 $vgpr2 = COPY %7 667 $vgpr3 = COPY %8 668... 669 670--- 671name: test_unmerge_s1_s3 672body: | 673 bb.0: 674 liveins: $vgpr0 675 ; CHECK-LABEL: name: test_unmerge_s1_s3 676 ; CHECK: liveins: $vgpr0 677 ; CHECK-NEXT: {{ $}} 678 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 679 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 680 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 681 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 682 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32) 683 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 684 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 685 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 686 %0:_(s32) = COPY $vgpr0 687 %1:_(s3) = G_TRUNC %0 688 %2:_(s1), %3:_(s1), %4:_(s1) = G_UNMERGE_VALUES %1 689 %5:_(s32) = G_ANYEXT %2 690 %6:_(s32) = G_ANYEXT %3 691 %7:_(s32) = G_ANYEXT %4 692 $vgpr0 = COPY %5 693 $vgpr1 = COPY %6 694 $vgpr2 = COPY %7 695... 696 697--- 698name: test_unmerge_s1_s8 699body: | 700 bb.0: 701 liveins: $vgpr0 702 ; CHECK-LABEL: name: test_unmerge_s1_s8 703 ; CHECK: liveins: $vgpr0 704 ; CHECK-NEXT: {{ $}} 705 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 706 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 707 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 708 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 709 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32) 710 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 3 711 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32) 712 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 4 713 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C3]](s32) 714 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 715 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C4]](s32) 716 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 6 717 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C5]](s32) 718 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 7 719 ; CHECK-NEXT: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C6]](s32) 720 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 721 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 722 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 723 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR2]](s32) 724 ; CHECK-NEXT: $vgpr4 = COPY [[LSHR3]](s32) 725 ; CHECK-NEXT: $vgpr5 = COPY [[LSHR4]](s32) 726 ; CHECK-NEXT: $vgpr6 = COPY [[LSHR5]](s32) 727 ; CHECK-NEXT: $vgpr7 = COPY [[LSHR6]](s32) 728 %0:_(s32) = COPY $vgpr0 729 %1:_(s8) = G_TRUNC %0 730 %2:_(s1), %3:_(s1), %4:_(s1), %5:_(s1), %6:_(s1), %7:_(s1), %8:_(s1), %9:_(s1) = G_UNMERGE_VALUES %1 731 %10:_(s32) = G_ANYEXT %2 732 %11:_(s32) = G_ANYEXT %3 733 %12:_(s32) = G_ANYEXT %4 734 %13:_(s32) = G_ANYEXT %5 735 %14:_(s32) = G_ANYEXT %6 736 %15:_(s32) = G_ANYEXT %7 737 %16:_(s32) = G_ANYEXT %8 738 %17:_(s32) = G_ANYEXT %9 739 $vgpr0 = COPY %10 740 $vgpr1 = COPY %11 741 $vgpr2 = COPY %12 742 $vgpr3 = COPY %13 743 $vgpr4 = COPY %14 744 $vgpr5 = COPY %15 745 $vgpr6 = COPY %16 746 $vgpr7 = COPY %17 747... 748 749--- 750 751name: test_unmerge_s128_v2s128 752body: | 753 bb.0: 754 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 755 ; CHECK-LABEL: name: test_unmerge_s128_v2s128 756 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 757 ; CHECK-NEXT: {{ $}} 758 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 759 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s128), [[UV1:%[0-9]+]]:_(s128) = G_UNMERGE_VALUES [[COPY]](<2 x s128>) 760 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[UV]](s128) 761 ; CHECK-NEXT: $vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[UV1]](s128) 762 %0:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 763 %1:_(s128), %2:_(s128) = G_UNMERGE_VALUES %0 764 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 765 $vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2 766... 767 768--- 769 770name: test_unmerge_s128_s256 771body: | 772 bb.0: 773 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 774 ; CHECK-LABEL: name: test_unmerge_s128_s256 775 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 776 ; CHECK-NEXT: {{ $}} 777 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s256) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 778 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s128), [[UV1:%[0-9]+]]:_(s128) = G_UNMERGE_VALUES [[COPY]](s256) 779 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[UV]](s128) 780 ; CHECK-NEXT: $vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[UV1]](s128) 781 %0:_(s256) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 782 %1:_(s128), %2:_(s128) = G_UNMERGE_VALUES %0 783 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 784 $vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2 785... 786 787--- 788 789name: test_unmerge_s256_s512 790body: | 791 bb.0: 792 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 793 794 ; CHECK-LABEL: name: test_unmerge_s256_s512 795 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 796 ; CHECK-NEXT: {{ $}} 797 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 798 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s256), [[UV1:%[0-9]+]]:_(s256) = G_UNMERGE_VALUES [[COPY]](s512) 799 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[UV]](s256) 800 ; CHECK-NEXT: $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[UV1]](s256) 801 %0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 802 %1:_(s256), %2:_(s256) = G_UNMERGE_VALUES %0 803 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1 804 $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %2 805... 806 807--- 808 809name: test_unmerge_s256_v2s256 810body: | 811 bb.0: 812 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 813 814 ; CHECK-LABEL: name: test_unmerge_s256_v2s256 815 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 816 ; CHECK-NEXT: {{ $}} 817 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s256>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 818 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s256), [[UV1:%[0-9]+]]:_(s256) = G_UNMERGE_VALUES [[COPY]](<2 x s256>) 819 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[UV]](s256) 820 ; CHECK-NEXT: $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[UV1]](s256) 821 %0:_(<2 x s256>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 822 %1:_(s256), %2:_(s256) = G_UNMERGE_VALUES %0 823 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1 824 $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %2 825... 826 827--- 828 829name: test_unmerge_s512_s1024 830body: | 831 bb.0: 832 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 833 834 ; CHECK-LABEL: name: test_unmerge_s512_s1024 835 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 836 ; CHECK-NEXT: {{ $}} 837 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s1024) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 838 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s512), [[UV1:%[0-9]+]]:_(s512) = G_UNMERGE_VALUES [[COPY]](s1024) 839 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[UV]](s512) 840 ; CHECK-NEXT: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 = COPY [[UV1]](s512) 841 %0:_(s1024) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 842 %1:_(s512), %2:_(s512) = G_UNMERGE_VALUES %0 843 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1 844 $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 = COPY %2 845... 846 847--- 848 849name: test_unmerge_s512_v2s512 850body: | 851 bb.0: 852 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 853 854 ; CHECK-LABEL: name: test_unmerge_s512_v2s512 855 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 856 ; CHECK-NEXT: {{ $}} 857 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s512>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 858 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s512), [[UV1:%[0-9]+]]:_(s512) = G_UNMERGE_VALUES [[COPY]](<2 x s512>) 859 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[UV]](s512) 860 ; CHECK-NEXT: $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 = COPY [[UV1]](s512) 861 %0:_(<2 x s512>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 862 %1:_(s512), %2:_(s512) = G_UNMERGE_VALUES %0 863 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1 864 $vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31 = COPY %2 865... 866 867--- 868name: test_unmerge_v2s1 869body: | 870 bb.0: 871 ; CHECK-LABEL: name: test_unmerge_v2s1 872 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF 873 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<2 x s32>) 874 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[UV]](s32) 875 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[UV1]](s32) 876 ; CHECK-NEXT: S_NOP 0, implicit [[TRUNC]](s1) 877 ; CHECK-NEXT: S_NOP 0, implicit [[TRUNC1]](s1) 878 %0:_(<2 x s1>) = G_IMPLICIT_DEF 879 %1:_(s1), %2:_(s1) = G_UNMERGE_VALUES %0 880 S_NOP 0, implicit %1 881 S_NOP 0, implicit %2 882... 883 884--- 885name: test_unmerge_s8_v4s8 886body: | 887 bb.0: 888 liveins: $vgpr0 889 890 ; CHECK-LABEL: name: test_unmerge_s8_v4s8 891 ; CHECK: liveins: $vgpr0 892 ; CHECK-NEXT: {{ $}} 893 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 894 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 895 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 896 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 897 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32) 898 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 899 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32) 900 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 901 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 902 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 903 ; CHECK-NEXT: $vgpr3 = COPY [[LSHR2]](s32) 904 %0:_(s32) = COPY $vgpr0 905 %1:_(<4 x s8>) = G_BITCAST %0 906 %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %1 907 %6:_(s32) = G_ANYEXT %2 908 %7:_(s32) = G_ANYEXT %3 909 %8:_(s32) = G_ANYEXT %4 910 %9:_(s32) = G_ANYEXT %5 911 $vgpr0 = COPY %6 912 $vgpr1 = COPY %7 913 $vgpr2 = COPY %8 914 $vgpr3 = COPY %9 915... 916 917--- 918name: test_unmerge_s8_v3s8 919body: | 920 bb.0: 921 liveins: $vgpr0 922 923 ; CHECK-LABEL: name: test_unmerge_s8_v3s8 924 ; CHECK: liveins: $vgpr0 925 ; CHECK-NEXT: {{ $}} 926 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 927 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 928 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 929 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 930 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32) 931 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 932 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 933 ; CHECK-NEXT: $vgpr2 = COPY [[LSHR1]](s32) 934 %0:_(s32) = COPY $vgpr0 935 %1:_(s24) = G_TRUNC %0 936 %2:_(<3 x s8>) = G_BITCAST %1 937 %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %2 938 %6:_(s32) = G_ANYEXT %3 939 %7:_(s32) = G_ANYEXT %4 940 %8:_(s32) = G_ANYEXT %5 941 $vgpr0 = COPY %6 942 $vgpr1 = COPY %7 943 $vgpr2 = COPY %8 944... 945 946--- 947name: test_unmerge_s8_v2s8 948body: | 949 bb.0: 950 liveins: $vgpr0 951 952 ; CHECK-LABEL: name: test_unmerge_s8_v2s8 953 ; CHECK: liveins: $vgpr0 954 ; CHECK-NEXT: {{ $}} 955 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 956 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 957 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 958 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32) 959 ; CHECK-NEXT: $vgpr1 = COPY [[LSHR]](s32) 960 %0:_(s32) = COPY $vgpr0 961 %1:_(s16) = G_TRUNC %0 962 %2:_(<2 x s8>) = G_BITCAST %1 963 %3:_(s8), %4:_(s8) = G_UNMERGE_VALUES %2 964 %5:_(s32) = G_ANYEXT %3 965 %6:_(s32) = G_ANYEXT %4 966 $vgpr0 = COPY %5 967 $vgpr1 = COPY %6 968 969... 970 971--- 972name: test_unmerge_v3s32_v12s32 973body: | 974 bb.0: 975 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11 976 977 ; CHECK-LABEL: name: test_unmerge_v3s32_v12s32 978 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11 979 ; CHECK-NEXT: {{ $}} 980 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<6 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 981 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<6 x s32>) = COPY $vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11 982 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<3 x s32>), [[UV1:%[0-9]+]]:_(<3 x s32>) = G_UNMERGE_VALUES [[COPY]](<6 x s32>) 983 ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<3 x s32>), [[UV3:%[0-9]+]]:_(<3 x s32>) = G_UNMERGE_VALUES [[COPY1]](<6 x s32>) 984 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[UV]](<3 x s32>) 985 ; CHECK-NEXT: $vgpr3_vgpr4_vgpr5 = COPY [[UV1]](<3 x s32>) 986 ; CHECK-NEXT: $vgpr6_vgpr7_vgpr8 = COPY [[UV2]](<3 x s32>) 987 ; CHECK-NEXT: $vgpr9_vgpr10_vgpr11 = COPY [[UV3]](<3 x s32>) 988 %0:_(<6 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 989 %1:_(<6 x s32>) = COPY $vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11 990 %2:_(<12 x s32>) = G_CONCAT_VECTORS %0, %1 991 %3:_(<3 x s32>), %4:_(<3 x s32>), %5:_(<3 x s32>), %6:_(<3 x s32>) = G_UNMERGE_VALUES %2 992 $vgpr0_vgpr1_vgpr2 = COPY %3 993 $vgpr3_vgpr4_vgpr5 = COPY %4 994 $vgpr6_vgpr7_vgpr8 = COPY %5 995 $vgpr9_vgpr10_vgpr11 = COPY %6 996 997... 998 999--- 1000name: test_unmerge_v3s8_v12s8 1001body: | 1002 bb.0: 1003 liveins: $vgpr0_vgpr1_vgpr2 1004 1005 ; CHECK-LABEL: name: test_unmerge_v3s8_v12s8 1006 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2 1007 ; CHECK-NEXT: {{ $}} 1008 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1009 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 1010 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 1011 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 1012 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1013 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C1]](s32) 1014 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 1015 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C2]](s32) 1016 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 1017 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C1]](s32) 1018 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C2]](s32) 1019 ; CHECK-NEXT: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32) 1020 ; CHECK-NEXT: [[LSHR7:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C1]](s32) 1021 ; CHECK-NEXT: [[LSHR8:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C2]](s32) 1022 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[LSHR]](s32), [[LSHR1]](s32) 1023 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR2]](s32), [[UV1]](s32), [[LSHR3]](s32) 1024 ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR4]](s32), [[LSHR5]](s32), [[UV2]](s32) 1025 ; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR6]](s32), [[LSHR7]](s32), [[LSHR8]](s32) 1026 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 1027 ; CHECK-NEXT: $vgpr3_vgpr4_vgpr5 = COPY [[BUILD_VECTOR1]](<3 x s32>) 1028 ; CHECK-NEXT: $vgpr6_vgpr7_vgpr8 = COPY [[BUILD_VECTOR2]](<3 x s32>) 1029 ; CHECK-NEXT: $vgpr9_vgpr10_vgpr11 = COPY [[BUILD_VECTOR3]](<3 x s32>) 1030 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1031 %1:_(<12 x s8>) = G_BITCAST %0 1032 %2:_(<3 x s8>), %3:_(<3 x s8>), %4:_(<3 x s8>), %5:_(<3 x s8>) = G_UNMERGE_VALUES %1 1033 %6:_(<3 x s32>) = G_ANYEXT %2 1034 %7:_(<3 x s32>) = G_ANYEXT %3 1035 %8:_(<3 x s32>) = G_ANYEXT %4 1036 %9:_(<3 x s32>) = G_ANYEXT %5 1037 $vgpr0_vgpr1_vgpr2 = COPY %6 1038 $vgpr3_vgpr4_vgpr5 = COPY %7 1039 $vgpr6_vgpr7_vgpr8 = COPY %8 1040 $vgpr9_vgpr10_vgpr11 = COPY %9 1041 1042... 1043 1044--- 1045name: test_unmerge_v3s16_v12s16 1046body: | 1047 bb.0: 1048 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 1049 1050 ; CHECK-LABEL: name: test_unmerge_v3s16_v12s16 1051 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 1052 ; CHECK-NEXT: {{ $}} 1053 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<12 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 1054 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<12 x s16>) 1055 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 1056 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1057 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1058 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 1059 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST]](s32), [[LSHR]](s32), [[BITCAST1]](s32) 1060 ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>), [[UV9:%[0-9]+]]:_(<2 x s16>), [[UV10:%[0-9]+]]:_(<2 x s16>), [[UV11:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<12 x s16>) 1061 ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>) 1062 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 1063 ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV8]](<2 x s16>) 1064 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 1065 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR1]](s32), [[BITCAST3]](s32), [[LSHR2]](s32) 1066 ; CHECK-NEXT: [[UV12:%[0-9]+]]:_(<2 x s16>), [[UV13:%[0-9]+]]:_(<2 x s16>), [[UV14:%[0-9]+]]:_(<2 x s16>), [[UV15:%[0-9]+]]:_(<2 x s16>), [[UV16:%[0-9]+]]:_(<2 x s16>), [[UV17:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<12 x s16>) 1067 ; CHECK-NEXT: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV15]](<2 x s16>) 1068 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C]](s32) 1069 ; CHECK-NEXT: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV16]](<2 x s16>) 1070 ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST4]](s32), [[LSHR3]](s32), [[BITCAST5]](s32) 1071 ; CHECK-NEXT: [[UV18:%[0-9]+]]:_(<2 x s16>), [[UV19:%[0-9]+]]:_(<2 x s16>), [[UV20:%[0-9]+]]:_(<2 x s16>), [[UV21:%[0-9]+]]:_(<2 x s16>), [[UV22:%[0-9]+]]:_(<2 x s16>), [[UV23:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<12 x s16>) 1072 ; CHECK-NEXT: [[BITCAST6:%[0-9]+]]:_(s32) = G_BITCAST [[UV22]](<2 x s16>) 1073 ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST6]], [[C]](s32) 1074 ; CHECK-NEXT: [[BITCAST7:%[0-9]+]]:_(s32) = G_BITCAST [[UV23]](<2 x s16>) 1075 ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST7]], [[C]](s32) 1076 ; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR4]](s32), [[BITCAST7]](s32), [[LSHR5]](s32) 1077 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 1078 ; CHECK-NEXT: $vgpr3_vgpr4_vgpr5 = COPY [[BUILD_VECTOR1]](<3 x s32>) 1079 ; CHECK-NEXT: $vgpr6_vgpr7_vgpr8 = COPY [[BUILD_VECTOR2]](<3 x s32>) 1080 ; CHECK-NEXT: $vgpr9_vgpr10_vgpr11 = COPY [[BUILD_VECTOR3]](<3 x s32>) 1081 %0:_(<12 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5 1082 %1:_(<3 x s16>), %2:_(<3 x s16>), %3:_(<3 x s16>), %4:_(<3 x s16>) = G_UNMERGE_VALUES %0 1083 %5:_(<3 x s32>) = G_ANYEXT %1 1084 %6:_(<3 x s32>) = G_ANYEXT %2 1085 %7:_(<3 x s32>) = G_ANYEXT %3 1086 %8:_(<3 x s32>) = G_ANYEXT %4 1087 $vgpr0_vgpr1_vgpr2 = COPY %5 1088 $vgpr3_vgpr4_vgpr5 = COPY %6 1089 $vgpr6_vgpr7_vgpr8 = COPY %7 1090 $vgpr9_vgpr10_vgpr11 = COPY %8 1091 1092... 1093