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;
/// 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.
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]) {
}
CSI[i].setFrameIdx(FrameIdx);
}
+
+ FFI->setCalleeSavedInfo(CSI);
}
/// saveCallerSavedRegisters - Insert spill code for any caller saved registers
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())