Lines Matching refs:BF

243 bool BinaryFunctionPass::shouldOptimize(const BinaryFunction &BF) const {  in shouldOptimize()
244 return BF.isSimple() && BF.getState() == BinaryFunction::State::CFG && in shouldOptimize()
245 !BF.isIgnored(); in shouldOptimize()
248 bool BinaryFunctionPass::shouldPrint(const BinaryFunction &BF) const { in shouldPrint()
249 return BF.isSimple() && !BF.isIgnored(); in shouldPrint()
252 void NormalizeCFG::runOnFunction(BinaryFunction &BF) { in runOnFunction() argument
256 for (BinaryBasicBlock &BB : BF) { in runOnFunction()
304 BF.eraseInvalidBBs(); in runOnFunction()
308 for (BinaryBasicBlock &BB : BF) in runOnFunction()
315 BF.fixBranches(); in runOnFunction()
324 [&](BinaryFunction &BF) { runOnFunction(BF); }, in runOnFunctions() argument
325 [&](const BinaryFunction &BF) { return !shouldOptimize(BF); }, in runOnFunctions() argument
374 bool ReorderBasicBlocks::shouldPrint(const BinaryFunction &BF) const { in shouldPrint()
375 return (BinaryFunctionPass::shouldPrint(BF) && in shouldPrint()
379 bool ReorderBasicBlocks::shouldOptimize(const BinaryFunction &BF) const { in shouldOptimize()
381 if (BF.getKnownExecutionCount() < opts::ExecutionCountThreshold) in shouldOptimize()
384 return BinaryFunctionPass::shouldOptimize(BF); in shouldOptimize()
393 ParallelUtilities::WorkFuncTy WorkFun = [&](BinaryFunction &BF) { in runOnFunctions() argument
394 modifyFunctionLayout(BF, opts::ReorderBlocks, opts::MinBranchClusters); in runOnFunctions()
395 if (BF.getLayout().hasLayoutChanged()) in runOnFunctions()
399 ParallelUtilities::PredicateTy SkipFunc = [&](const BinaryFunction &BF) { in runOnFunctions() argument
400 return !shouldOptimize(BF); in runOnFunctions()
447 void ReorderBasicBlocks::modifyFunctionLayout(BinaryFunction &BF, in modifyFunctionLayout() argument
450 if (BF.size() == 0 || Type == LT_NONE) in modifyFunctionLayout()
457 if (Type != LT_REVERSE && !BF.hasValidProfile()) in modifyFunctionLayout()
462 } else if (BF.size() <= opts::TSPThreshold && Type != LT_OPTIMIZE_SHUFFLE) { in modifyFunctionLayout()
464 LLVM_DEBUG(dbgs() << "finding optimal block layout for " << BF << "\n"); in modifyFunctionLayout()
467 LLVM_DEBUG(dbgs() << "running block layout heuristics on " << BF << "\n"); in modifyFunctionLayout()
501 Algo->reorderBasicBlocks(BF, NewLayout); in modifyFunctionLayout()
503 BF.getLayout().update(NewLayout); in modifyFunctionLayout()
517 ParallelUtilities::WorkFuncTy WorkFun = [&](BinaryFunction &BF) { in runOnFunctions() argument
518 if (!BF.finalizeCFIState()) { in runOnFunctions()
520 errs() << "BOLT-ERROR: unable to fix CFI state for function " << BF in runOnFunctions()
524 BF.setSimple(false); in runOnFunctions()
528 BF.setFinalized(); in runOnFunctions()
531 BF.updateEHRanges(); in runOnFunctions()
534 ParallelUtilities::PredicateTy SkipPredicate = [&](const BinaryFunction &BF) { in runOnFunctions() argument
535 return !BC.shouldEmit(BF); in runOnFunctions()
552 ParallelUtilities::WorkFuncTy WorkFun = [&](BinaryFunction &BF) { in runOnFunctions() argument
555 BC.calculateEmittedSize(BF, /*FixBranches=*/false); in runOnFunctions()
556 if (HotSize > BF.getMaxSize()) in runOnFunctions()
557 BF.setSimple(false); in runOnFunctions()
560 ParallelUtilities::PredicateTy SkipFunc = [&](const BinaryFunction &BF) { in runOnFunctions() argument
561 return !shouldOptimize(BF); in runOnFunctions()
569 bool CheckLargeFunctions::shouldOptimize(const BinaryFunction &BF) const { in shouldOptimize()
571 return BF.isSimple() && !BF.isIgnored(); in shouldOptimize()
578 BinaryFunction &BF = It.second; in runOnFunctions() local
584 for (BinaryBasicBlock *BB : BF.getLayout().blocks()) { in runOnFunctions()
592 if (BF.usesGnuArgsSize()) { in runOnFunctions()
599 auto InsertII = BF.addCFIInstruction( in runOnFunctions()
610 if (BF.requiresAddressTranslation() && BC.MIB->getOffset(*II)) in runOnFunctions()
617 for (BinaryFunction *BF : BC.getInjectedBinaryFunctions()) in runOnFunctions()
618 for (BinaryBasicBlock &BB : *BF) in runOnFunctions()
782 uint64_t SimplifyConditionalTailCalls::fixTailCalls(BinaryFunction &BF) { in fixTailCalls() argument
784 BF.getLayout().updateLayoutIndices(); in fixTailCalls()
785 BF.markUnreachableBlocks(); in fixTailCalls()
787 MCPlusBuilder *MIB = BF.getBinaryContext().MIB.get(); in fixTailCalls()
788 MCContext *Ctx = BF.getBinaryContext().Ctx.get(); in fixTailCalls()
801 for (BinaryBasicBlock *BB : BF.getLayout().blocks()) { in fixTailCalls()
815 const bool IsForwardCTC = BF.isForwardCall(CalleeSymbol); in fixTailCalls()
919 BF.getLayout().getBasicBlockAfter(PredBB, false); in fixTailCalls()
921 NextBlock = BF.getLayout().getBasicBlockAfter(NextBlock, false); in fixTailCalls()
942 NumDoubleJumps += fixDoubleJumps(BF, true); in fixTailCalls()
944 const std::pair<unsigned, uint64_t> Stats = BF.eraseInvalidBBs(); in fixTailCalls()
948 assert(BF.validateCFG()); in fixTailCalls()
953 << NumLocalCTCCandidates << " candidates in function " << BF in fixTailCalls()
1028 [&](BinaryFunction &BF) { NumShortened += shortenInstructions(BF); }, in runOnFunctions() argument
1101 bool SimplifyRODataLoads::simplifyRODataLoads(BinaryFunction &BF) { in simplifyRODataLoads() argument
1102 BinaryContext &BC = BF.getBinaryContext(); in simplifyRODataLoads()
1110 for (BinaryBasicBlock *BB : BF.getLayout().blocks()) { in simplifyRODataLoads()
1443 const BinaryFunction &BF = BFI.second; in runOnFunctions() local
1444 if (shouldOptimize(BF) && BF.hasValidProfile()) { in runOnFunctions()
1445 Functions.push_back(&BF); in runOnFunctions()
1446 Stats.emplace(&BF, getDynoStats(BF)); in runOnFunctions()
1545 const BinaryFunction &BF = BFI.second; in runOnFunctions() local
1546 if (!BF.hasValidProfile()) in runOnFunctions()
1550 std::max<uint64_t>(BF.getKnownExecutionCount(), 1); in runOnFunctions()
1552 for (const BinaryBasicBlock *BB : BF.getLayout().rblocks()) { in runOnFunctions()
1558 SuboptimalFuncs.push_back(&BF); in runOnFunctions()
1806 void RemoveNops::runOnFunction(BinaryFunction &BF) { in runOnFunction() argument
1807 const BinaryContext &BC = BF.getBinaryContext(); in runOnFunction()
1808 for (BinaryBasicBlock &BB : BF) { in runOnFunction()
1818 ParallelUtilities::WorkFuncTy WorkFun = [&](BinaryFunction &BF) { in runOnFunctions() argument
1819 runOnFunction(BF); in runOnFunctions()
1822 ParallelUtilities::PredicateTy SkipFunc = [&](const BinaryFunction &BF) { in runOnFunctions() argument
1823 return BF.shouldPreserveNops(); in runOnFunctions()