Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce MachineBranchProbabilityInfo class, which has similar API to
BranchProbabilityInfo (expect setEdgeWeight which is not available here). Branch Weights are kept in MachineBasicBlocks. To turn off this analysis set -use-mbpi=false. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133184 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Jakub Staszak
committed
Jun 16, 2011
1 parent
1300f30
commit 7cc2b07
Showing
12 changed files
with
356 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
|
||
//==- MachineBranchProbabilityInfo.h - Machine Branch Probability Analysis -==// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This pass is used to evaluate branch probabilties on machine basic blocks. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_CODEGEN_MACHINEBRANCHPROBABILITYINFO_H | ||
#define LLVM_CODEGEN_MACHINEBRANCHPROBABILITYINFO_H | ||
|
||
#include "llvm/Pass.h" | ||
#include "llvm/Support/BranchProbability.h" | ||
#include <climits> | ||
|
||
namespace llvm { | ||
|
||
class raw_ostream; | ||
|
||
class MachineBranchProbabilityInfo : public ImmutablePass { | ||
|
||
// Default weight value. Used when we don't have information about the edge. | ||
// TODO: DEFAULT_WEIGHT makes sense during static predication, when none of | ||
// the successors have a weight yet. But it doesn't make sense when providing | ||
// weight to an edge that may have siblings with non-zero weights. This can | ||
// be handled various ways, but it's probably fine for an edge with unknown | ||
// weight to just "inherit" the non-zero weight of an adjacent successor. | ||
static const uint32_t DEFAULT_WEIGHT = 16; | ||
|
||
// Get sum of the block successors' weights. | ||
uint32_t getSumForBlock(MachineBasicBlock *MBB) const; | ||
|
||
public: | ||
static char ID; | ||
|
||
MachineBranchProbabilityInfo() : ImmutablePass(ID) { | ||
PassRegistry &Registry = *PassRegistry::getPassRegistry(); | ||
initializeMachineBranchProbabilityInfoPass(Registry); | ||
} | ||
|
||
void getAnalysisUsage(AnalysisUsage &AU) const { | ||
AU.setPreservesAll(); | ||
} | ||
|
||
// Return edge weight. If we don't have any informations about it - return | ||
// DEFAULT_WEIGHT. | ||
uint32_t getEdgeWeight(MachineBasicBlock *Src, MachineBasicBlock *Dst) const; | ||
|
||
// A 'Hot' edge is an edge which probability is >= 80%. | ||
bool isEdgeHot(MachineBasicBlock *Src, MachineBasicBlock *Dst) const; | ||
|
||
// Return a hot successor for the block BB or null if there isn't one. | ||
MachineBasicBlock *getHotSucc(MachineBasicBlock *MBB) const; | ||
|
||
// Return a probability as a fraction 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. | ||
BranchProbability getEdgeProbability(MachineBasicBlock *Src, | ||
MachineBasicBlock *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. | ||
raw_ostream &printEdgeProbability(raw_ostream &OS, MachineBasicBlock *Src, | ||
MachineBasicBlock *Dst) const; | ||
}; | ||
|
||
} | ||
|
||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.