From: Francis Visoiu Mistrih Date: Thu, 20 Jul 2017 02:47:05 +0000 (+0000) Subject: Revert "[PEI] Simplify handling of targets with no phys regs. NFC" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=610076276190fcc386473745b402ac137e3ede84;p=llvm Revert "[PEI] Simplify handling of targets with no phys regs. NFC" This reverts commit ce30ab6e5598f3c24f59ad016dc9526bc9a1d450. sanitizer-ppc64le-linux seems to segfault when testing the sanitizers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308581 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/PrologEpilogInserter.cpp b/lib/CodeGen/PrologEpilogInserter.cpp index 9bc3f90fbea..85f67c90992 100644 --- a/lib/CodeGen/PrologEpilogInserter.cpp +++ b/lib/CodeGen/PrologEpilogInserter.cpp @@ -49,6 +49,12 @@ using namespace llvm; #define DEBUG_TYPE "prologepilog" typedef SmallVector MBBVector; +static void doSpillCalleeSavedRegs(MachineFunction &MF, RegScavenger *RS, + unsigned &MinCSFrameIndex, + unsigned &MaxCXFrameIndex, + const MBBVector &SaveBlocks, + const MBBVector &RestoreBlocks); + namespace { class PEI : public MachineFunctionPass { public: @@ -72,7 +78,11 @@ public: bool runOnMachineFunction(MachineFunction &Fn) override; private: - std::function SpillCalleeSavedRegisters; + std::function + SpillCalleeSavedRegisters; std::function ScavengeFrameVirtualRegs; @@ -104,7 +114,7 @@ private: void calculateCallFrameInfo(MachineFunction &Fn); void calculateSaveRestoreBlocks(MachineFunction &Fn); - void doSpillCalleeSavedRegs(MachineFunction &MF); + void calculateFrameObjectOffsets(MachineFunction &Fn); void replaceFrameIndices(MachineFunction &Fn); void replaceFrameIndices(MachineBasicBlock *BB, MachineFunction &Fn, @@ -158,12 +168,12 @@ bool PEI::runOnMachineFunction(MachineFunction &Fn) { if (!SpillCalleeSavedRegisters) { const TargetMachine &TM = Fn.getTarget(); if (!TM.usesPhysRegsForPEI()) { - SpillCalleeSavedRegisters = [](MachineFunction &) {}; + SpillCalleeSavedRegisters = [](MachineFunction &, RegScavenger *, + unsigned &, unsigned &, const MBBVector &, + const MBBVector &) {}; ScavengeFrameVirtualRegs = [](MachineFunction &, RegScavenger &) {}; } else { - SpillCalleeSavedRegisters = [this](MachineFunction &Fn) { - this->doSpillCalleeSavedRegs(Fn); - }; + SpillCalleeSavedRegisters = doSpillCalleeSavedRegs; ScavengeFrameVirtualRegs = scavengeFrameVirtualRegs; UsesCalleeSaves = true; } @@ -189,7 +199,8 @@ bool PEI::runOnMachineFunction(MachineFunction &Fn) { calculateSaveRestoreBlocks(Fn); // Handle CSR spilling and restoring, for targets that need it. - SpillCalleeSavedRegisters(Fn); + SpillCalleeSavedRegisters(Fn, RS, MinCSFrameIndex, MaxCSFrameIndex, + SaveBlocks, RestoreBlocks); // Allow the target machine to make final modifications to the function // before the frame layout is finalized. @@ -529,7 +540,11 @@ static void insertCSRSpillsAndRestores(MachineFunction &Fn, } } -void PEI::doSpillCalleeSavedRegs(MachineFunction &Fn) { +static void doSpillCalleeSavedRegs(MachineFunction &Fn, RegScavenger *RS, + unsigned &MinCSFrameIndex, + unsigned &MaxCSFrameIndex, + const MBBVector &SaveBlocks, + const MBBVector &RestoreBlocks) { const Function *F = Fn.getFunction(); const TargetFrameLowering *TFI = Fn.getSubtarget().getFrameLowering(); MinCSFrameIndex = std::numeric_limits::max();