diff options
-rw-r--r-- | include/llvm/CodeGen/MachineFrameInfo.h | 12 | ||||
-rw-r--r-- | lib/CodeGen/PrologEpilogInserter.cpp | 6 |
2 files changed, 14 insertions, 4 deletions
diff --git a/include/llvm/CodeGen/MachineFrameInfo.h b/include/llvm/CodeGen/MachineFrameInfo.h index 40ebcd3c31..be6f1b9c42 100644 --- a/include/llvm/CodeGen/MachineFrameInfo.h +++ b/include/llvm/CodeGen/MachineFrameInfo.h @@ -134,7 +134,7 @@ class MachineFrameInfo { unsigned MaxCallFrameSize; /// CSInfo - The prolog/epilog code inserter fills in this vector with each - /// callee saved register saved in the frame. Beyond it's use by the prolog/ + /// callee saved register saved in the frame. Beyond its use by the prolog/ /// epilog code inserter, this data used for debug info and exception /// handling. std::vector<CalleeSavedInfo> CSInfo; @@ -273,7 +273,15 @@ public: /// getCalleeSavedInfo - Returns a reference to call saved info vector for the /// current function. - std::vector<CalleeSavedInfo> &getCalleeSavedInfo() { return CSInfo; } + const std::vector<CalleeSavedInfo> &getCalleeSavedInfo() const { + return CSInfo; + } + + /// setCalleeSavedInfo - Used by prolog/epilog inserter to set the function's + /// callee saved information. + void setCalleeSavedInfo(const std::vector<CalleeSavedInfo> &CSI) { + CSInfo = CSI; + } /// getMachineDebugInfo - Used by a prologue/epilogue emitter (MRegisterInfo) /// to provide frame layout information. diff --git a/lib/CodeGen/PrologEpilogInserter.cpp b/lib/CodeGen/PrologEpilogInserter.cpp index 3d37b88218..05052d354d 100644 --- a/lib/CodeGen/PrologEpilogInserter.cpp +++ b/lib/CodeGen/PrologEpilogInserter.cpp @@ -139,7 +139,7 @@ void PEI::calculateCallerSavedRegisters(MachineFunction &Fn) { const bool *PhysRegsUsed = Fn.getUsedPhysregs(); const TargetRegisterClass* const *CSRegClasses = RegInfo->getCalleeSaveRegClasses(); - std::vector<CalleeSavedInfo> &CSI = FFI->getCalleeSavedInfo(); + std::vector<CalleeSavedInfo> CSI; for (unsigned i = 0; CSRegs[i]; ++i) { unsigned Reg = CSRegs[i]; if (PhysRegsUsed[Reg]) { @@ -186,6 +186,8 @@ void PEI::calculateCallerSavedRegisters(MachineFunction &Fn) { } CSI[i].setFrameIdx(FrameIdx); } + + FFI->setCalleeSavedInfo(CSI); } /// saveCallerSavedRegisters - Insert spill code for any caller saved registers @@ -194,7 +196,7 @@ void PEI::calculateCallerSavedRegisters(MachineFunction &Fn) { void PEI::saveCallerSavedRegisters(MachineFunction &Fn) { // Get callee saved register information. MachineFrameInfo *FFI = Fn.getFrameInfo(); - std::vector<CalleeSavedInfo> &CSI = FFI->getCalleeSavedInfo(); + const std::vector<CalleeSavedInfo> &CSI = FFI->getCalleeSavedInfo(); // Early exit if no caller saved registers are modified! if (CSI.empty()) |