summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJuergen Ributzka <juergen@apple.com>2014-12-09 16:36:06 +0000
committerJuergen Ributzka <juergen@apple.com>2014-12-09 16:36:06 +0000
commite2aa3aa38a0e9079868f82ba87f809dd28ded91c (patch)
tree5929592b46fb89ca98b24a96fb4f79cff9eee8b3 /llvm/lib
parentfae5d715845dc39b72cce02650bb359595ed0bed (diff)
downloadbcm5719-llvm-e2aa3aa38a0e9079868f82ba87f809dd28ded91c.tar.gz
bcm5719-llvm-e2aa3aa38a0e9079868f82ba87f809dd28ded91c.zip
Move function to obtain branch weights into the BranchInst class. NFC.
Make this function available to other parts of LLVM. llvm-svn: 223784
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/IR/Instructions.cpp20
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp32
2 files changed, 26 insertions, 26 deletions
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index f4c6a289b80..5ea45357864 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -805,6 +805,26 @@ 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);
}
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index daa576cfbdc..3efb89a4d7f 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -2027,24 +2027,6 @@ static bool SimplifyCondBranchToTwoReturns(BranchInst *BI,
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.
///
@@ -2250,10 +2232,10 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI, const DataLayout *DL,
PBI->setCondition(NewCond);
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
- bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
- PredFalseWeight);
- bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
- SuccFalseWeight);
+ bool PredHasWeights =
+ PBI->getBranchWeights(PredTrueWeight, PredFalseWeight);
+ bool SuccHasWeights =
+ BI->getBranchWeights(SuccTrueWeight, SuccFalseWeight);
SmallVector<uint64_t, 8> NewWeights;
if (PBI->getSuccessor(0) == BB) {
@@ -2523,10 +2505,8 @@ static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) {
// Update branch weight for PBI.
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
- bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
- PredFalseWeight);
- bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
- SuccFalseWeight);
+ bool PredHasWeights = PBI->getBranchWeights(PredTrueWeight, PredFalseWeight);
+ bool SuccHasWeights = BI->getBranchWeights(SuccTrueWeight, SuccFalseWeight);
if (PredHasWeights && SuccHasWeights) {
uint64_t PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight;
uint64_t PredOther = PBIOp ?PredTrueWeight : PredFalseWeight;
OpenPOWER on IntegriCloud