Lines Matching refs:BinaryBasicBlock

44 static void relaxStubToShortJmp(BinaryBasicBlock &StubBB, const MCSymbol *Tgt) {
52 static void relaxStubToLongJmp(BinaryBasicBlock &StubBB, const MCSymbol *Tgt) {
60 static BinaryBasicBlock *getBBAtHotColdSplitPoint(BinaryFunction &Func) {
80 std::pair<std::unique_ptr<BinaryBasicBlock>, MCSymbol *>
81 LongJmpPass::createNewStub(BinaryBasicBlock &SourceBB, const MCSymbol *TgtSym,
87 std::unique_ptr<BinaryBasicBlock> StubBB = Func.createBasicBlock(StubSym);
101 [&](const std::pair<uint64_t, BinaryBasicBlock *> &LHS,
102 const std::pair<uint64_t, BinaryBasicBlock *> &RHS) {
125 BinaryBasicBlock *LongJmpPass::lookupStubFromGroup(
137 [&](const std::pair<uint64_t, BinaryBasicBlock *> &LHS,
138 const std::pair<uint64_t, BinaryBasicBlock *> &RHS) {
166 BinaryBasicBlock *
167 LongJmpPass::lookupGlobalStub(const BinaryBasicBlock &SourceBB,
176 BinaryBasicBlock *LongJmpPass::lookupLocalStub(const BinaryBasicBlock &SourceBB,
189 std::unique_ptr<BinaryBasicBlock>
190 LongJmpPass::replaceTargetWithStub(BinaryBasicBlock &BB, MCInst &Inst,
195 std::unique_ptr<BinaryBasicBlock> NewBB;
199 BinaryBasicBlock::BinaryBranchInfo BI{0, 0};
200 BinaryBasicBlock *TgtBB = BB.getSuccessor(TgtSym, BI);
219 BinaryBasicBlock *TgtBBSucc = TgtBB->getSuccessor(TgtSym, BI);
232 BinaryBasicBlock *StubBB = lookupLocalStub(BB, Inst, TgtSym, DotAddress);
298 for (const BinaryBasicBlock *BB : Func.getLayout().blocks()) {
447 const BinaryBasicBlock *TgtBB = Func.getBasicBlockForLabel(TgtSym);
456 const BinaryBasicBlock *TgtBB) const {
475 Error LongJmpPass::relaxStub(BinaryBasicBlock &StubBB, bool &Modified) {
490 const BinaryBasicBlock *TgtBB = Func.getBasicBlockForLabel(RealTargetSym);
529 bool LongJmpPass::needsStub(const BinaryBasicBlock &BB, const MCInst &Inst,
536 const BinaryBasicBlock *TgtBB = Func.getBasicBlockForLabel(TgtSym);
561 std::vector<std::pair<BinaryBasicBlock *, std::unique_ptr<BinaryBasicBlock>>>
564 BinaryBasicBlock *Frontier = getBBAtHotColdSplitPoint(Func);
571 for (BinaryBasicBlock &BB : Func) {
596 BinaryBasicBlock *InsertionPoint = &BB;
625 for (BinaryBasicBlock &BB : Func) {
633 for (std::pair<BinaryBasicBlock *, std::unique_ptr<BinaryBasicBlock>> &Elmt :
637 std::vector<std::unique_ptr<BinaryBasicBlock>> NewBBs;
659 const BinaryBasicBlock &BB) {
666 std::vector<std::pair<BinaryBasicBlock *, std::unique_ptr<BinaryBasicBlock>>>
674 for (BinaryBasicBlock *BB : FF) {
688 DenseMap<const BinaryBasicBlock *, BinaryBasicBlock *> FragmentTrampolines;
693 auto addTrampolineAfter = [&](BinaryBasicBlock *BB,
694 BinaryBasicBlock *TargetBB, uint64_t Count,
698 BinaryBasicBlock *TrampolineBB = FunctionTrampolines.back().second.get();
728 for (BinaryBasicBlock *IBB : FF) {
741 BinaryBasicBlock *IBB = Pair.second.get();
758 for (BinaryBasicBlock *BB : FF) {
767 BinaryBasicBlock::BinaryBranchInfo BI;
768 BinaryBasicBlock *TargetBB = BB->getSuccessor(TargetSymbol, BI);
770 BinaryBasicBlock *TrampolineBB =
778 auto relaxBranch = [&](BinaryBasicBlock *BB, MCInst &Inst,
779 uint64_t InstAddress, BinaryBasicBlock *TargetBB) {
784 assert(Count != BinaryBasicBlock::COUNT_NO_PROFILE &&
788 BinaryBasicBlock *TrampolineBB = FragmentTrampolines.lookup(TargetBB);
816 const BinaryBasicBlock *const NextBB =
835 BinaryBasicBlock *BB = *BBI;
852 BinaryBasicBlock *TargetBB = BB->getSuccessor(TargetSymbol);
884 DenseMap<BinaryBasicBlock *, std::vector<std::unique_ptr<BinaryBasicBlock>>>
886 for (std::pair<BinaryBasicBlock *, std::unique_ptr<BinaryBasicBlock>> &Pair :