diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-08-10 16:17:32 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-08-10 16:17:32 +0000 |
commit | bea30c62862cd617fe7fd1bf439b434c76168550 (patch) | |
tree | 070669ffcd87acf1be10172f2c3b827ab55d810c /llvm/lib/CodeGen/PrologEpilogInserter.cpp | |
parent | b88de416367d703eff36c87722537658f2aaee0f (diff) | |
download | bcm5719-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.cpp | 4 |
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); |