mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[llvm][NFC] refactor setBlockFrequency for clarity.
The refactoring encapsulates frequency calculation in MachineBlockFrequencyInfo, and renames the API to clarify its motivation. It should clarify frequencies may not be reset 'freely' by users of the analysis, as the API serves as a partial update to avoid a full analysis recomputation. Differential Revision: https://reviews.llvm.org/D84427
This commit is contained in:
parent
2eb832d47c
commit
d7c7affaca
@ -74,7 +74,11 @@ public:
|
||||
|
||||
bool isIrrLoopHeader(const MachineBasicBlock *MBB) const;
|
||||
|
||||
void setBlockFreq(const MachineBasicBlock *MBB, uint64_t Freq);
|
||||
/// incrementally calculate block frequencies when we split edges, to avoid
|
||||
/// full CFG traversal.
|
||||
void onEdgeSplit(const MachineBasicBlock &NewPredecessor,
|
||||
const MachineBasicBlock &NewSuccessor,
|
||||
const MachineBranchProbabilityInfo &MBPI);
|
||||
|
||||
const MachineFunction *getFunction() const;
|
||||
const MachineBranchProbabilityInfo *getMBPI() const;
|
||||
|
@ -247,10 +247,15 @@ bool MachineBlockFrequencyInfo::isIrrLoopHeader(
|
||||
return MBFI->isIrrLoopHeader(MBB);
|
||||
}
|
||||
|
||||
void MachineBlockFrequencyInfo::setBlockFreq(const MachineBasicBlock *MBB,
|
||||
uint64_t Freq) {
|
||||
void MachineBlockFrequencyInfo::onEdgeSplit(
|
||||
const MachineBasicBlock &NewPredecessor,
|
||||
const MachineBasicBlock &NewSuccessor,
|
||||
const MachineBranchProbabilityInfo &MBPI) {
|
||||
assert(MBFI && "Expected analysis to be available");
|
||||
MBFI->setBlockFreq(MBB, Freq);
|
||||
auto NewSuccFreq = MBFI->getBlockFreq(&NewPredecessor) *
|
||||
MBPI.getEdgeProbability(&NewPredecessor, &NewSuccessor);
|
||||
|
||||
MBFI->setBlockFreq(&NewSuccessor, NewSuccFreq.getFrequency());
|
||||
}
|
||||
|
||||
const MachineFunction *MachineBlockFrequencyInfo::getFunction() const {
|
||||
|
@ -347,11 +347,9 @@ bool MachineSinking::runOnMachineFunction(MachineFunction &MF) {
|
||||
<< printMBBReference(*Pair.first) << " -- "
|
||||
<< printMBBReference(*NewSucc) << " -- "
|
||||
<< printMBBReference(*Pair.second) << '\n');
|
||||
if (MBFI) {
|
||||
auto NewSuccFreq = MBFI->getBlockFreq(Pair.first) *
|
||||
MBPI->getEdgeProbability(Pair.first, NewSucc);
|
||||
MBFI->setBlockFreq(NewSucc, NewSuccFreq.getFrequency());
|
||||
}
|
||||
if (MBFI)
|
||||
MBFI->onEdgeSplit(*Pair.first, *NewSucc, *MBPI);
|
||||
|
||||
MadeChange = true;
|
||||
++NumSplit;
|
||||
} else
|
||||
|
Loading…
Reference in New Issue
Block a user