| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4 | |
| # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -run-pass=peephole-opt -o - %s | FileCheck %s | |
| --- | |
| name: fold_vgbm_0_copyvr128_to_gr128_virtreg | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[LGHI:%[0-9]+]]:gr64bit = LGHI 0 | |
| ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:gr128bit = REG_SEQUENCE [[LGHI]], %subreg.subreg_h64, [[LGHI]], %subreg.subreg_l64 | |
| ; CHECK-NEXT: $r0q = COPY [[REG_SEQUENCE]] | |
| ; CHECK-NEXT: Return implicit $r0q | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| %3:gr128bit = COPY %2 | |
| $r0q = COPY %3 | |
| Return implicit $r0q | |
| ... | |
| --- | |
| name: fold_vgbm_0_copyvr128_to_gr128_virtreg_dbg_use | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg_dbg_use | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[LGHI:%[0-9]+]]:gr64bit = LGHI 0 | |
| ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:gr128bit = REG_SEQUENCE [[LGHI]], %subreg.subreg_h64, [[LGHI]], %subreg.subreg_l64 | |
| ; CHECK-NEXT: DBG_VALUE %2:vr128bit | |
| ; CHECK-NEXT: $r0q = COPY [[REG_SEQUENCE]] | |
| ; CHECK-NEXT: Return implicit $r0q | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| %3:gr128bit = COPY %2 | |
| DBG_VALUE %2 | |
| $r0q = COPY %3 | |
| Return implicit $r0q | |
| ... | |
| --- | |
| name: fold_vgbm_0_copyvr128_to_gr128_virtreg_multi_use | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg_multi_use | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr128bit = COPY [[VGBM]] | |
| ; CHECK-NEXT: $r0q = COPY [[COPY2]] | |
| ; CHECK-NEXT: $r2q = COPY [[COPY2]] | |
| ; CHECK-NEXT: Return implicit $r0q, implicit $r2q | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| %3:gr128bit = COPY %2 | |
| %4:gr128bit = COPY %2 | |
| $r0q = COPY %3 | |
| $r2q = COPY %4 | |
| Return implicit $r0q, implicit $r2q | |
| ... | |
| --- | |
| name: fold_vgbm_0_copyvr128_to_gr128_physreg | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_physreg | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: $r0q = COPY [[VGBM]] | |
| ; CHECK-NEXT: Return implicit $r0q | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| $r0q = COPY %2 | |
| Return implicit $r0q | |
| ... | |
| --- | |
| name: no_fold_vgbm_0_copyvr128_to_vr128_virtreg | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: no_fold_vgbm_0_copyvr128_to_vr128_virtreg | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vr128bit = COPY [[VGBM]] | |
| ; CHECK-NEXT: $v0 = COPY [[COPY2]] | |
| ; CHECK-NEXT: Return implicit $v0 | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| %3:vr128bit = COPY %2 | |
| $v0 = COPY %3 | |
| Return implicit $v0 | |
| ... | |
| --- | |
| name: no_fold_vgbm_0_copyvr128_to_vr128_physreg | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: no_fold_vgbm_0_copyvr128_to_vr128_physreg | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: $v0 = COPY [[VGBM]] | |
| ; CHECK-NEXT: Return implicit $v0 | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| $v0 = COPY %2 | |
| Return implicit $v0 | |
| ... | |
| --- | |
| name: fold_vgbm_1_copyvr128_to_gr128_virtreg | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_1_copyvr128_to_gr128_virtreg | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 1 | |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr128bit = COPY [[VGBM]] | |
| ; CHECK-NEXT: $r0q = COPY [[COPY2]] | |
| ; CHECK-NEXT: Return implicit $r0q | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 1 | |
| %3:gr128bit = COPY %2 | |
| $r0q = COPY %3 | |
| Return implicit $r0q | |
| ... | |
| --- | |
| name: no_fold_vgbm_0_noncopy_use | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: no_fold_vgbm_0_noncopy_use | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: Return implicit [[VGBM]] | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| Return implicit %2 | |
| ... | |
| --- | |
| name: fold_vgbm_0_copyvr128_to_gr64_subreg_h64 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $r2d | |
| ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr64_subreg_h64 | |
| ; CHECK: liveins: $r2d | |
| ; CHECK-NEXT: {{ $}} | |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d | |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] | |
| ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 | |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64bit = COPY [[VGBM]].subreg_h64 | |
| ; CHECK-NEXT: $r0d = COPY [[COPY2]] | |
| ; CHECK-NEXT: Return implicit $r0d | |
| %0:gr64bit = COPY $r2d | |
| %1:addr64bit = COPY %0 | |
| %2:vr128bit = VGBM 0 | |
| %3:gr64bit = COPY %2.subreg_h64 | |
| $r0d = COPY %3 | |
| Return implicit $r0d | |
| ... |