blob: 2a11e0121f85eed4035d09c7e0ad81a7c16e54f2 [file]
# 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
...