[llvm-commits] [llvm] r133766 - in /llvm/trunk: include/llvm/Analysis/BranchProbabilityInfo.h include/llvm/InitializePasses.h include/llvm/Support/BranchProbability.h lib/Analysis/Analysis.cpp lib/Analysis/BranchProbabilityInfo.cpp lib/Analysis/C
Matt Beaumont-Gay
matthewbg at google.com
Thu Jun 23 15:02:04 PDT 2011
On Thu, Jun 23, 2011 at 14:45, Jakub Staszak <jstaszak at apple.com> wrote:
> Author: kuba
> Date: Thu Jun 23 16:45:20 2011
> New Revision: 133766
>
> URL: http://llvm.org/viewvc/llvm-project?rev=133766&view=rev
> Log:
> Introduce BlockFrequency analysis for BasicBlocks.
>
> Modified:
> llvm/trunk/include/llvm/Analysis/BranchProbabilityInfo.h
> llvm/trunk/include/llvm/InitializePasses.h
> llvm/trunk/include/llvm/Support/BranchProbability.h
> llvm/trunk/lib/Analysis/Analysis.cpp
> llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
> llvm/trunk/lib/Analysis/CMakeLists.txt
>
> Modified: llvm/trunk/include/llvm/Analysis/BranchProbabilityInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/BranchProbabilityInfo.h?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/BranchProbabilityInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/BranchProbabilityInfo.h Thu Jun 23 16:45:20 2011
> @@ -39,6 +39,9 @@
> // Get sum of the block successors' weights.
> uint32_t getSumForBlock(BasicBlock *BB) const;
>
> + // Get sum of the edge weights going to the BB block.
> + uint32_t getBackSumForBlock(BasicBlock *BB) const;
> +
> public:
> static char ID;
>
> @@ -71,6 +74,13 @@
> // only iff SRC block has only one successor.
> BranchProbability getEdgeProbability(BasicBlock *Src, BasicBlock *Dst) const;
>
> + // Return a probability of getting to the DST block through SRC->DST edge.
> + // Returned value is a fraction between 0 (0% probability) and
> + // 1 (100% probability), however the value is never equal to 0, and can be 1
> + // only iff DST block has only one predecesor.
> + BranchProbability getBackEdgeProbability(BasicBlock *Src,
> + BasicBlock *Dst) const;
> +
> // Print value between 0 (0% probability) and 1 (100% probability),
> // however the value is never equal to 0, and can be 1 only iff SRC block
> // has only one successor.
>
> Modified: llvm/trunk/include/llvm/InitializePasses.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/InitializePasses.h (original)
> +++ llvm/trunk/include/llvm/InitializePasses.h Thu Jun 23 16:45:20 2011
> @@ -65,6 +65,7 @@
> void initializeBasicAliasAnalysisPass(PassRegistry&);
> void initializeBasicCallGraphPass(PassRegistry&);
> void initializeBlockExtractorPassPass(PassRegistry&);
> +void initializeBlockFrequencyPass(PassRegistry&);
> void initializeBlockPlacementPass(PassRegistry&);
> void initializeBranchProbabilityInfoPass(PassRegistry&);
> void initializeBreakCriticalEdgesPass(PassRegistry&);
>
> Modified: llvm/trunk/include/llvm/Support/BranchProbability.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/BranchProbability.h?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/BranchProbability.h (original)
> +++ llvm/trunk/include/llvm/Support/BranchProbability.h Thu Jun 23 16:45:20 2011
> @@ -18,13 +18,17 @@
>
> namespace llvm {
>
> -class raw_ostream;
> +template<class BlockT, class FunctionT, class BranchProbInfoT>
> +class BlockFrequencyImpl;
> class BranchProbabilityInfo;
> class MachineBranchProbabilityInfo;
> class MachineBasicBlock;
> +class raw_ostream;
>
> // This class represents Branch Probability as a non-negative fraction.
> class BranchProbability {
> + template<class BlockT, class FunctionT, class BranchProbInfoT>
> + friend class BlockFrequencyImpl;
> friend class BranchProbabilityInfo;
> friend class MachineBranchProbabilityInfo;
> friend class MachineBasicBlock;
> @@ -38,6 +42,10 @@
> BranchProbability(uint32_t n, uint32_t d);
>
> public:
> +
> + uint32_t getNumerator() const { return N; }
> + uint32_t getDenominator() const { return D; }
> +
> raw_ostream &print(raw_ostream &OS) const;
>
> void dump() const;
>
> Modified: llvm/trunk/lib/Analysis/Analysis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/Analysis.cpp?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/Analysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/Analysis.cpp Thu Jun 23 16:45:20 2011
> @@ -23,6 +23,7 @@
> initializeAliasSetPrinterPass(Registry);
> initializeNoAAPass(Registry);
> initializeBasicAliasAnalysisPass(Registry);
> + initializeBlockFrequencyPass(Registry);
> initializeBranchProbabilityInfoPass(Registry);
> initializeCFGViewerPass(Registry);
> initializeCFGPrinterPass(Registry);
>
> Modified: llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp Thu Jun 23 16:45:20 2011
> @@ -279,6 +279,21 @@
> return Sum;
> }
>
> +uint32_t BranchProbabilityInfo::getBackSumForBlock(BasicBlock *BB) const {
> + uint32_t Sum = 0;
> +
> + for (pred_iterator I = pred_begin(BB), E = pred_end(BB); I != E; ++I) {
> + BasicBlock *Pred = *I;
> + uint32_t Weight = getEdgeWeight(Pred, BB);
> + uint32_t PrevSum = Sum;
> +
> + Sum += Weight;
> + assert(Sum > PrevSum); (void) PrevSum;
> + }
> +
> + return Sum;
> +}
> +
> bool BranchProbabilityInfo::isEdgeHot(BasicBlock *Src, BasicBlock *Dst) const {
> // Hot probability is at least 4/5 = 80%
> uint32_t Weight = getEdgeWeight(Src, Dst);
> @@ -345,6 +360,15 @@
> return BranchProbability(N, D);
> }
>
> +BranchProbability BranchProbabilityInfo::
> +getBackEdgeProbability(BasicBlock *Src, BasicBlock *Dst) const {
> +
> + uint32_t N = getEdgeWeight(Src, Dst);
> + uint32_t D = getBackSumForBlock(Dst);
> +
> + return BranchProbability(N, D);
> +}
> +
> raw_ostream &
> BranchProbabilityInfo::printEdgeProbability(raw_ostream &OS, BasicBlock *Src,
> BasicBlock *Dst) const {
>
> Modified: llvm/trunk/lib/Analysis/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CMakeLists.txt?rev=133766&r1=133765&r2=133766&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Analysis/CMakeLists.txt Thu Jun 23 16:45:20 2011
> @@ -6,6 +6,7 @@
> AliasSetTracker.cpp
> Analysis.cpp
> BasicAliasAnalysis.cpp
> + BlockFrequency.cpp
Looks like you forgot to add this file?
More information about the llvm-commits
mailing list