Home
last modified time | relevance | path

Searched refs:BinaryBasicBlock (Results 1 – 25 of 82) sorted by relevance

1234

/llvm-project/bolt/lib/Core/
H A DBinaryBasicBlock.cpp25 constexpr uint32_t BinaryBasicBlock::INVALID_OFFSET;
27 bool operator<(const BinaryBasicBlock &LHS, const BinaryBasicBlock &RHS) { in operator <()
31 bool BinaryBasicBlock::hasCFG() const { return getParent()->hasCFG(); } in hasCFG()
33 bool BinaryBasicBlock::isEntryPoint() const { in isEntryPoint()
37 bool BinaryBasicBlock::hasInstructions() const { in hasInstructions()
41 const JumpTable *BinaryBasicBlock::getJumpTable() const { in getJumpTable()
47 void BinaryBasicBlock::adjustNumPseudos(const MCInst &Inst, int Sign) { in adjustNumPseudos()
53 BinaryBasicBlock::iterator BinaryBasicBlock::getFirstNonPseudo() { in getFirstNonPseudo()
62 BinaryBasicBlock::reverse_iterator BinaryBasicBlock::getLastNonPseudo() { in getLastNonPseudo()
72 bool BinaryBasicBlock::validateSuccessorInvariants() { in validateSuccessorInvariants()
[all …]
H A DBinaryFunctionProfile.cpp14 #include "bolt/Core/BinaryBasicBlock.h"
82 for (BinaryBasicBlock *BB : BasicBlocks) { in postProcessProfile()
84 BB->ExecutionCount == BinaryBasicBlock::COUNT_NO_PROFILE) in postProcessProfile()
87 for (BinaryBasicBlock *BB : BasicBlocks) { in postProcessProfile()
89 for (BinaryBasicBlock *Succ : BB->successors()) { in postProcessProfile()
92 if (SuccBIIter->Count != BinaryBasicBlock::COUNT_NO_PROFILE && in postProcessProfile()
100 for (BinaryBasicBlock *BB : BasicBlocks) { in postProcessProfile()
112 BinaryBasicBlock *FTSuccessor = BB->getSuccessor(); in postProcessProfile()
113 BinaryBasicBlock::BinaryBranchInfo &BI = BB->getBranchInfo(*FTSuccessor); in postProcessProfile()
122 for (BinaryBasicBlock *B in postProcessProfile()
[all...]
H A DFunctionLayout.cpp10 #include "bolt/Core/BinaryBasicBlock.h"
36 BinaryBasicBlock *FunctionFragment::front() const { return *begin(); } in front()
38 BinaryBasicBlock *FunctionFragment::back() const { return *std::prev(end()); } in FunctionLayout()
97 FunctionLayout::findFragment(const BinaryBasicBlock *const BB) const { in findFragment()
101 void FunctionLayout::addBasicBlock(BinaryBasicBlock *const BB) { in addBasicBlock()
108 const BinaryBasicBlock *const InsertAfter, in insertBasicBlocks()
109 const ArrayRef<BinaryBasicBlock *> NewBlocks) { in insertBasicBlocks()
122 for (BinaryBasicBlock *const BB : NewBlocks) { in insertBasicBlocks()
134 for (BinaryBasicBlock *const BB : FF) in insertBasicBlocks()
141 const DenseSet<const BinaryBasicBlock *> ToEras in eraseBasicBlocks()
[all...]
H A DBinaryFunction.cpp14 #include "bolt/Core/BinaryBasicBlock.h"
277 BinaryBasicBlock * in getBasicBlockContainingOffset()
296 BinaryBasicBlock *BB = I->second; in markUnreachableBlocks()
301 std::stack<BinaryBasicBlock *> Stack; in markUnreachableBlocks()
303 for (BinaryBasicBlock &BB : blocks()) in markUnreachableBlocks()
307 for (BinaryBasicBlock *BB : BasicBlocks) { in markUnreachableBlocks()
327 BinaryBasicBlock *BB = Stack.top(); in markUnreachableBlocks()
329 for (BinaryBasicBlock *Succ : BB->successors()) { in markUnreachableBlocks()
342 DenseSet<const BinaryBasicBlock *> InvalidBBs; in eraseInvalidBBs()
345 for (BinaryBasicBlock *cons in eraseInvalidBBs()
[all...]
/llvm-project/bolt/include/bolt/Passes/
H A DTailDuplication.h85 bool isOverwrittenBeforeUsed(BinaryBasicBlock &StartBB, unsigned Reg) const;
90 constantAndCopyPropagate(BinaryBasicBlock &OriginalBB,
91 std::vector<BinaryBasicBlock *> &BlocksToPropagate);
94 bool isInCacheLine(const BinaryBasicBlock &BB,
95 const BinaryBasicBlock &Tail) const;
98 std::vector<BinaryBasicBlock *> duplicateBlocks(
99 BinaryBasicBlock &BB,
100 const std::vector<BinaryBasicBlock *> &BlocksToDuplicate) const;
103 bool shouldDuplicate(BinaryBasicBlock *BB, BinaryBasicBlock *Tail) const;
116 BinaryBasicBlock *Pred, BinaryBasicBlock *Tail) const;
[all …]
H A DLongJmp.h35 using StubTy = std::pair<uint64_t, BinaryBasicBlock *>;
40 DenseMap<const MCSymbol *, BinaryBasicBlock *> SharedStubs;
50 DenseMap<const BinaryFunction *, std::set<const BinaryBasicBlock *>> Stubs;
56 DenseMap<const BinaryBasicBlock *, uint64_t> BBAddresses;
59 DenseMap<const BinaryBasicBlock *, int> StubBits;
105 std::pair<std::unique_ptr<BinaryBasicBlock>, MCSymbol *>
106 createNewStub(BinaryBasicBlock &SourceBB, const MCSymbol *TgtSym,
112 std::unique_ptr<BinaryBasicBlock>
113 replaceTargetWithStub(BinaryBasicBlock &BB, MCInst &Inst, uint64_t DotAddress,
122 BinaryBasicBlock *lookupStubFromGrou
[all...]
H A DDataflowAnalysis.h44 BinaryBasicBlock *BB;
46 DataU(BinaryBasicBlock *BB) : BB(BB) {} in DataU()
52 ProgramPoint(BinaryBasicBlock *BB) : ID(IDTy::BB), Data(BB) {} in ProgramPoint()
58 static ProgramPoint getLastPointAt(BinaryBasicBlock &BB) { in getLastPointAt()
66 static ProgramPoint getFirstPointAt(BinaryBasicBlock &BB) { in getFirstPointAt()
81 BinaryBasicBlock *getBB() const { in getBB()
95 void doForAllPreds(const BinaryBasicBlock &BB,
99 void doForAllSuccs(const BinaryBasicBlock &BB,
168 std::unordered_map<const BinaryBasicBlock *, StateTy> StateAtBBEntry;
179 StateTy getStartingStateAtBB(const BinaryBasicBlock &BB) { in getStartingStateAtBB()
[all …]
H A DInstrumentation.h77 std::vector<std::pair<BinaryBasicBlock *, BinaryBasicBlock *>>;
86 BinaryBasicBlock::iterator &Iter,
88 BinaryBasicBlock &FromBB, uint32_t From,
89 BinaryFunction &ToFunc, BinaryBasicBlock *TargetBB,
94 void instrumentLeafNode(BinaryBasicBlock &BB, BinaryBasicBlock::iterator Iter,
98 void instrumentIndirectTarget(BinaryBasicBlock &BB,
99 BinaryBasicBlock::iterator &Iter,
H A DIndirectCallPromotion.h99 using BasicBlocksVector = std::vector<std::unique_ptr<BinaryBasicBlock>>;
178 std::vector<Callsite> getCallTargets(BinaryBasicBlock &BB,
181 size_t canPromoteCallsite(const BinaryBasicBlock &BB, const MCInst &Inst,
185 void printCallsiteInfo(const BinaryBasicBlock &BB, const MCInst &Inst,
189 JumpTableInfoType maybeGetHotJumpTableTargets(BinaryBasicBlock &BB,
195 size_t &N, BinaryBasicBlock &BB,
199 MethodInfoType maybeGetVtableSyms(BinaryBasicBlock &BB, MCInst &Inst,
202 std::vector<std::unique_ptr<BinaryBasicBlock>>
203 rewriteCall(BinaryBasicBlock &IndCallBlock, const MCInst &CallInst,
207 BinaryBasicBlock *fixCFG(BinaryBasicBlock &IndCallBlock,
/llvm-project/bolt/lib/Passes/
H A DMCF.cpp69 DenseMap<std::pair<const BinaryBasicBlock *, const BinaryBasicBlock *>,
73 void updateEdgeWeight(EdgeWeightMap &EdgeWeights, const BinaryBasicBlock *A,
74 const BinaryBasicBlock *B, double Weight);
77 void updateEdgeWeight<BinaryBasicBlock *>(EdgeWeightMap &EdgeWeights, in updateEdgeWeight()
78 const BinaryBasicBlock *A, in updateEdgeWeight()
79 const BinaryBasicBlock *B, in updateEdgeWeight()
85 void updateEdgeWeight<Inverse<BinaryBasicBlock *>>(EdgeWeightMap &EdgeWeights, in updateEdgeWeight()
86 const BinaryBasicBlock *A, in updateEdgeWeight()
87 const BinaryBasicBlock *B, in updateEdgeWeight()
93 void computeEdgeWeights(BinaryBasicBlock *BB, EdgeWeightMap &EdgeWeights) { in computeEdgeWeights()
[all …]
H A DTailDuplication.cpp124 bool TailDuplication::isOverwrittenBeforeUsed(BinaryBasicBlock &StartBB, in isOverwrittenBeforeUsed()
128 std::queue<BinaryBasicBlock *> Q; in isOverwrittenBeforeUsed()
130 BinaryBasicBlock *NextBB = *Itr; in isOverwrittenBeforeUsed()
133 std::set<BinaryBasicBlock *> Visited; in isOverwrittenBeforeUsed()
137 BinaryBasicBlock *CurrBB = Q.front(); in isOverwrittenBeforeUsed()
155 BinaryBasicBlock *NextBB = *Itr; in isOverwrittenBeforeUsed()
163 BinaryBasicBlock &OriginalBB, in constantAndCopyPropagate()
164 std::vector<BinaryBasicBlock *> &BlocksToPropagate) { in constantAndCopyPropagate()
196 for (BinaryBasicBlock *NextBB : BlocksToPropagate) { in constantAndCopyPropagate()
255 bool TailDuplication::isInCacheLine(const BinaryBasicBlock &BB, in isInCacheLine()
[all …]
H A DSplitFunctions.cpp14 #include "bolt/Core/BinaryBasicBlock.h"
130 return llvm::all_of(BF.blocks(), [](const BinaryBasicBlock &BB) { in hasFullProfile()
131 return BB.getExecutionCount() != BinaryBasicBlock::COUNT_NO_PROFILE; in hasFullProfile()
136 return llvm::all_of(BF.blocks(), [](const BinaryBasicBlock &BB) { in allBlocksCold()
149 for (BinaryBasicBlock *const BB : llvm::make_range(Start, End)) { in fragment()
189 BinaryBasicBlock *BB = BlockOrder[Index]; in fragment()
217 DenseMap<const BinaryBasicBlock *, size_t> GlobalIndices;
218 DenseMap<const BinaryBasicBlock *, size_t> BBSizes;
219 DenseMap<const BinaryBasicBlock *, size_t> BBOffsets;
222 std::vector<SmallVector<const BinaryBasicBlock *,
[all...]
H A DCMOVConversion.cpp64 bool isIfThenSubgraph(const BinaryBasicBlock &LHS, in isIfThenSubgraph()
65 const BinaryBasicBlock &RHS) { in isIfThenSubgraph()
70 BinaryBasicBlock *Predecessor = *RHS.pred_begin(); in isIfThenSubgraph()
81 bool matchCFGSubgraph(BinaryBasicBlock &BB, BinaryBasicBlock *&ConditionalSucc, in matchCFGSubgraph()
82 BinaryBasicBlock *&UnconditionalSucc, in matchCFGSubgraph()
84 BinaryBasicBlock *TakenSucc = BB.getConditionalSuccessor(true); in matchCFGSubgraph()
85 BinaryBasicBlock *FallthroughSucc = BB.getConditionalSuccessor(false); in matchCFGSubgraph()
100 bool canConvertInstructions(const BinaryContext &BC, const BinaryBasicBlock &BB, in canConvertInstructions()
129 void convertMoves(const BinaryContext &BC, BinaryBasicBlock &BB, unsigned CC) { in convertMoves()
148 calculateMispredictionRate(const BinaryBasicBlock &BB) { in calculateMispredictionRate()
[all …]
H A DLongJmp.cpp44 static void relaxStubToShortJmp(BinaryBasicBlock &StubBB, const MCSymbol *Tgt) { in relaxStubToLongJmp()
52 static void relaxStubToLongJmp(BinaryBasicBlock &StubBB, const MCSymbol *Tgt) { in getBBAtHotColdSplitPoint()
60 static BinaryBasicBlock *getBBAtHotColdSplitPoint(BinaryFunction &Func) { in getBBAtHotColdSplitPoint()
80 std::pair<std::unique_ptr<BinaryBasicBlock>, MCSymbol *> in createNewStub()
81 LongJmpPass::createNewStub(BinaryBasicBlock &SourceBB, const MCSymbol *TgtSym, in createNewStub()
87 std::unique_ptr<BinaryBasicBlock> StubBB = Func.createBasicBlock(StubSym); in createNewStub()
101 [&](const std::pair<uint64_t, BinaryBasicBlock *> &LHS, in createNewStub()
102 const std::pair<uint64_t, BinaryBasicBlock *> &RHS) { in createNewStub()
125 BinaryBasicBlock *LongJmpPass::lookupStubFromGroup( in lookupStubFromGroup()
137 [&](const std::pair<uint64_t, BinaryBasicBlock *> in lookupStubFromGroup()
[all...]
H A DValidateInternalCalls.cpp14 #include "bolt/Core/BinaryBasicBlock.h"
30 BinaryBasicBlock *getInternalCallTarget(BinaryFunction &Function, in getInternalCallTarget()
52 std::pair<int, int> getStartingStateAtBB(const BinaryBasicBlock &BB) { in getStartingStateAtBB()
73 BinaryBasicBlock *Target = getInternalCallTarget(Func, Point); in computeNext()
97 std::queue<BinaryBasicBlock *> Work; in fixCFGForPIC()
98 for (BinaryBasicBlock &BB : Function) in fixCFGForPIC()
102 BinaryBasicBlock &BB = *Work.front(); in fixCFGForPIC()
106 const BinaryBasicBlock::iterator InternalCall = in fixCFGForPIC()
115 BinaryBasicBlock *Target = getInternalCallTarget(Function, *InternalCall); in fixCFGForPIC()
119 std::unique_ptr<BinaryBasicBlock> NewB in fixCFGForPIC()
[all...]
H A DThreeWayBranch.cpp22 for (const BinaryBasicBlock &BB : Function) in shouldRunOnFunction()
36 for (BinaryBasicBlock *BB : BlockLayout) { in runOnFunction()
39 BB->getExecutionCount() == BinaryBasicBlock::COUNT_NO_PROFILE) in runOnFunction()
48 BinaryBasicBlock *FalseSucc = BB->getConditionalSuccessor(false); in runOnFunction()
49 BinaryBasicBlock *TrueSucc = BB->getConditionalSuccessor(true); in runOnFunction()
58 BinaryBasicBlock *SecondBranch = FalseSucc; in runOnFunction()
59 BinaryBasicBlock *FirstEndpoint = TrueSucc; in runOnFunction()
65 BinaryBasicBlock *SecondEndpoint = in runOnFunction()
67 BinaryBasicBlock *ThirdEndpoint = in runOnFunction()
99 std::vector<std::pair<BinaryBasicBlock *, unsigned>> Blocks; in runOnFunction()
[all …]
H A DReorderAlgorithm.cpp79 for (const BinaryBasicBlock *BB : Clusters[I]) { in computeClusterAverageFrequency()
98 for (const BinaryBasicBlock *BB : Clusters[I]) { in printClusters()
117 HashPair<const BinaryBasicBlock *, const BinaryBasicBlock *> Hasher; in operator ()()
143 for (BinaryBasicBlock *BB : BF.getLayout().blocks()) { in clusterBasicBlocks()
147 std::vector<BinaryBasicBlock *> &Cluster = Clusters.back(); in clusterBasicBlocks()
152 for (const BinaryBasicBlock *I : BB->successors()) { in clusterBasicBlocks()
153 assert(BI->Count != BinaryBasicBlock::COUNT_NO_PROFILE && in clusterBasicBlocks()
167 const BinaryBasicBlock *SrcBB = E.Src; in clusterBasicBlocks()
168 const BinaryBasicBlock *DstBB = E.Dst; in clusterBasicBlocks()
190 std::vector<BinaryBasicBlock *> &ClusterA = Clusters[I]; in clusterBasicBlocks()
[all …]
H A DCacheMetrics.cpp34 std::unordered_map<BinaryBasicBlock *, uint64_t> &BBAddr, in extractBasicBlockInfo() argument
35 std::unordered_map<BinaryBasicBlock *, uint64_t> &BBSize) { in extractBasicBlockInfo()
39 for (BinaryBasicBlock &BB : *BF) { in extractBasicBlockInfo()
58 const std::unordered_map<BinaryBasicBlock *, uint64_t> &BBAddr, in calcTSPScore() argument
59 const std::unordered_map<BinaryBasicBlock *, uint64_t> &BBSize) { in calcTSPScore()
65 for (BinaryBasicBlock *SrcBB : BF->getLayout().blocks()) { in calcTSPScore()
67 for (BinaryBasicBlock *DstBB : SrcBB->successors()) { in calcTSPScore()
68 if (SrcBB != DstBB && BI->Count != BinaryBasicBlock::COUNT_NO_PROFILE) { in calcTSPScore()
103 for (const BinaryBasicBlock *BB : SrcFunction->getLayout().blocks()) { in extractFunctionCalls()
144 const std::unordered_map<BinaryBasicBlock *, uint64_t> &BBAddr, in expectedCacheHitRatio() argument
[all …]
H A DInliner.cpp167 for (const BinaryBasicBlock &BB : BF) { in getInliningInfo()
234 std::pair<BinaryBasicBlock *, BinaryBasicBlock::iterator>
235 Inliner::inlineCall(BinaryBasicBlock &CallerBB, in inlineCall()
236 BinaryBasicBlock::iterator CallInst, in inlineCall()
257 BinaryBasicBlock *FirstInlinedBB = &CallerBB; in inlineCall()
266 BinaryBasicBlock *NextBB = nullptr; in inlineCall()
289 std::unordered_map<const BinaryBasicBlock *, BinaryBasicBlock *> InlinedBBMap; in inlineCall()
291 for (const BinaryBasicBlock in inlineCall()
[all...]
H A DLoopInversionPass.cpp38 for (BinaryBasicBlock *BB : BF.getLayout().blocks()) { in runOnFunction()
42 BinaryBasicBlock *SuccBB = *BB->succ_begin(); in runOnFunction()
43 BinaryBasicBlock *PredBB = *BB->pred_begin(); in runOnFunction()
50 BinaryBasicBlock *SecondSucc = nullptr; in runOnFunction()
51 for (BinaryBasicBlock *Succ : SuccBB->successors()) { in runOnFunction()
78 llvm::sort(NewOrder, [&](BinaryBasicBlock *BB1, BinaryBasicBlock *BB2) { in runOnFunction()
H A DBinaryPasses.cpp257 for (BinaryBasicBlock &BB : BF) { in runOnFunction()
277 BinaryBasicBlock *Successor = BB.getSuccessor(); in runOnFunction()
282 BinaryBasicBlock *Predecessor = *BB.pred_begin(); in runOnFunction()
289 BinaryBasicBlock::BinaryBranchInfo &BI = Predecessor->getBranchInfo(BB); in runOnFunction()
309 for (BinaryBasicBlock &BB : BF) in runOnFunctions()
344 for (BinaryBasicBlock &BB : Function) { in runOnFunction()
408 SmallVector<const BinaryBasicBlock *, 0> OldBlockOrder; in runOnFunctions()
630 for (BinaryBasicBlock *const BB : FF) {
697 for (BinaryBasicBlock &BB : Function) { in fixDoubleJumps()
698 auto checkAndPatch = [&](BinaryBasicBlock *Pre in fixDoubleJumps()
[all...]
/llvm-project/bolt/include/bolt/Core/
H A DBinaryBasicBlock.h1 //===- bolt/Core/BinaryBasicBlock.h - Low-level basic block -----*- C++ -*-===//
38 class BinaryBasicBlock {
71 using EdgeListType = SmallVector<BinaryBasicBlock *, 0>;
78 using ExceptionListType = SmallVector<BinaryBasicBlock *, 0>;
142 BinaryBasicBlock() = delete;
143 BinaryBasicBlock(const BinaryBasicBlock &) = delete;
144 BinaryBasicBlock(const BinaryBasicBlock &&) = delete;
145 BinaryBasicBlock
147 explicit BinaryBasicBlock(BinaryFunction *Function, MCSymbol *Label) BinaryBasicBlock() function
[all...]
H A DFunctionLayout.h33 class BinaryBasicBlock; variable
70 using BasicBlockListType = SmallVector<BinaryBasicBlock *, 0>;
126 BinaryBasicBlock *front() const;
127 BinaryBasicBlock *back() const;
143 using BasicBlockListType = SmallVector<BinaryBasicBlock *, 0>;
202 const FunctionFragment &findFragment(const BinaryBasicBlock *BB) const;
205 void addBasicBlock(BinaryBasicBlock *BB);
209 void insertBasicBlocks(const BinaryBasicBlock *InsertAfter,
210 ArrayRef<BinaryBasicBlock *> NewBlocks);
214 void eraseBasicBlocks(const DenseSet<const BinaryBasicBlock *> ToEras
[all...]
H A DBinaryLoop.h23 class BinaryBasicBlock; variable
25 class BinaryLoop : public LoopBase<BinaryBasicBlock, BinaryLoop> {
27 BinaryLoop() : LoopBase<BinaryBasicBlock, BinaryLoop>() {} in BinaryLoop()
41 friend class LoopInfoBase<BinaryBasicBlock, BinaryLoop>;
42 explicit BinaryLoop(BinaryBasicBlock *BB) in BinaryLoop()
43 : LoopBase<BinaryBasicBlock, BinaryLoop>(BB) {} in BinaryLoop()
46 class BinaryLoopInfo : public LoopInfoBase<BinaryBasicBlock, BinaryLoop> {
H A DBinaryFunction.h28 #include "bolt/Core/BinaryBasicBlock.h"
200 BinaryBasicBlock::COUNT_NO_PROFILE;
205 using BasicBlockOrderType = SmallVector<BinaryBasicBlock *, 0>;
435 unsigned getIndex(const BinaryBasicBlock *BB) const { in clearList()
468 DenseMap<const MCSymbol *, BinaryBasicBlock *> LabelToBB;
566 using BasicBlockListType = SmallVector<BinaryBasicBlock *, 0>; in operator()
575 using BasicBlockOffset = std::pair<uint64_t, BinaryBasicBlock *>;
704 BinaryBasicBlock *addBasicBlockAt(uint64_t Offset, MCSymbol *Label) { in addBasicBlockAt()
711 BinaryBasicBlock *BB = BasicBlocks.back();
730 for (BinaryBasicBlock *B in releaseCFG()
[all...]

1234