[AArch64] Ensure bundle expansion of MOVPRFX gets correct implicit ops (#148824)

By finalizing the bundle _after_ copying over the implicit-ops, it also
adds any implicit-defs to the BUNDLE.

Fixes https://github.com/llvm/llvm-project/issues/148645
This commit is contained in:
Sander de Smalen 2025-07-15 14:53:47 +01:00 committed by Tobias Hieta
parent 588b813079
commit d1517ec622
2 changed files with 18 additions and 4 deletions

View File

@ -671,8 +671,8 @@ bool AArch64ExpandPseudo::expand_DestructiveOp(
} }
if (PRFX) { if (PRFX) {
finalizeBundle(MBB, PRFX->getIterator(), MBBI->getIterator());
transferImpOps(MI, PRFX, DOP); transferImpOps(MI, PRFX, DOP);
finalizeBundle(MBB, PRFX->getIterator(), MBBI->getIterator());
} else } else
transferImpOps(MI, DOP, DOP); transferImpOps(MI, DOP, DOP);

View File

@ -12,7 +12,7 @@ body: |
bb.0: bb.0:
liveins: $p0, $z0 liveins: $p0, $z0
; CHECK: add_x ; CHECK: name: add_x
; CHECK-NOT: MOVPRFX ; CHECK-NOT: MOVPRFX
; CHECK: $z0 = FADD_ZPmZ_S renamable $p0, killed $z0, renamable $z0 ; CHECK: $z0 = FADD_ZPmZ_S renamable $p0, killed $z0, renamable $z0
; CHECK-NEXT: RET ; CHECK-NEXT: RET
@ -21,22 +21,36 @@ body: |
... ...
# CHECK: {{.*}} MSB_ZPmZZ_B {{.*}}
--- ---
name: expand_mls_to_msb name: expand_mls_to_msb
body: | body: |
bb.0: bb.0:
; CHECK: name: expand_mls_to_msb
; CHECK: {{.*}} MSB_ZPmZZ_B {{.*}}
renamable $p0 = PTRUE_B 31, implicit $vg renamable $p0 = PTRUE_B 31, implicit $vg
renamable $z0 = MLS_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1 renamable $z0 = MLS_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1
RET_ReallyLR implicit $z0 RET_ReallyLR implicit $z0
... ...
# CHECK: {{.*}} MAD_ZPmZZ_B {{.*}}
--- ---
name: expand_mla_to_mad name: expand_mla_to_mad
body: | body: |
bb.0: bb.0:
; CHECK: name: expand_mla_to_mad
; CHECK: {{.*}} MAD_ZPmZZ_B {{.*}}
renamable $p0 = PTRUE_B 31, implicit $vg renamable $p0 = PTRUE_B 31, implicit $vg
renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1 renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1
RET_ReallyLR implicit $z0 RET_ReallyLR implicit $z0
... ...
---
name: expand_transfer_implicit_defs
body: |
bb.0:
; CHECK: name: expand_transfer_implicit_defs
; CHECK: BUNDLE
; CHECK-SAME: implicit-def $z0_z1_z2_z3
liveins: $z1, $z2, $p0
renamable $z0 = FADD_ZPZZ_D_UNDEF killed $p0, killed $z1, killed $z2, implicit-def $z0_z1_z2_z3
RET_ReallyLR implicit $z0_z1_z2_z3
...