summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/PrologEpilogInserter.cpp
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-08-10 16:17:32 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-08-10 16:17:32 +0000
commitbea30c62862cd617fe7fd1bf439b434c76168550 (patch)
tree070669ffcd87acf1be10172f2c3b827ab55d810c /llvm/lib/CodeGen/PrologEpilogInserter.cpp
parentb88de416367d703eff36c87722537658f2aaee0f (diff)
downloadbcm5719-llvm-bea30c62862cd617fe7fd1bf439b434c76168550.tar.gz
bcm5719-llvm-bea30c62862cd617fe7fd1bf439b434c76168550.zip
Add "Restored" flag to CalleeSavedInfo
The liveness-tracking code assumes that the registers that were saved in the function's prolog are live outside of the function. Specifically, that registers that were saved are also live-on-exit from the function. This isn't always the case as illustrated by the LR register on ARM. Differential Revision: https://reviews.llvm.org/D36160 llvm-svn: 310619
Diffstat (limited to 'llvm/lib/CodeGen/PrologEpilogInserter.cpp')
-rw-r--r--llvm/lib/CodeGen/PrologEpilogInserter.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index cbb43203b5c..1b82cd2158a 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -489,7 +489,7 @@ static void insertCSRSaves(MachineBasicBlock &SaveBlock,
/// Insert restore code for the callee-saved registers used in the function.
static void insertCSRRestores(MachineBasicBlock &RestoreBlock,
- ArrayRef<CalleeSavedInfo> CSI) {
+ std::vector<CalleeSavedInfo> &CSI) {
MachineFunction &Fn = *RestoreBlock.getParent();
const TargetInstrInfo &TII = *Fn.getSubtarget().getInstrInfo();
const TargetFrameLowering *TFI = Fn.getSubtarget().getFrameLowering();
@@ -534,7 +534,7 @@ static void doSpillCalleeSavedRegs(MachineFunction &Fn, RegScavenger *RS,
if (!F->hasFnAttribute(Attribute::Naked)) {
MFI.setCalleeSavedInfoValid(true);
- ArrayRef<CalleeSavedInfo> CSI = MFI.getCalleeSavedInfo();
+ std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
if (!CSI.empty()) {
for (MachineBasicBlock *SaveBlock : SaveBlocks) {
insertCSRSaves(*SaveBlock, CSI);
OpenPOWER on IntegriCloud