| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 |
| # RUN: llc -mtriple=aarch64 -mattr=+sve2 -run-pass=aarch64-expand-pseudo -verify-machineinstrs %s -o - | FileCheck %s |
| # RUN: llc -mtriple=aarch64 -mattr=+sve2 -passes=aarch64-expand-pseudo %s -o - | FileCheck %s |
| |
| --- |
| name: eon_destructive |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_destructive |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed $z0, $z0, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_commute |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_commute |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed $z0, $z0, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ $z1, $z0 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_movprfx |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_movprfx |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: $z2 = BSL2N_ZZZZ internal killed $z2, $z0, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = EON_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: nand_destructive |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nand_destructive |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = NBSL_ZZZZ killed $z0, $z1, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = NAND_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: nand_commute |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nand_commute |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = NBSL_ZZZZ killed $z0, $z1, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = NAND_ZZZ $z1, $z0 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: nand_movprfx |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nand_movprfx |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: $z2 = NBSL_ZZZZ internal killed $z2, $z1, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = NAND_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: nor_destructive |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nor_destructive |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = NBSL_ZZZZ killed $z0, $z1, $z0 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = NOR_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: nor_commute |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nor_commute |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = NBSL_ZZZZ killed $z0, $z1, $z0 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = NOR_ZZZ $z1, $z0 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: nor_movprfx |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nor_movprfx |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: $z2 = NBSL_ZZZZ internal killed $z2, $z1, $z0 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = NOR_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: eon_destructive_one_kill |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_destructive_one_kill |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed $z0, killed $z0, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ killed $z0, $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_commute_two_kills |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_commute_two_kills |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed $z0, killed $z0, killed $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ killed $z1, killed $z0 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_movprfx_dst_renamable |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_movprfx_dst_renamable |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit $z0, implicit $z1 { |
| ; CHECK-NEXT: renamable $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: renamable $z2 = BSL2N_ZZZZ internal killed renamable $z2, $z0, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| renamable $z2 = EON_ZZZ $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: eon_movprfx_src_renamable |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_movprfx_src_renamable |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ renamable $z0 |
| ; CHECK-NEXT: $z2 = BSL2N_ZZZZ internal killed $z2, renamable $z0, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = EON_ZZZ renamable $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: eon_movprfx_kill |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_movprfx_kill |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit killed $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: $z2 = BSL2N_ZZZZ internal killed $z2, killed $z0, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = EON_ZZZ killed $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: nand_movprfx_kill |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nand_movprfx_kill |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit killed $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ killed $z0 |
| ; CHECK-NEXT: $z2 = NBSL_ZZZZ internal killed $z2, $z1, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = NAND_ZZZ killed $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: nor_movprfx_kill |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: nor_movprfx_kill |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit killed $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0 |
| ; CHECK-NEXT: $z2 = NBSL_ZZZZ internal killed $z2, $z1, killed $z0 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = NOR_ZZZ killed $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |
| |
| --- |
| name: eon_destructive_undef_z0 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_destructive_undef_z0 |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed undef $z0, undef $z0, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ undef $z0, $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_destructive_undef_z1 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_destructive_undef_z1 |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed $z0, $z0, undef $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ $z0, undef $z1 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_commute_undef |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_commute_undef |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: $z0 = BSL2N_ZZZZ killed undef $z0, undef $z0, $z1 |
| ; CHECK-NEXT: RET undef $lr, implicit $z0 |
| $z0 = EON_ZZZ $z1, undef $z0 |
| RET_ReallyLR implicit $z0 |
| ... |
| |
| --- |
| name: eon_movprfx_undef |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $z0, $z1 |
| ; CHECK-LABEL: name: eon_movprfx_undef |
| ; CHECK: liveins: $z0, $z1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: BUNDLE implicit-def $z2, implicit undef $z0, implicit $z1 { |
| ; CHECK-NEXT: $z2 = MOVPRFX_ZZ undef $z0 |
| ; CHECK-NEXT: $z2 = BSL2N_ZZZZ internal killed $z2, undef $z0, $z1 |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: RET undef $lr, implicit $z2 |
| $z2 = EON_ZZZ undef $z0, $z1 |
| RET_ReallyLR implicit $z2 |
| ... |