X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FCodeGen%2FSpillPlacement.h;h=a88d7ac739144b2a19c278047cb4cc7d976868cc;hb=3bfc4d8e13edd83534b733f0f1de5b1d5f6bf828;hp=9d1d676c54aeae52bc454e9dd65fd08b660e437c;hpb=0e0a8806d49038b60a0c20427d9f410b01cbb012;p=oota-llvm.git diff --git a/lib/CodeGen/SpillPlacement.h b/lib/CodeGen/SpillPlacement.h index 9d1d676c54a..a88d7ac7391 100644 --- a/lib/CodeGen/SpillPlacement.h +++ b/lib/CodeGen/SpillPlacement.h @@ -30,6 +30,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/Support/BlockFrequency.h" namespace llvm { @@ -37,12 +38,14 @@ class BitVector; class EdgeBundles; class MachineBasicBlock; class MachineLoopInfo; +class MachineBlockFrequencyInfo; class SpillPlacement : public MachineFunctionPass { struct Node; const MachineFunction *MF; const EdgeBundles *bundles; const MachineLoopInfo *loops; + const MachineBlockFrequencyInfo *MBFI; Node *nodes; // Nodes that are active in the current computation. Owned by the prepare() @@ -57,7 +60,7 @@ class SpillPlacement : public MachineFunctionPass { SmallVector RecentPositive; // Block frequencies are computed once. Indexed by block number. - SmallVector BlockFrequency; + SmallVector BlockFrequencies; public: static char ID; // Pass identification, replacement for typeid. @@ -107,7 +110,8 @@ public: /// Entry = Exit = PrefSpill, and ChangesValue = false. /// /// @param Blocks Array of block numbers that prefer to spill in and out. - void addPrefSpill(ArrayRef Blocks); + /// @param Strong When true, double the negative bias for these blocks. + void addPrefSpill(ArrayRef Blocks, bool Strong); /// addLinks - Add transparent blocks with the given numbers. void addLinks(ArrayRef Links); @@ -138,14 +142,14 @@ public: /// getBlockFrequency - Return the estimated block execution frequency per /// function invocation. - float getBlockFrequency(unsigned Number) const { - return BlockFrequency[Number]; + BlockFrequency getBlockFrequency(unsigned Number) const { + return BlockFrequencies[Number]; } private: - virtual bool runOnMachineFunction(MachineFunction&); - virtual void getAnalysisUsage(AnalysisUsage&) const; - virtual void releaseMemory(); + bool runOnMachineFunction(MachineFunction&) override; + void getAnalysisUsage(AnalysisUsage&) const override; + void releaseMemory() override; void activate(unsigned); };