# 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 # RUN: llc -mtriple=aarch64 -mattr=+sve -passes=aarch64-expand-pseudo %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 ...