| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s |
| |
| name: uitofp_to_zero |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: uitofp_to_zero |
| ; CHECK: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00 |
| ; CHECK: $s0 = COPY [[C]](s32) |
| ; CHECK: RET_ReallyLR implicit $s0 |
| %0:_(s32) = G_IMPLICIT_DEF |
| %1:_(s32) = G_UITOFP %0(s32) |
| $s0 = COPY %1(s32) |
| RET_ReallyLR implicit $s0 |
| |
| ... |
| --- |
| name: sitofp_to_zero |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: sitofp_to_zero |
| ; CHECK: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00 |
| ; CHECK: $s0 = COPY [[C]](s32) |
| ; CHECK: RET_ReallyLR implicit $s0 |
| %0:_(s32) = G_IMPLICIT_DEF |
| %1:_(s32) = G_SITOFP %0(s32) |
| $s0 = COPY %1(s32) |
| RET_ReallyLR implicit $s0 |
| |
| ... |
| --- |
| name: and_to_zero |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: and_to_zero |
| ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 |
| ; CHECK: $w0 = COPY [[C]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_AND %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: mul_to_zero |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: mul_to_zero |
| ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 |
| ; CHECK: $w0 = COPY [[C]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_MUL %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: or_to_negative_one |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: or_to_negative_one |
| ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1 |
| ; CHECK: $w0 = COPY [[C]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_OR %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: xor_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: xor_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF |
| ; CHECK: $w0 = COPY [[DEF]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_XOR %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: add_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: add_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF |
| ; CHECK: $w0 = COPY [[DEF]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_ADD %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: sub_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: sub_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF |
| ; CHECK: $w0 = COPY [[DEF]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_CONSTANT i32 10 |
| %1:_(s32) = G_IMPLICIT_DEF |
| %2:_(s32) = G_SUB %0, %1 |
| $w0 = COPY %2(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: fptoui_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fptoui_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF |
| ; CHECK: $w0 = COPY [[DEF]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_IMPLICIT_DEF |
| %1:_(s32) = G_FPTOUI %0(s32) |
| $w0 = COPY %1(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: fptosi_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fptosi_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF |
| ; CHECK: $w0 = COPY [[DEF]](s32) |
| ; CHECK: RET_ReallyLR implicit $w0 |
| %0:_(s32) = G_IMPLICIT_DEF |
| %1:_(s32) = G_FPTOSI %0(s32) |
| $w0 = COPY %1(s32) |
| RET_ReallyLR implicit $w0 |
| |
| ... |
| --- |
| name: shufflevector_undef_ops_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: shufflevector_undef_ops_to_undef |
| ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF |
| ; CHECK: $d0 = COPY [[DEF]](<2 x s32>) |
| ; CHECK: RET_ReallyLR implicit $d0 |
| %1:_(<2 x s32>) = G_IMPLICIT_DEF |
| %2:_(<2 x s32>) = G_IMPLICIT_DEF |
| %0:_(<2 x s32>) = G_SHUFFLE_VECTOR %1(<2 x s32>), %2(<2 x s32>), shufflemask(0, 1) |
| $d0 = COPY %0(<2 x s32>) |
| RET_ReallyLR implicit $d0 |
| |
| ... |
| --- |
| name: shufflevector_undef_mask_to_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $d0, $d1 |
| ; CHECK-LABEL: name: shufflevector_undef_mask_to_undef |
| ; CHECK: liveins: $d0, $d1 |
| ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF |
| ; CHECK: $d0 = COPY [[DEF]](<2 x s32>) |
| ; CHECK: RET_ReallyLR implicit $d0 |
| %0:_(<2 x s32>) = COPY $d0 |
| %1:_(<2 x s32>) = COPY $d1 |
| %2:_(<2 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1, shufflemask(undef, undef) |
| $d0 = COPY %2(<2 x s32>) |
| RET_ReallyLR implicit $d0 |
| |
| ... |
| --- |
| name: shufflevector_not_all_ops_undef |
| alignment: 4 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $d0 |
| ; Show that we don't do the combine when one of the vectors is not a |
| ; G_IMPLICIT_DEF. |
| ; |
| ; CHECK-LABEL: name: shufflevector_not_all_ops_undef |
| ; CHECK: liveins: $d0 |
| ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF |
| ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0 |
| ; CHECK: [[SHUF:%[0-9]+]]:_(<2 x s32>) = G_SHUFFLE_VECTOR [[DEF]](<2 x s32>), [[COPY]], shufflemask(0, 1) |
| ; CHECK: $d0 = COPY [[SHUF]](<2 x s32>) |
| ; CHECK: RET_ReallyLR implicit $d0 |
| %1:_(<2 x s32>) = G_IMPLICIT_DEF |
| %2:_(<2 x s32>) = COPY $d0 |
| %0:_(<2 x s32>) = G_SHUFFLE_VECTOR %1(<2 x s32>), %2(<2 x s32>), shufflemask(0, 1) |
| $d0 = COPY %0(<2 x s32>) |
| RET_ReallyLR implicit $d0 |