llvm-project/llvm/test/CodeGen/AArch64/expand-constructive-zzi.mir
Gaëtan Bossu fdd2d4df12
[AArch64] Define constructive EXT_ZZI pseudo instruction (#152552)
It will get expanded into MOVPRFX_ZZ and EXT_ZZI by the
AArch64ExpandPseudo pass. This instruction takes a single Z register as
input, as opposed to the existing destructive EXT_ZZI instruction.

Note this patch only defines the pseudo, it isn't used in any ISel
pattern yet. It will later be used for vector.extract.
2025-08-15 09:05:10 +01:00

62 lines
2.1 KiB
YAML

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
# RUN: llc -mtriple=aarch64 -mattr=+sve -run-pass=aarch64-expand-pseudo -verify-machineinstrs %s -o - | FileCheck %s
# Test the expansion of constructive binary operations into their
# destructive counterparts.
# EXT_ZZI_CONSTRUCTIVE
---
name: test_ext_zzi_unique
body: |
bb.0:
; CHECK-LABEL: name: test_ext_zzi_unique
; CHECK: BUNDLE implicit-def $z2, implicit killed $z0 {
; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0
; CHECK-NEXT: $z2 = EXT_ZZI internal killed $z2, killed $z0, 1
; CHECK-NEXT: }
; CHECK-NEXT: RET undef $lr, implicit killed $z2
$z2 = EXT_ZZI_CONSTRUCTIVE killed $z0, 1
RET_ReallyLR implicit killed $z2
...
---
name: test_ext_zzi_already_destructive
body: |
bb.0:
; CHECK-LABEL: name: test_ext_zzi_already_destructive
; CHECK: $z2 = EXT_ZZI killed $z2, killed $z2, 1
; CHECK-NEXT: RET undef $lr, implicit killed $z2
$z2 = EXT_ZZI_CONSTRUCTIVE killed $z2, 1
RET_ReallyLR implicit killed $z2
...
---
name: test_ext_zzi_unique_implicit_ops
body: |
bb.0:
; CHECK-LABEL: name: test_ext_zzi_unique_implicit_ops
; CHECK: BUNDLE implicit-def $z2, implicit-def $q2, implicit killed $z0, implicit killed $q0 {
; CHECK-NEXT: $z2 = MOVPRFX_ZZ $z0, implicit killed $q0
; CHECK-NEXT: $z2 = EXT_ZZI internal killed $z2, killed $z0, 1, implicit-def $q2
; CHECK-NEXT: }
; CHECK-NEXT: RET undef $lr, implicit killed $q2
$z2 = EXT_ZZI_CONSTRUCTIVE killed $z0, 1, implicit-def $q2, implicit killed $q0
RET_ReallyLR implicit killed $q2
...
---
name: test_ext_zzi_undef
body: |
bb.0:
; CHECK-LABEL: name: test_ext_zzi_undef
; CHECK: BUNDLE implicit-def $z2, implicit undef $z0 {
; CHECK-NEXT: $z2 = MOVPRFX_ZZ undef $z0
; CHECK-NEXT: $z2 = EXT_ZZI internal killed $z2, undef $z0, 1
; CHECK-NEXT: }
; CHECK-NEXT: RET undef $lr, implicit killed $z2
$z2 = EXT_ZZI_CONSTRUCTIVE undef $z0, 1
RET_ReallyLR implicit killed $z2
...