diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-04 00:58:40 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-04 00:58:40 +0000 |
commit | c332e727b4dd8e749ba4fb6b68dc5a0682d3d053 (patch) | |
tree | 222a453ff660be968bcd55e61779b91defc7f63a /llvm/lib/CodeGen/SpillPlacement.cpp | |
parent | 9631aae211e557f1ddad20a30d4b4276b853bbec (diff) | |
download | llvm-c332e727b4dd8e749ba4fb6b68dc5a0682d3d053.zip llvm-c332e727b4dd8e749ba4fb6b68dc5a0682d3d053.tar.gz llvm-c332e727b4dd8e749ba4fb6b68dc5a0682d3d053.tar.bz2 |
Precompute block frequencies, pow() isn't free.
llvm-svn: 126975
Diffstat (limited to 'llvm/lib/CodeGen/SpillPlacement.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SpillPlacement.cpp | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/SpillPlacement.cpp b/llvm/lib/CodeGen/SpillPlacement.cpp index 9c0bf162..57951ed 100644 --- a/llvm/lib/CodeGen/SpillPlacement.cpp +++ b/llvm/lib/CodeGen/SpillPlacement.cpp @@ -175,9 +175,12 @@ bool SpillPlacement::runOnMachineFunction(MachineFunction &mf) { nodes = new Node[bundles->getNumBundles()]; // Compute total ingoing and outgoing block frequencies for all bundles. + BlockFrequency.resize(mf.getNumBlockIDs()); for (MachineFunction::iterator I = mf.begin(), E = mf.end(); I != E; ++I) { - float Freq = getBlockFrequency(I); + float Freq = LiveIntervals::getSpillWeight(true, false, + loops->getLoopDepth(I)); unsigned Num = I->getNumber(); + BlockFrequency[Num] = Freq; nodes[bundles->getBundle(Num, 1)].Frequency[0] += Freq; nodes[bundles->getBundle(Num, 0)].Frequency[1] += Freq; } @@ -206,8 +209,7 @@ void SpillPlacement:: prepareNodes(const SmallVectorImpl<BlockConstraint> &LiveBlocks) { for (SmallVectorImpl<BlockConstraint>::const_iterator I = LiveBlocks.begin(), E = LiveBlocks.end(); I != E; ++I) { - MachineBasicBlock *MBB = MF->getBlockNumbered(I->Number); - float Freq = getBlockFrequency(MBB); + float Freq = getBlockFrequency(I->Number); // Is this a transparent block? Link ingoing and outgoing bundles. if (I->Entry == DontCare && I->Exit == DontCare) { @@ -320,11 +322,3 @@ SpillPlacement::placeSpills(const SmallVectorImpl<BlockConstraint> &LiveBlocks, } return Perfect; } - -/// getBlockFrequency - Return our best estimate of the block frequency which is -/// the expected number of block executions per function invocation. -float SpillPlacement::getBlockFrequency(const MachineBasicBlock *MBB) { - // Use the unnormalized spill weight for real block frequencies. - return LiveIntervals::getSpillWeight(true, false, loops->getLoopDepth(MBB)); -} - |