[llvm] r290014 - AArch64: Enable post-ra liveness updates
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 16 15:55:43 PST 2016
Author: matze
Date: Fri Dec 16 17:55:43 2016
New Revision: 290014
URL: http://llvm.org/viewvc/llvm-project?rev=290014&view=rev
Log:
AArch64: Enable post-ra liveness updates
Differential Revision: https://reviews.llvm.org/D27559
Modified:
llvm/trunk/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp
llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h
llvm/trunk/test/CodeGen/AArch64/ldst-opt-dbg-limit.mir
llvm/trunk/test/CodeGen/AArch64/movimm-wzr.mir
Modified: llvm/trunk/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp?rev=290014&r1=290013&r2=290014&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp Fri Dec 16 17:55:43 2016
@@ -897,9 +897,14 @@ bool AArch64ExpandPseudo::expandMI(Machi
case AArch64::MOVi64imm:
return expandMOVImm(MBB, MBBI, 64);
case AArch64::RET_ReallyLR: {
+ // Hiding the LR use with RET_ReallyLR may lead to extra kills in the
+ // function and missing live-ins. We are fine in practice because callee
+ // saved register handling ensures the register value is restored before
+ // RET, but we need the undef flag here to appease the MachineVerifier
+ // liveness checks.
MachineInstrBuilder MIB =
BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(AArch64::RET))
- .addReg(AArch64::LR);
+ .addReg(AArch64::LR, RegState::Undef);
transferImpOps(MI, MIB, MIB);
MI.eraseFromParent();
return true;
Modified: llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp?rev=290014&r1=290013&r2=290014&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp Fri Dec 16 17:55:43 2016
@@ -767,6 +767,7 @@ AArch64LoadStoreOpt::promoteLoadFromStor
// Remove the load, if the destination register of the loads is the same
// register for stored value.
if (StRt == LdRt && LoadSize == 8) {
+ StoreI->clearRegisterKills(StRt, TRI);
DEBUG(dbgs() << "Remove load instruction:\n ");
DEBUG(LoadI->print(dbgs()));
DEBUG(dbgs() << "\n");
@@ -831,6 +832,8 @@ AArch64LoadStoreOpt::promoteLoadFromStor
.addImm(Imms);
}
}
+ StoreI->clearRegisterKills(StRt, TRI);
+
(void)BitExtMI;
DEBUG(dbgs() << "Promoting load by replacing :\n ");
Modified: llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h?rev=290014&r1=290013&r2=290014&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h Fri Dec 16 17:55:43 2016
@@ -95,6 +95,10 @@ public:
unsigned getRegPressureLimit(const TargetRegisterClass *RC,
MachineFunction &MF) const override;
+
+ bool trackLivenessAfterRegAlloc(const MachineFunction&) const override {
+ return true;
+ }
};
} // end namespace llvm
Modified: llvm/trunk/test/CodeGen/AArch64/ldst-opt-dbg-limit.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/ldst-opt-dbg-limit.mir?rev=290014&r1=290013&r2=290014&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/ldst-opt-dbg-limit.mir (original)
+++ llvm/trunk/test/CodeGen/AArch64/ldst-opt-dbg-limit.mir Fri Dec 16 17:55:43 2016
@@ -28,7 +28,7 @@
name: promote-load-from-store
alignment: 2
exposesReturnsTwice: false
-tracksRegLiveness: false
+tracksRegLiveness: true
liveins:
- { reg: '%x0' }
- { reg: '%w1' }
@@ -48,7 +48,7 @@ frameInfo:
hasMustTailInVarArgFunc: false
body: |
bb.0 (%ir-block.0):
- liveins: %w1, %x0
+ liveins: %w1, %x0, %lr
STRWui killed %w1, %x0, 0 :: (store 4 into %ir.dst)
CFI_INSTRUCTION 0
@@ -76,13 +76,13 @@ body: |
...
# CHECK-LABEL: name: promote-load-from-store
-# CHECK: STRWui killed %w1
+# CHECK: STRWui %w1
# CHECK: UBFMWri %w1
---
name: store-pair
alignment: 2
exposesReturnsTwice: false
-tracksRegLiveness: false
+tracksRegLiveness: true
liveins:
- { reg: '%x0' }
- { reg: '%w1' }
@@ -102,7 +102,7 @@ frameInfo:
hasMustTailInVarArgFunc: false
body: |
bb.0 (%ir-block.0):
- liveins: %w1, %x0
+ liveins: %w1, %x0, %lr
STRWui %w1, %x0, 0 :: (store 4 into %ir.dst01)
CFI_INSTRUCTION 0
Modified: llvm/trunk/test/CodeGen/AArch64/movimm-wzr.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/movimm-wzr.mir?rev=290014&r1=290013&r2=290014&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/movimm-wzr.mir (original)
+++ llvm/trunk/test/CodeGen/AArch64/movimm-wzr.mir Fri Dec 16 17:55:43 2016
@@ -39,4 +39,4 @@ body: |
...
# CHECK: bb.0
-# CHECK-NEXT: RET %lr
+# CHECK-NEXT: RET undef %lr
More information about the llvm-commits
mailing list