Skip to content

Commit f8d19b8

Browse files
committed
[AArch64PostCoalescer] Propagate undef flag after replacing
When replacing the register, if the source register has undef flag, we should propagate the flag to all uses of the destination register.
1 parent 10de97a commit f8d19b8

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

llvm/lib/Target/AArch64/AArch64PostCoalescerPass.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ bool AArch64PostCoalescer::runOnMachineFunction(MachineFunction &MF) {
7575
if (Src != Dst)
7676
MRI->replaceRegWith(Dst, Src);
7777

78+
if (MI.getOperand(1).isUndef())
79+
for (MachineOperand &MO : MRI->use_operands(Dst))
80+
MO.setIsUndef();
81+
7882
// MI must be erased from the basic block before recalculating the live
7983
// interval.
8084
LIS->RemoveMachineInstrFromMaps(MI);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
2+
# RUN: llc -mtriple=aarch64 -mattr=+sme -run-pass=aarch64-post-coalescer-pass -o - %s | FileCheck %s
3+
4+
---
5+
name: foo
6+
machineFunctionInfo:
7+
hasStreamingModeChanges: true
8+
body: |
9+
bb.0.entry:
10+
; CHECK-LABEL: name: foo
11+
; CHECK: $d0 = COPY undef %0:fpr64
12+
; CHECK-NEXT: FAKE_USE implicit $d0
13+
%1:fpr64 = COALESCER_BARRIER_FPR64 undef %1
14+
$d0 = COPY %1
15+
FAKE_USE implicit $d0
16+
...

0 commit comments

Comments
 (0)