mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-02 21:17:17 +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:
@@ -71,7 +71,7 @@ void CriticalAntiDepBreaker::StartBlock(MachineBasicBlock *BB) {
|
||||
// all callee-saved registers. In non-return this is any
|
||||
// callee-saved register that is not saved in the prolog.
|
||||
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
BitVector Pristine = MFI->getPristineRegs(BB);
|
||||
BitVector Pristine = MFI->getPristineRegs(MF);
|
||||
for (const MCPhysReg *I = TRI->getCalleeSavedRegs(&MF); *I; ++I) {
|
||||
if (!IsReturnBlock && !Pristine.test(*I)) continue;
|
||||
for (MCRegAliasIterator AI(*I, TRI, true); AI.isValid(); ++AI) {
|
||||
|
Reference in New Issue
Block a user