mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-28 21:18:16 +00:00
MachineFrameInfo: Simplify pristine register calculation.
About pristine regsiters: Pristine registers "hold a value that is useless to the current function, but that must be preserved - they are callee saved registers that have not been saved." This concept saves compile time as it frees the prologue/epilogue inserter from adding every such register to every basic blocks live-in list. However the current code in getPristineRegs is formulated in a complicated way: Inside the function prologue and epilogue all callee saves are considered pristine, while in the rest of the code only the non-saved ones are considered pristine. This requires logic to differentiate between prologue/epilogue and the rest and in the presence of shrink-wrapping this even becomes complicated/expensive. It's also unnecessary because the prologue epilogue inserters already mark callee-save registers that are saved/restores properly in the respective blocks in the prologue/epilogue (see updateLiveness() in PrologueEpilogueInserter.cpp). So only declaring non-saved/restored callee saved registers as pristine just works. Differential Revision: http://reviews.llvm.org/D10101 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238524 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -256,11 +256,6 @@ class MachineFrameInfo {
|
||||
/// Not null, if shrink-wrapping found a better place for the epilogue.
|
||||
MachineBasicBlock *Restore;
|
||||
|
||||
/// Check if it exists a path from \p MBB leading to the basic
|
||||
/// block with a SavePoint (a.k.a. prologue).
|
||||
bool isBeforeSavePoint(const MachineFunction &MF,
|
||||
const MachineBasicBlock &MBB) const;
|
||||
|
||||
public:
|
||||
explicit MachineFrameInfo(unsigned StackAlign, bool isStackRealign,
|
||||
bool RealignOpt)
|
||||
@@ -627,16 +622,15 @@ public:
|
||||
MachineBasicBlock *getRestorePoint() const { return Restore; }
|
||||
void setRestorePoint(MachineBasicBlock *NewRestore) { Restore = NewRestore; }
|
||||
|
||||
/// getPristineRegs - Return a set of physical registers that are pristine on
|
||||
/// entry to the MBB.
|
||||
/// Return a set of physical registers that are pristine.
|
||||
///
|
||||
/// Pristine registers hold a value that is useless to the current function,
|
||||
/// but that must be preserved - they are callee saved registers that have not
|
||||
/// been saved yet.
|
||||
/// but that must be preserved - they are callee saved registers that are not
|
||||
/// saved.
|
||||
///
|
||||
/// Before the PrologueEpilogueInserter has placed the CSR spill code, this
|
||||
/// method always returns an empty set.
|
||||
BitVector getPristineRegs(const MachineBasicBlock *MBB) const;
|
||||
BitVector getPristineRegs(const MachineFunction &MF) const;
|
||||
|
||||
/// print - Used by the MachineFunction printer to print information about
|
||||
/// stack objects. Implemented in MachineFunction.cpp
|
||||
|
||||
Reference in New Issue
Block a user