| # 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 |
| ... |