mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 07:59:57 +00:00
[BFI]: NFC refactoring
move getBlockProfileCount implementation to the base class so that MBFI can share too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273442 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
464847757f
commit
7f4f1f640d
@ -16,6 +16,7 @@
|
||||
#define LLVM_ANALYSIS_BLOCKFREQUENCYINFOIMPL_H
|
||||
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/PostOrderIterator.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
@ -476,6 +477,8 @@ public:
|
||||
Scaled64 getFloatingBlockFreq(const BlockNode &Node) const;
|
||||
|
||||
BlockFrequency getBlockFreq(const BlockNode &Node) const;
|
||||
Optional<uint64_t> getBlockProfileCount(const Function &F,
|
||||
const BlockNode &Node) const;
|
||||
|
||||
void setBlockFreq(const BlockNode &Node, uint64_t Freq);
|
||||
|
||||
@ -915,6 +918,10 @@ public:
|
||||
BlockFrequency getBlockFreq(const BlockT *BB) const {
|
||||
return BlockFrequencyInfoImplBase::getBlockFreq(getNode(BB));
|
||||
}
|
||||
Optional<uint64_t> getBlockProfileCount(const Function &F,
|
||||
const BlockT *BB) const {
|
||||
return BlockFrequencyInfoImplBase::getBlockProfileCount(F, getNode(BB));
|
||||
}
|
||||
void setBlockFreq(const BlockT *BB, uint64_t Freq);
|
||||
Scaled64 getFloatingBlockFreq(const BlockT *BB) const {
|
||||
return BlockFrequencyInfoImplBase::getFloatingBlockFreq(getNode(BB));
|
||||
|
@ -140,20 +140,13 @@ BlockFrequency BlockFrequencyInfo::getBlockFreq(const BasicBlock *BB) const {
|
||||
|
||||
Optional<uint64_t>
|
||||
BlockFrequencyInfo::getBlockProfileCount(const BasicBlock *BB) const {
|
||||
auto EntryCount = getFunction()->getEntryCount();
|
||||
if (!EntryCount)
|
||||
if (!BFI)
|
||||
return None;
|
||||
// Use 128 bit APInt to do the arithmetic to avoid overflow.
|
||||
APInt BlockCount(128, EntryCount.getValue());
|
||||
APInt BlockFreq(128, getBlockFreq(BB).getFrequency());
|
||||
APInt EntryFreq(128, getEntryFreq());
|
||||
BlockCount *= BlockFreq;
|
||||
BlockCount = BlockCount.udiv(EntryFreq);
|
||||
return BlockCount.getLimitedValue();
|
||||
|
||||
return BFI->getBlockProfileCount(*getFunction(), BB);
|
||||
}
|
||||
|
||||
void BlockFrequencyInfo::setBlockFreq(const BasicBlock *BB,
|
||||
uint64_t Freq) {
|
||||
void BlockFrequencyInfo::setBlockFreq(const BasicBlock *BB, uint64_t Freq) {
|
||||
assert(BFI && "Expected analysis to be available");
|
||||
BFI->setBlockFreq(BB, Freq);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#include "llvm/Analysis/BlockFrequencyInfoImpl.h"
|
||||
#include "llvm/ADT/SCCIterator.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <numeric>
|
||||
|
||||
@ -529,6 +530,21 @@ BlockFrequencyInfoImplBase::getBlockFreq(const BlockNode &Node) const {
|
||||
return Freqs[Node.Index].Integer;
|
||||
}
|
||||
|
||||
Optional<uint64_t>
|
||||
BlockFrequencyInfoImplBase::getBlockProfileCount(const Function &F,
|
||||
const BlockNode &Node) const {
|
||||
auto EntryCount = F.getEntryCount();
|
||||
if (!EntryCount)
|
||||
return None;
|
||||
// Use 128 bit APInt to do the arithmetic to avoid overflow.
|
||||
APInt BlockCount(128, EntryCount.getValue());
|
||||
APInt BlockFreq(128, getBlockFreq(Node).getFrequency());
|
||||
APInt EntryFreq(128, getEntryFreq());
|
||||
BlockCount *= BlockFreq;
|
||||
BlockCount = BlockCount.udiv(EntryFreq);
|
||||
return BlockCount.getLimitedValue();
|
||||
}
|
||||
|
||||
Scaled64
|
||||
BlockFrequencyInfoImplBase::getFloatingBlockFreq(const BlockNode &Node) const {
|
||||
if (!Node.isValid())
|
||||
|
Loading…
Reference in New Issue
Block a user