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