1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=2 -pass-remarks-missed='gisel*' -o - %s | FileCheck -check-prefix=GCN %s 3 4--- 5name: test_merge_values_v_s64_v_s32_v_s32 6legalized: true 7regBankSelected: true 8tracksRegLiveness: true 9 10body: | 11 bb.0: 12 liveins: $vgpr0, $vgpr1 13 14 ; GCN-LABEL: name: test_merge_values_v_s64_v_s32_v_s32 15 ; GCN: liveins: $vgpr0, $vgpr1 16 ; GCN-NEXT: {{ $}} 17 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 18 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 19 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 20 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 21 %0:vgpr(s32) = COPY $vgpr0 22 %1:vgpr(s32) = COPY $vgpr1 23 %2:vgpr(s64) = G_MERGE_VALUES %0, %1 24 S_ENDPGM 0, implicit %2 25... 26 27--- 28name: test_merge_values_v_s64_s_s32_v_s32 29legalized: true 30regBankSelected: true 31tracksRegLiveness: true 32 33body: | 34 bb.0: 35 liveins: $sgpr0, $vgpr0 36 37 ; GCN-LABEL: name: test_merge_values_v_s64_s_s32_v_s32 38 ; GCN: liveins: $sgpr0, $vgpr0 39 ; GCN-NEXT: {{ $}} 40 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 41 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 42 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 43 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 44 %0:sgpr(s32) = COPY $sgpr0 45 %1:vgpr(s32) = COPY $vgpr0 46 %2:vgpr(s64) = G_MERGE_VALUES %0, %1 47 S_ENDPGM 0, implicit %2 48... 49 50--- 51name: test_merge_values_v_s64_v_s32_s_s32 52legalized: true 53regBankSelected: true 54tracksRegLiveness: true 55 56body: | 57 bb.0: 58 liveins: $sgpr0, $vgpr0 59 60 ; GCN-LABEL: name: test_merge_values_v_s64_v_s32_s_s32 61 ; GCN: liveins: $sgpr0, $vgpr0 62 ; GCN-NEXT: {{ $}} 63 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 64 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0 65 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 66 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 67 %0:vgpr(s32) = COPY $vgpr0 68 %1:sgpr(s32) = COPY $sgpr0 69 %2:vgpr(s64) = G_MERGE_VALUES %0, %1 70 S_ENDPGM 0, implicit %2 71... 72 73--- 74name: test_merge_values_s_s64_s_s32_s_s32 75legalized: true 76regBankSelected: true 77tracksRegLiveness: true 78 79body: | 80 bb.0: 81 liveins: $sgpr0, $sgpr1 82 83 ; GCN-LABEL: name: test_merge_values_s_s64_s_s32_s_s32 84 ; GCN: liveins: $sgpr0, $sgpr1 85 ; GCN-NEXT: {{ $}} 86 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 87 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 88 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 89 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 90 %0:sgpr(s32) = COPY $sgpr0 91 %1:sgpr(s32) = COPY $sgpr1 92 %2:sgpr(s64) = G_MERGE_VALUES %0, %1 93 S_ENDPGM 0, implicit %2 94... 95 96--- 97name: test_merge_values_s_s96_s_s32_s_s32_s_s32 98legalized: true 99regBankSelected: true 100 101body: | 102 bb.0: 103 liveins: $sgpr0, $sgpr1, $sgpr2 104 105 ; GCN-LABEL: name: test_merge_values_s_s96_s_s32_s_s32_s_s32 106 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2 107 ; GCN-NEXT: {{ $}} 108 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 109 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 110 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 111 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2 112 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2 = COPY [[REG_SEQUENCE]] 113 %0:sgpr(s32) = COPY $sgpr0 114 %1:sgpr(s32) = COPY $sgpr1 115 %2:sgpr(s32) = COPY $sgpr2 116 %3:sgpr(s96) = G_MERGE_VALUES %0, %1, %2 117 $sgpr0_sgpr1_sgpr2 = COPY %3 118... 119 120--- 121name: test_merge_values_v_s96_v_s32_v_s32_v_s32 122legalized: true 123regBankSelected: true 124tracksRegLiveness: true 125 126body: | 127 bb.0: 128 liveins: $vgpr0, $vgpr1, $vgpr2 129 130 ; GCN-LABEL: name: test_merge_values_v_s96_v_s32_v_s32_v_s32 131 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 132 ; GCN-NEXT: {{ $}} 133 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 134 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 135 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 136 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2 137 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[REG_SEQUENCE]] 138 %0:vgpr(s32) = COPY $vgpr0 139 %1:vgpr(s32) = COPY $vgpr1 140 %2:vgpr(s32) = COPY $vgpr2 141 %3:vgpr(s96) = G_MERGE_VALUES %0, %1, %2 142 $vgpr0_vgpr1_vgpr2 = COPY %3 143... 144 145--- 146name: test_merge_values_s_s128_s_s32_s_s32_s_s32_s_s32 147legalized: true 148regBankSelected: true 149tracksRegLiveness: true 150 151body: | 152 bb.0: 153 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 154 155 ; GCN-LABEL: name: test_merge_values_s_s128_s_s32_s_s32_s_s32_s_s32 156 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 157 ; GCN-NEXT: {{ $}} 158 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 159 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 160 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 161 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 162 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 163 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]] 164 %0:sgpr(s32) = COPY $sgpr0 165 %1:sgpr(s32) = COPY $sgpr1 166 %2:sgpr(s32) = COPY $sgpr2 167 %3:sgpr(s32) = COPY $sgpr3 168 %4:sgpr(s128) = G_MERGE_VALUES %0, %1, %2, %3 169 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %4 170... 171 172--- 173name: test_merge_values_v_s128_v_s32_v_s32_v_s32 174legalized: true 175regBankSelected: true 176tracksRegLiveness: true 177 178body: | 179 bb.0: 180 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 181 182 ; GCN-LABEL: name: test_merge_values_v_s128_v_s32_v_s32_v_s32 183 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 184 ; GCN-NEXT: {{ $}} 185 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 186 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 187 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 188 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 189 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 190 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[REG_SEQUENCE]] 191 %0:vgpr(s32) = COPY $vgpr0 192 %1:vgpr(s32) = COPY $vgpr1 193 %2:vgpr(s32) = COPY $vgpr2 194 %3:vgpr(s32) = COPY $vgpr3 195 %4:vgpr(s128) = G_MERGE_VALUES %0, %1, %2, %3 196 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %4 197... 198 199--- 200name: test_merge_values_s_s128_s_s64_s_s64 201legalized: true 202regBankSelected: true 203tracksRegLiveness: true 204 205body: | 206 bb.0: 207 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 208 209 ; GCN-LABEL: name: test_merge_values_s_s128_s_s64_s_s64 210 ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 211 ; GCN-NEXT: {{ $}} 212 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 213 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 214 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3 215 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]] 216 %0:sgpr(s64) = COPY $sgpr0_sgpr1 217 %1:sgpr(s64) = COPY $sgpr2_sgpr3 218 %4:sgpr(s128) = G_MERGE_VALUES %0, %1 219 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %4 220... 221 222--- 223name: test_merge_values_v_s128_v_s64_v_s64 224legalized: true 225regBankSelected: true 226tracksRegLiveness: true 227 228body: | 229 bb.0: 230 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 231 232 ; GCN-LABEL: name: test_merge_values_v_s128_v_s64_v_s64 233 ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 234 ; GCN-NEXT: {{ $}} 235 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 236 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 237 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3 238 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[REG_SEQUENCE]] 239 %0:vgpr(s64) = COPY $vgpr0_vgpr1 240 %1:vgpr(s64) = COPY $vgpr2_vgpr3 241 %2:vgpr(s128) = G_MERGE_VALUES %0, %1 242 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 243... 244 245--- 246name: test_merge_values_s_s160_s_s32_s_s32_s_s32_s_s32_s_s32 247legalized: true 248regBankSelected: true 249tracksRegLiveness: true 250 251body: | 252 bb.0: 253 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4 254 255 ; GCN-LABEL: name: test_merge_values_s_s160_s_s32_s_s32_s_s32_s_s32_s_s32 256 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4 257 ; GCN-NEXT: {{ $}} 258 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 259 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 260 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 261 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 262 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr4 263 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_160 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3, [[COPY4]], %subreg.sub4 264 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4 = COPY [[REG_SEQUENCE]] 265 %0:sgpr(s32) = COPY $sgpr0 266 %1:sgpr(s32) = COPY $sgpr1 267 %2:sgpr(s32) = COPY $sgpr2 268 %3:sgpr(s32) = COPY $sgpr3 269 %4:sgpr(s32) = COPY $sgpr4 270 %5:sgpr(s160) = G_MERGE_VALUES %0, %1, %2, %3, %4 271 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4 = COPY %5 272... 273 274--- 275name: test_merge_values_v_s160_v_s32_v_s32_v_s32_v_s32_v_s32 276legalized: true 277regBankSelected: true 278tracksRegLiveness: true 279 280body: | 281 bb.0: 282 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 283 284 ; GCN-LABEL: name: test_merge_values_v_s160_v_s32_v_s32_v_s32_v_s32_v_s32 285 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 286 ; GCN-NEXT: {{ $}} 287 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 288 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 289 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 290 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 291 ; GCN-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 292 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_160 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3, [[COPY4]], %subreg.sub4 293 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY [[REG_SEQUENCE]] 294 %0:vgpr(s32) = COPY $vgpr0 295 %1:vgpr(s32) = COPY $vgpr1 296 %2:vgpr(s32) = COPY $vgpr2 297 %3:vgpr(s32) = COPY $vgpr3 298 %4:vgpr(s32) = COPY $vgpr4 299 %5:vgpr(s160) = G_MERGE_VALUES %0, %1, %2, %3, %4 300 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY %5 301... 302 303--- 304name: test_merge_values_s_s192_s_s64_s_s64_s_s64 305legalized: true 306regBankSelected: true 307tracksRegLiveness: true 308 309body: | 310 bb.0: 311 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 312 313 ; GCN-LABEL: name: test_merge_values_s_s192_s_s64_s_s64_s_s64 314 ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 315 ; GCN-NEXT: {{ $}} 316 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 317 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 318 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 319 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_192 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5 320 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 321 %0:sgpr(s64) = COPY $sgpr0_sgpr1 322 %1:sgpr(s64) = COPY $sgpr2_sgpr3 323 %2:sgpr(s64) = COPY $sgpr4_sgpr5 324 %3:sgpr(s192) = G_MERGE_VALUES %0, %1, %2 325 S_ENDPGM 0, implicit %3 326... 327 328--- 329name: test_merge_values_v_s192_v_s64_v_s64_v_s64 330legalized: true 331regBankSelected: true 332tracksRegLiveness: true 333 334body: | 335 bb.0: 336 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 337 338 ; GCN-LABEL: name: test_merge_values_v_s192_v_s64_v_s64_v_s64 339 ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 340 ; GCN-NEXT: {{ $}} 341 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 342 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 343 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr4_vgpr5 344 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_192 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5 345 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 346 %0:vgpr(s64) = COPY $vgpr0_vgpr1 347 %1:vgpr(s64) = COPY $vgpr2_vgpr3 348 %2:vgpr(s64) = COPY $vgpr4_vgpr5 349 %3:vgpr(s192) = G_MERGE_VALUES %0, %1, %2 350 S_ENDPGM 0, implicit %3 351... 352 353--- 354name: test_merge_values_s_s256_s_s64_s_s64_s_s64_s_s64 355legalized: true 356regBankSelected: true 357tracksRegLiveness: true 358 359body: | 360 bb.0: 361 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7 362 363 ; GCN-LABEL: name: test_merge_values_s_s256_s_s64_s_s64_s_s64_s_s64 364 ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7 365 ; GCN-NEXT: {{ $}} 366 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 367 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 368 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 369 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7 370 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7 371 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]] 372 %0:sgpr(s64) = COPY $sgpr0_sgpr1 373 %1:sgpr(s64) = COPY $sgpr2_sgpr3 374 %2:sgpr(s64) = COPY $sgpr4_sgpr5 375 %3:sgpr(s64) = COPY $sgpr6_sgpr7 376 %4:sgpr(s256) = G_MERGE_VALUES %0, %1, %2, %3 377 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %4 378... 379 380--- 381name: test_merge_values_s_s256_s_s128_s_s128 382legalized: true 383regBankSelected: true 384tracksRegLiveness: true 385 386body: | 387 bb.0: 388 liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7 389 390 ; GCN-LABEL: name: test_merge_values_s_s256_s_s128_s_s128 391 ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7 392 ; GCN-NEXT: {{ $}} 393 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3 394 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7 395 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7 396 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]] 397 %0:sgpr(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 398 %1:sgpr(s128) = COPY $sgpr4_sgpr5_sgpr6_sgpr7 399 %2:sgpr(s256) = G_MERGE_VALUES %0, %1 400 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %2 401... 402 403--- 404name: test_merge_values_s_s512_s_s256_s_s256 405legalized: true 406regBankSelected: true 407tracksRegLiveness: true 408 409body: | 410 bb.0: 411 liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 412 413 ; GCN-LABEL: name: test_merge_values_s_s512_s_s256_s_s256 414 ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 415 ; GCN-NEXT: {{ $}} 416 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 417 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_256 = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 418 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7, [[COPY1]], %subreg.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15 419 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]] 420 %0:sgpr(s256) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 421 %1:sgpr(s256) = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 422 %4:sgpr(s512) = G_MERGE_VALUES %0, %1 423 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %4 424... 425 426--- 427name: test_merge_values_s_s512_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64 428legalized: true 429regBankSelected: true 430tracksRegLiveness: true 431 432body: | 433 bb.0: 434 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13, $sgpr14_sgpr15 435 436 ; GCN-LABEL: name: test_merge_values_s_s512_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64_s_s64 437 ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13, $sgpr14_sgpr15 438 ; GCN-NEXT: {{ $}} 439 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 440 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 441 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 442 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7 443 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_64 = COPY $sgpr8_sgpr9 444 ; GCN-NEXT: [[COPY5:%[0-9]+]]:sreg_64 = COPY $sgpr10_sgpr11 445 ; GCN-NEXT: [[COPY6:%[0-9]+]]:sreg_64 = COPY $sgpr12_sgpr13 446 ; GCN-NEXT: [[COPY7:%[0-9]+]]:sreg_64 = COPY $sgpr14_sgpr15 447 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7, [[COPY4]], %subreg.sub8_sub9, [[COPY5]], %subreg.sub10_sub11, [[COPY6]], %subreg.sub12_sub13, [[COPY7]], %subreg.sub14_sub15 448 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]] 449 %0:sgpr(s64) = COPY $sgpr0_sgpr1 450 %1:sgpr(s64) = COPY $sgpr2_sgpr3 451 %2:sgpr(s64) = COPY $sgpr4_sgpr5 452 %3:sgpr(s64) = COPY $sgpr6_sgpr7 453 %4:sgpr(s64) = COPY $sgpr8_sgpr9 454 %5:sgpr(s64) = COPY $sgpr10_sgpr11 455 %6:sgpr(s64) = COPY $sgpr12_sgpr13 456 %7:sgpr(s64) = COPY $sgpr14_sgpr15 457 %8:sgpr(s512) = G_MERGE_VALUES %0, %1, %2, %3, %4, %5, %6, %7 458 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %8 459... 460 461--- 462name: test_merge_values_v_v512_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64 463legalized: true 464regBankSelected: true 465tracksRegLiveness: true 466 467body: | 468 bb.0: 469 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15 470 471 ; GCN-LABEL: name: test_merge_values_v_v512_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64_v_s64 472 ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15 473 ; GCN-NEXT: {{ $}} 474 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 475 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 476 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr4_vgpr5 477 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr6_vgpr7 478 ; GCN-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY $vgpr8_vgpr9 479 ; GCN-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY $vgpr10_vgpr11 480 ; GCN-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY $vgpr12_vgpr13 481 ; GCN-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY $vgpr14_vgpr15 482 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7, [[COPY4]], %subreg.sub8_sub9, [[COPY5]], %subreg.sub10_sub11, [[COPY6]], %subreg.sub12_sub13, [[COPY7]], %subreg.sub14_sub15 483 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[REG_SEQUENCE]] 484 %0:vgpr(s64) = COPY $vgpr0_vgpr1 485 %1:vgpr(s64) = COPY $vgpr2_vgpr3 486 %2:vgpr(s64) = COPY $vgpr4_vgpr5 487 %3:vgpr(s64) = COPY $vgpr6_vgpr7 488 %4:vgpr(s64) = COPY $vgpr8_vgpr9 489 %5:vgpr(s64) = COPY $vgpr10_vgpr11 490 %6:vgpr(s64) = COPY $vgpr12_vgpr13 491 %7:vgpr(s64) = COPY $vgpr14_vgpr15 492 %8:vgpr(s512) = G_MERGE_VALUES %0, %1, %2, %3, %4, %5, %6, %7 493 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %8 494... 495 496--- 497name: test_merge_values_rc_already_set_src_v_s64_v_s32_v_s32 498legalized: true 499regBankSelected: true 500tracksRegLiveness: true 501 502body: | 503 bb.0: 504 liveins: $vgpr0, $vgpr1 505 506 ; GCN-LABEL: name: test_merge_values_rc_already_set_src_v_s64_v_s32_v_s32 507 ; GCN: liveins: $vgpr0, $vgpr1 508 ; GCN-NEXT: {{ $}} 509 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 510 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 511 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 512 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 513 %0:vgpr_32(s32) = COPY $vgpr0 514 %1:vgpr_32(s32) = COPY $vgpr1 515 %2:vgpr(s64) = G_MERGE_VALUES %0, %1 516 S_ENDPGM 0, implicit %2 517... 518 519--- 520name: test_merge_values_rc_already_set_dst_v_s64_v_s32_v_s32 521legalized: true 522regBankSelected: true 523tracksRegLiveness: true 524 525body: | 526 bb.0: 527 liveins: $vgpr0, $vgpr1 528 529 ; GCN-LABEL: name: test_merge_values_rc_already_set_dst_v_s64_v_s32_v_s32 530 ; GCN: liveins: $vgpr0, $vgpr1 531 ; GCN-NEXT: {{ $}} 532 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 533 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 534 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 535 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 536 %0:vgpr(s32) = COPY $vgpr0 537 %1:vgpr(s32) = COPY $vgpr1 538 %2:vreg_64(s64) = G_MERGE_VALUES %0, %1 539 S_ENDPGM 0, implicit %2 540... 541 542--- 543name: test_merge_values_s_s1024_s_s256_s_s256_s_s256_s_s256 544legalized: true 545regBankSelected: true 546tracksRegLiveness: true 547 548body: | 549 bb.0: 550 liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 551 552 ; GCN-LABEL: name: test_merge_values_s_s1024_s_s256_s_s256_s_s256_s_s256 553 ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 554 ; GCN-NEXT: {{ $}} 555 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 556 ; GCN-NEXT: [[DEF:%[0-9]+]]:sgpr_256 = IMPLICIT_DEF 557 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_256 = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 558 ; GCN-NEXT: [[DEF1:%[0-9]+]]:sgpr_256 = IMPLICIT_DEF 559 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_1024 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7, [[DEF]], %subreg.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15, [[COPY1]], %subreg.sub16_sub17_sub18_sub19_sub20_sub21_sub22_sub23, [[DEF1]], %subreg.sub24_sub25_sub26_sub27_sub28_sub29_sub30_sub31 560 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]] 561 %0:sgpr(s256) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 562 %1:sgpr(s256) = G_IMPLICIT_DEF 563 %2:sgpr(s256) = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 564 %3:sgpr(s256) = G_IMPLICIT_DEF 565 %4:sgpr(s1024) = G_MERGE_VALUES %0, %1, %2, %3 566 S_ENDPGM 0, implicit %4 567... 568 569--- 570 571name: test_merge_values_s_s1024_s_s512 572legalized: true 573regBankSelected: true 574tracksRegLiveness: true 575 576body: | 577 bb.0: 578 liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15, $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 579 580 ; GCN-LABEL: name: test_merge_values_s_s1024_s_s512 581 ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15, $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 582 ; GCN-NEXT: {{ $}} 583 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 584 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_512 = COPY $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 585 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_1024 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7_sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15, [[COPY1]], %subreg.sub16_sub17_sub18_sub19_sub20_sub21_sub22_sub23_sub24_sub25_sub26_sub27_sub28_sub29_sub30_sub31 586 ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 = COPY [[REG_SEQUENCE]] 587 %0:sgpr(s512) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 588 %1:sgpr(s512) = COPY $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 589 %2:sgpr(s1024) = G_MERGE_VALUES %0, %1 590 $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 = COPY %2 591 592... 593