mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
[block-freq] Teach branch probability how to return the edge weight in between a BasicBlock and one of its successors.
IMHO At some point BasicBlock should be refactored along the lines of MachineBasicBlock so that successors/weights are actually embedded within the block. Now is not that time though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197303 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1b98ef1c19
commit
b68ca3e9c5
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "llvm/ADT/DenseMap.h"
|
#include "llvm/ADT/DenseMap.h"
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
|
#include "llvm/Support/CFG.h"
|
||||||
#include "llvm/InitializePasses.h"
|
#include "llvm/InitializePasses.h"
|
||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
#include "llvm/Support/BranchProbability.h"
|
#include "llvm/Support/BranchProbability.h"
|
||||||
@ -98,6 +99,9 @@ public:
|
|||||||
/// It is guaranteed to fall between 1 and UINT32_MAX.
|
/// It is guaranteed to fall between 1 and UINT32_MAX.
|
||||||
uint32_t getEdgeWeight(const BasicBlock *Src, const BasicBlock *Dst) const;
|
uint32_t getEdgeWeight(const BasicBlock *Src, const BasicBlock *Dst) const;
|
||||||
|
|
||||||
|
uint32_t getEdgeWeight(const BasicBlock *Src,
|
||||||
|
succ_const_iterator Dst) const;
|
||||||
|
|
||||||
/// \brief Set the raw edge weight for a given edge.
|
/// \brief Set the raw edge weight for a given edge.
|
||||||
///
|
///
|
||||||
/// This allows a pass to explicitly set the edge weight for an edge. It can
|
/// This allows a pass to explicitly set the edge weight for an edge. It can
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#define DEBUG_TYPE "branch-prob"
|
||||||
#include "llvm/Analysis/BranchProbabilityInfo.h"
|
#include "llvm/Analysis/BranchProbabilityInfo.h"
|
||||||
#include "llvm/ADT/PostOrderIterator.h"
|
#include "llvm/ADT/PostOrderIterator.h"
|
||||||
#include "llvm/Analysis/LoopInfo.h"
|
#include "llvm/Analysis/LoopInfo.h"
|
||||||
@ -483,6 +484,8 @@ void BranchProbabilityInfo::getAnalysisUsage(AnalysisUsage &AU) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool BranchProbabilityInfo::runOnFunction(Function &F) {
|
bool BranchProbabilityInfo::runOnFunction(Function &F) {
|
||||||
|
DEBUG(dbgs() << "---- Branch Probability Info : " << F.getName()
|
||||||
|
<< " ----\n\n");
|
||||||
LastF = &F; // Store the last function we ran on for printing.
|
LastF = &F; // Store the last function we ran on for printing.
|
||||||
LI = &getAnalysis<LoopInfo>();
|
LI = &getAnalysis<LoopInfo>();
|
||||||
assert(PostDominatedByUnreachable.empty());
|
assert(PostDominatedByUnreachable.empty());
|
||||||
@ -591,6 +594,13 @@ getEdgeWeight(const BasicBlock *Src, unsigned IndexInSuccessors) const {
|
|||||||
return DEFAULT_WEIGHT;
|
return DEFAULT_WEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
BranchProbabilityInfo::
|
||||||
|
getEdgeWeight(const BasicBlock *Src, succ_const_iterator Dst) const {
|
||||||
|
size_t index = std::distance(succ_begin(Src), Dst);
|
||||||
|
return getEdgeWeight(Src, index);
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the raw edge weight calculated for the block pair. This returns the sum
|
/// Get the raw edge weight calculated for the block pair. This returns the sum
|
||||||
/// of all raw edge weights from Src to Dst.
|
/// of all raw edge weights from Src to Dst.
|
||||||
uint32_t BranchProbabilityInfo::
|
uint32_t BranchProbabilityInfo::
|
||||||
|
Loading…
Reference in New Issue
Block a user