/llvm-project/bolt/lib/Core/ |
H A D | BinaryBasicBlock.cpp | 25 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 D | BinaryFunctionProfile.cpp | 14 #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 D | FunctionLayout.cpp | 10 #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 D | BinaryFunction.cpp | 14 #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 D | TailDuplication.h | 85 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 D | LongJmp.h | 35 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 D | DataflowAnalysis.h | 44 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 D | Instrumentation.h | 77 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 D | IndirectCallPromotion.h | 99 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 D | MCF.cpp | 69 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 D | TailDuplication.cpp | 124 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 D | SplitFunctions.cpp | 14 #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 D | CMOVConversion.cpp | 64 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 D | LongJmp.cpp | 44 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 D | ValidateInternalCalls.cpp | 14 #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 D | ThreeWayBranch.cpp | 22 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 D | ReorderAlgorithm.cpp | 79 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 D | CacheMetrics.cpp | 34 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 D | Inliner.cpp | 167 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 D | LoopInversionPass.cpp | 38 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 D | BinaryPasses.cpp | 257 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 D | BinaryBasicBlock.h | 1 //===- 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 D | FunctionLayout.h | 33 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 D | BinaryLoop.h | 23 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 D | BinaryFunction.h | 28 #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...] |