mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
Revert "CalculateSpillWeights does not need to be a pass"
Temporarily revert my previous commit until I understand why it breaks 3 target tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194272 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f0c6ab6f00
commit
d241fa7a61
@ -21,9 +21,7 @@ namespace llvm {
|
||||
class MachineBlockFrequencyInfo;
|
||||
class MachineLoopInfo;
|
||||
|
||||
/// \brief Normalize the spill weight of a live interval
|
||||
///
|
||||
/// The spill weight of a live interval is computed as:
|
||||
/// normalizeSpillWeight - The spill weight of a live interval is computed as:
|
||||
///
|
||||
/// (sum(use freq) + sum(def freq)) / (K + size)
|
||||
///
|
||||
@ -40,8 +38,8 @@ namespace llvm {
|
||||
return UseDefFreq / (Size + 25*SlotIndex::InstrDist);
|
||||
}
|
||||
|
||||
/// \brief Calculate auxiliary information for a virtual register such as its
|
||||
/// spill weight and allocation hint.
|
||||
/// VirtRegAuxInfo - Calculate auxiliary information for a virtual
|
||||
/// register such as its spill weight and allocation hint.
|
||||
class VirtRegAuxInfo {
|
||||
MachineFunction &MF;
|
||||
LiveIntervals &LIS;
|
||||
@ -54,16 +52,29 @@ namespace llvm {
|
||||
const MachineBlockFrequencyInfo &mbfi)
|
||||
: MF(mf), LIS(lis), Loops(loops), MBFI(mbfi) {}
|
||||
|
||||
/// \brief (re)compute li's spill weight and allocation hint.
|
||||
/// CalculateWeightAndHint - (re)compute li's spill weight and allocation
|
||||
/// hint.
|
||||
void CalculateWeightAndHint(LiveInterval &li);
|
||||
};
|
||||
|
||||
/// \brief Compute spill weights and allocation hints for all virtual register
|
||||
/// CalculateSpillWeights - Compute spill weights for all virtual register
|
||||
/// live intervals.
|
||||
void calculateSpillWeights(LiveIntervals &LIS,
|
||||
MachineFunction &MF,
|
||||
const MachineLoopInfo &MLI,
|
||||
const MachineBlockFrequencyInfo &MBFI);
|
||||
class CalculateSpillWeights : public MachineFunctionPass {
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
CalculateSpillWeights() : MachineFunctionPass(ID) {
|
||||
initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &au) const;
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &fn);
|
||||
|
||||
private:
|
||||
/// Returns true if the given live interval is zero length.
|
||||
bool isZeroLengthInterval(LiveInterval *li) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,7 @@ void initializeCFGSimplifyPassPass(PassRegistry&);
|
||||
void initializeFlattenCFGPassPass(PassRegistry&);
|
||||
void initializeStructurizeCFGPass(PassRegistry&);
|
||||
void initializeCFGViewerPass(PassRegistry&);
|
||||
void initializeCalculateSpillWeightsPass(PassRegistry&);
|
||||
void initializeCodeGenPreparePass(PassRegistry&);
|
||||
void initializeConstantMergePass(PassRegistry&);
|
||||
void initializeConstantPropagationPass(PassRegistry&);
|
||||
|
@ -22,21 +22,38 @@
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
using namespace llvm;
|
||||
|
||||
void llvm::calculateSpillWeights(LiveIntervals &LIS,
|
||||
MachineFunction &MF,
|
||||
const MachineLoopInfo &MLI,
|
||||
const MachineBlockFrequencyInfo &MBFI) {
|
||||
char CalculateSpillWeights::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(CalculateSpillWeights, "calcspillweights",
|
||||
"Calculate spill weights", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_END(CalculateSpillWeights, "calcspillweights",
|
||||
"Calculate spill weights", false, false)
|
||||
|
||||
void CalculateSpillWeights::getAnalysisUsage(AnalysisUsage &au) const {
|
||||
au.addRequired<LiveIntervals>();
|
||||
au.addRequired<MachineBlockFrequencyInfo>();
|
||||
au.addRequired<MachineLoopInfo>();
|
||||
au.setPreservesAll();
|
||||
MachineFunctionPass::getAnalysisUsage(au);
|
||||
}
|
||||
|
||||
bool CalculateSpillWeights::runOnMachineFunction(MachineFunction &MF) {
|
||||
|
||||
DEBUG(dbgs() << "********** Compute Spill Weights **********\n"
|
||||
<< "********** Function: " << MF.getName() << '\n');
|
||||
|
||||
LiveIntervals &LIS = getAnalysis<LiveIntervals>();
|
||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
VirtRegAuxInfo VRAI(MF, LIS, MLI, MBFI);
|
||||
VirtRegAuxInfo VRAI(MF, LIS, getAnalysis<MachineLoopInfo>(),
|
||||
getAnalysis<MachineBlockFrequencyInfo>());
|
||||
for (unsigned i = 0, e = MRI.getNumVirtRegs(); i != e; ++i) {
|
||||
unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
|
||||
if (MRI.reg_nodbg_empty(Reg))
|
||||
continue;
|
||||
VRAI.CalculateWeightAndHint(LIS.getInterval(Reg));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return the preferred allocation register for reg, given a COPY instruction.
|
||||
|
@ -22,6 +22,7 @@ using namespace llvm;
|
||||
void llvm::initializeCodeGen(PassRegistry &Registry) {
|
||||
initializeBasicTTIPass(Registry);
|
||||
initializeBranchFolderPassPass(Registry);
|
||||
initializeCalculateSpillWeightsPass(Registry);
|
||||
initializeDeadMachineInstructionElimPass(Registry);
|
||||
initializeEarlyIfConverterPass(Registry);
|
||||
initializeExpandPostRAPass(Registry);
|
||||
|
@ -126,6 +126,7 @@ RABasic::RABasic(): MachineFunctionPass(ID) {
|
||||
initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
|
||||
initializeRegisterCoalescerPass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineSchedulerPass(*PassRegistry::getPassRegistry());
|
||||
initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
|
||||
initializeLiveStacksPass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
|
||||
@ -142,6 +143,7 @@ void RABasic::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addPreserved<SlotIndexes>();
|
||||
AU.addRequired<LiveDebugVariables>();
|
||||
AU.addPreserved<LiveDebugVariables>();
|
||||
AU.addRequired<CalculateSpillWeights>();
|
||||
AU.addRequired<LiveStacks>();
|
||||
AU.addPreserved<LiveStacks>();
|
||||
AU.addRequired<MachineBlockFrequencyInfo>();
|
||||
|
@ -315,6 +315,7 @@ RAGreedy::RAGreedy(): MachineFunctionPass(ID) {
|
||||
initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
|
||||
initializeRegisterCoalescerPass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineSchedulerPass(*PassRegistry::getPassRegistry());
|
||||
initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
|
||||
initializeLiveStacksPass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry());
|
||||
initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
|
||||
@ -338,6 +339,7 @@ void RAGreedy::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addPreserved<LiveDebugVariables>();
|
||||
AU.addRequired<LiveStacks>();
|
||||
AU.addPreserved<LiveStacks>();
|
||||
AU.addRequired<CalculateSpillWeights>();
|
||||
AU.addRequired<MachineDominatorTree>();
|
||||
AU.addPreserved<MachineDominatorTree>();
|
||||
AU.addRequired<MachineLoopInfo>();
|
||||
@ -1838,8 +1840,6 @@ bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
|
||||
SpillPlacer = &getAnalysis<SpillPlacement>();
|
||||
DebugVars = &getAnalysis<LiveDebugVariables>();
|
||||
|
||||
calculateSpillWeights(*LIS, mf, *Loops, *MBFI);
|
||||
|
||||
DEBUG(LIS->dump());
|
||||
|
||||
SA.reset(new SplitAnalysis(*VRM, *LIS, *Loops));
|
||||
|
@ -95,6 +95,7 @@ public:
|
||||
: MachineFunctionPass(ID), builder(b.take()), customPassID(cPassID) {
|
||||
initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
|
||||
initializeLiveIntervalsPass(*PassRegistry::getPassRegistry());
|
||||
initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
|
||||
initializeLiveStacksPass(*PassRegistry::getPassRegistry());
|
||||
initializeVirtRegMapPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
@ -431,6 +432,7 @@ void RegAllocPBQP::getAnalysisUsage(AnalysisUsage &au) const {
|
||||
//au.addRequiredID(SplitCriticalEdgesID);
|
||||
if (customPassID)
|
||||
au.addRequiredID(*customPassID);
|
||||
au.addRequired<CalculateSpillWeights>();
|
||||
au.addRequired<LiveStacks>();
|
||||
au.addPreserved<LiveStacks>();
|
||||
au.addRequired<MachineBlockFrequencyInfo>();
|
||||
@ -549,8 +551,6 @@ bool RegAllocPBQP::runOnMachineFunction(MachineFunction &MF) {
|
||||
lss = &getAnalysis<LiveStacks>();
|
||||
mbfi = &getAnalysis<MachineBlockFrequencyInfo>();
|
||||
|
||||
calculateSpillWeights(*lis, MF, getAnalysis<MachineLoopInfo>(), *mbfi);
|
||||
|
||||
vrm = &getAnalysis<VirtRegMap>();
|
||||
spiller.reset(createInlineSpiller(*this, MF, *vrm));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user