Lines Matching refs:BF

88   bool canSplit(const BinaryFunction &BF) {  in canSplit()
89 if (!BF.hasValidProfile()) in canSplit()
93 for (const BinaryBasicBlock &BB : BF) { in canSplit()
123 bool canSplit(const BinaryFunction &BF) { return true; } in canSplit()
158 bool SplitFunctions::shouldOptimize(const BinaryFunction &BF) const { in shouldOptimize()
160 if (BF.getKnownExecutionCount() < opts::ExecutionCountThreshold) in shouldOptimize()
163 return BinaryFunctionPass::shouldOptimize(BF); in shouldOptimize()
173 WorkFun = [&](BinaryFunction &BF) { in runOnFunctions() argument
174 splitFunction(BF, SplitRandom(RandGen)); in runOnFunctions()
177 WorkFun = [&](BinaryFunction &BF) { splitFunction<SplitCold>(BF); }; in runOnFunctions() argument
179 ParallelUtilities::PredicateTy SkipFunc = [&](const BinaryFunction &BF) { in runOnFunctions() argument
180 return !shouldOptimize(BF); in runOnFunctions()
199 void SplitFunctions::splitFunction(BinaryFunction &BF, SplitStrategy Strategy) { in splitFunction() argument
200 if (BF.empty()) in splitFunction()
203 if (!Strategy.canSplit(BF)) in splitFunction()
206 FunctionLayout &Layout = BF.getLayout(); in splitFunction()
210 BinaryContext &BC = BF.getBinaryContext(); in splitFunction()
215 std::tie(OriginalHotSize, ColdSize) = BC.calculateEmittedSize(BF); in splitFunction()
216 LLVM_DEBUG(dbgs() << "Estimated size for function " << BF in splitFunction()
241 if (BF.hasEHRanges() && !opts::SplitEH) { in splitFunction()
267 } else if (BF.hasEHRanges() && !opts::SplitEH) { in splitFunction()
283 BF.getLayout().update(NewLayout); in splitFunction()
289 if (!BC.HasFixedLoadAddress && BF.hasEHRanges() && BF.isSplit()) in splitFunction()
290 Trampolines = createEHTrampolines(BF); in splitFunction()
293 if (BC.isX86() && BF.isSplit()) { in splitFunction()
294 std::tie(HotSize, ColdSize) = BC.calculateEmittedSize(BF); in splitFunction()
295 LLVM_DEBUG(dbgs() << "Estimated size for function " << BF in splitFunction()
300 LLVM_DEBUG(dbgs() << "Reversing splitting of function " << BF << ":\n 0x" in splitFunction()
308 if (PreSplitLayout.size() != BF.size()) in splitFunction()
309 PreSplitLayout = mergeEHTrampolines(BF, PreSplitLayout, Trampolines); in splitFunction()
311 for (BinaryBasicBlock &BB : BF) in splitFunction()
313 BF.getLayout().update(PreSplitLayout); in splitFunction()
322 SplitFunctions::createEHTrampolines(BinaryFunction &BF) const { in createEHTrampolines()
323 const auto &MIB = BF.getBinaryContext().MIB; in createEHTrampolines()
330 std::vector<BinaryBasicBlock *> Blocks(BF.pbegin(), BF.pend()); in createEHTrampolines()
338 BinaryBasicBlock *LPBlock = BF.getBasicBlockForLabel(LPLabel); in createEHTrampolines()
350 BinaryBasicBlock *TrampolineBB = BF.addBasicBlock(); in createEHTrampolines()
370 BinaryFunction::BasicBlockOrderType NewLayout(BF.getLayout().block_begin(), in createEHTrampolines()
371 BF.getLayout().block_end()); in createEHTrampolines()
375 BF.getLayout().update(NewLayout); in createEHTrampolines()
378 BF.fixBranches(); in createEHTrampolines()
381 BF.recomputeLandingPads(); in createEHTrampolines()
387 BinaryFunction &BF, SplitFunctions::BasicBlockOrderType &Layout, in mergeEHTrampolines() argument
393 BinaryBasicBlock *LPBlock = BF.getBasicBlockForLabel(Iter->second); in mergeEHTrampolines()