mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
Revert "Move function to obtain branch weights into the BranchInst class. NFC."
This reverts commit r223784 and copies the 'ExtractBranchMetadata' to CodeGenPrepare. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223795 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -3800,6 +3800,27 @@ bool CodeGenPrepare::sinkAndCmp(Function &F) {
|
||||
return MadeChange;
|
||||
}
|
||||
|
||||
/// \brief Retrieve the probabilities of a conditional branch. Returns true on
|
||||
/// success, or returns false if no or invalid metadata was found.
|
||||
static bool extractBranchMetadata(BranchInst *BI,
|
||||
uint64_t &ProbTrue, uint64_t &ProbFalse) {
|
||||
assert(BI->isConditional() &&
|
||||
"Looking for probabilities on unconditional branch?");
|
||||
auto *ProfileData = BI->getMetadata(LLVMContext::MD_prof);
|
||||
if (!ProfileData || ProfileData->getNumOperands() != 3)
|
||||
return false;
|
||||
|
||||
const auto *CITrue = dyn_cast<ConstantInt>(ProfileData->getOperand(1));
|
||||
const auto *CIFalse = dyn_cast<ConstantInt>(ProfileData->getOperand(2));
|
||||
if (!CITrue || !CIFalse)
|
||||
return false;
|
||||
|
||||
ProbTrue = CITrue->getValue().getZExtValue();
|
||||
ProbFalse = CIFalse->getValue().getZExtValue();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// \brief Scale down both weights to fit into uint32_t.
|
||||
static void scaleWeights(uint64_t &NewTrue, uint64_t &NewFalse) {
|
||||
uint64_t NewMax = (NewTrue > NewFalse) ? NewTrue : NewFalse;
|
||||
@ -3942,7 +3963,7 @@ bool CodeGenPrepare::splitBranchCondition(Function &F) {
|
||||
// Another choice is to assume TrueProb for BB1 equals to TrueProb for
|
||||
// TmpBB, but the math is more complicated.
|
||||
uint64_t TrueWeight, FalseWeight;
|
||||
if (Br1->getBranchWeights(TrueWeight, FalseWeight)) {
|
||||
if (extractBranchMetadata(Br1, TrueWeight, FalseWeight)) {
|
||||
uint64_t NewTrueWeight = TrueWeight;
|
||||
uint64_t NewFalseWeight = TrueWeight + 2 * FalseWeight;
|
||||
scaleWeights(NewTrueWeight, NewFalseWeight);
|
||||
@ -3975,7 +3996,7 @@ bool CodeGenPrepare::splitBranchCondition(Function &F) {
|
||||
// assumes that
|
||||
// FalseProb for BB1 == TrueProb for BB1 * FalseProb for TmpBB.
|
||||
uint64_t TrueWeight, FalseWeight;
|
||||
if (Br1->getBranchWeights(TrueWeight, FalseWeight)) {
|
||||
if (extractBranchMetadata(Br1, TrueWeight, FalseWeight)) {
|
||||
uint64_t NewTrueWeight = 2 * TrueWeight + FalseWeight;
|
||||
uint64_t NewFalseWeight = FalseWeight;
|
||||
scaleWeights(NewTrueWeight, NewFalseWeight);
|
||||
|
Reference in New Issue
Block a user