[llvm] r223795 - Revert "Move function to obtain branch weights into the BranchInst class. NFC."
Juergen Ributzka
juergen at apple.com
Tue Dec 9 09:32:13 PST 2014
Author: ributzka
Date: Tue Dec 9 11:32:12 2014
New Revision: 223795
URL: http://llvm.org/viewvc/llvm-project?rev=223795&view=rev
Log:
Revert "Move function to obtain branch weights into the BranchInst class. NFC."
This reverts commit r223784 and copies the 'ExtractBranchMetadata' to CodeGenPrepare.
Modified:
llvm/trunk/include/llvm/IR/Instructions.h
llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
llvm/trunk/lib/IR/Instructions.cpp
llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
Modified: llvm/trunk/include/llvm/IR/Instructions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Instructions.h?rev=223795&r1=223794&r2=223795&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Instructions.h (original)
+++ llvm/trunk/include/llvm/IR/Instructions.h Tue Dec 9 11:32:12 2014
@@ -2535,10 +2535,6 @@ public:
/// continues to map correctly to each operand.
void swapSuccessors();
- /// \brief Retrieve the probabilities of a conditional branch. Returns true on
- /// success, or returns false if no or invalid metadata was found.
- bool getBranchWeights(uint64_t &TrueWeight, uint64_t &FalseWeight) const;
-
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const Instruction *I) {
return (I->getOpcode() == Instruction::Br);
Modified: llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp?rev=223795&r1=223794&r2=223795&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp (original)
+++ llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp Tue Dec 9 11:32:12 2014
@@ -3800,6 +3800,27 @@ bool CodeGenPrepare::sinkAndCmp(Function
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::splitBranchConditio
// 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::splitBranchConditio
// 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);
Modified: llvm/trunk/lib/IR/Instructions.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Instructions.cpp?rev=223795&r1=223794&r2=223795&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Instructions.cpp (original)
+++ llvm/trunk/lib/IR/Instructions.cpp Tue Dec 9 11:32:12 2014
@@ -805,26 +805,6 @@ void BranchInst::swapSuccessors() {
MDNode::get(ProfileData->getContext(), Ops));
}
-bool BranchInst::getBranchWeights(uint64_t &TrueWeight,
- uint64_t &FalseWeight) const {
- if (isUnconditional())
- return false;
-
- auto *MD = getMetadata(LLVMContext::MD_prof);
- if (!MD || MD->getNumOperands() != 3)
- return false;
-
- auto *TrueCI = dyn_cast<ConstantInt>(MD->getOperand(1));
- auto *FalseCI = dyn_cast<ConstantInt>(MD->getOperand(2));
- if (!TrueCI || !FalseCI)
- return false;
-
- TrueWeight = TrueCI->getValue().getZExtValue();
- FalseWeight = FalseCI->getValue().getZExtValue();
-
- return true;
-}
-
BasicBlock *BranchInst::getSuccessorV(unsigned idx) const {
return getSuccessor(idx);
}
Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=223795&r1=223794&r2=223795&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Tue Dec 9 11:32:12 2014
@@ -2027,6 +2027,24 @@ static bool SimplifyCondBranchToTwoRetur
return true;
}
+/// ExtractBranchMetadata - Given a conditional BranchInstruction, retrieve the
+/// probabilities of the branch taking each edge. Fills in the two APInt
+/// parameters and return true, 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?");
+ MDNode *ProfileData = BI->getMetadata(LLVMContext::MD_prof);
+ if (!ProfileData || ProfileData->getNumOperands() != 3) return false;
+ ConstantInt *CITrue = dyn_cast<ConstantInt>(ProfileData->getOperand(1));
+ ConstantInt *CIFalse = dyn_cast<ConstantInt>(ProfileData->getOperand(2));
+ if (!CITrue || !CIFalse) return false;
+ ProbTrue = CITrue->getValue().getZExtValue();
+ ProbFalse = CIFalse->getValue().getZExtValue();
+ return true;
+}
+
/// checkCSEInPredecessor - Return true if the given instruction is available
/// in its predecessor block. If yes, the instruction will be removed.
///
@@ -2232,10 +2250,10 @@ bool llvm::FoldBranchToCommonDest(Branch
PBI->setCondition(NewCond);
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
- bool PredHasWeights =
- PBI->getBranchWeights(PredTrueWeight, PredFalseWeight);
- bool SuccHasWeights =
- BI->getBranchWeights(SuccTrueWeight, SuccFalseWeight);
+ bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
+ PredFalseWeight);
+ bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
+ SuccFalseWeight);
SmallVector<uint64_t, 8> NewWeights;
if (PBI->getSuccessor(0) == BB) {
@@ -2505,8 +2523,10 @@ static bool SimplifyCondBranchToCondBran
// Update branch weight for PBI.
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
- bool PredHasWeights = PBI->getBranchWeights(PredTrueWeight, PredFalseWeight);
- bool SuccHasWeights = BI->getBranchWeights(SuccTrueWeight, SuccFalseWeight);
+ bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
+ PredFalseWeight);
+ bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
+ SuccFalseWeight);
if (PredHasWeights && SuccHasWeights) {
uint64_t PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight;
uint64_t PredOther = PBIOp ?PredTrueWeight : PredFalseWeight;
More information about the llvm-commits
mailing list