diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp index d17c399ba798..45cf98e65a5a 100644 --- a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp +++ b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp @@ -290,17 +290,20 @@ AssumeInst *llvm::buildAssumeFromInst(Instruction *I) { return Builder.build(); } -void llvm::salvageKnowledge(Instruction *I, AssumptionCache *AC, +bool llvm::salvageKnowledge(Instruction *I, AssumptionCache *AC, DominatorTree *DT) { if (!EnableKnowledgeRetention || I->isTerminator()) - return; + return false; + bool Changed = false; AssumeBuilderState Builder(I->getModule(), I, AC, DT); Builder.addInstruction(I); if (auto *Intr = Builder.build()) { Intr->insertBefore(I); + Changed = true; if (AC) AC->registerAssumption(Intr); } + return Changed; } AssumeInst * @@ -563,57 +566,26 @@ PreservedAnalyses AssumeSimplifyPass::run(Function &F, FunctionAnalysisManager &AM) { if (!EnableKnowledgeRetention) return PreservedAnalyses::all(); - simplifyAssumes(F, &AM.getResult<AssumptionAnalysis>(F), - AM.getCachedResult<DominatorTreeAnalysis>(F)); - return PreservedAnalyses::all(); -} - -namespace { -class AssumeSimplifyPassLegacyPass : public FunctionPass { -public: - static char ID; - - AssumeSimplifyPassLegacyPass() : FunctionPass(ID) { - initializeAssumeSimplifyPassLegacyPassPass( - *PassRegistry::getPassRegistry()); - } - bool runOnFunction(Function &F) override { - if (skipFunction(F) || !EnableKnowledgeRetention) - return false; - AssumptionCache &AC = - getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F); - DominatorTreeWrapperPass *DTWP = - getAnalysisIfAvailable<DominatorTreeWrapperPass>(); - return simplifyAssumes(F, &AC, DTWP ? &DTWP->getDomTree() : nullptr); - } - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired<AssumptionCacheTracker>(); - - AU.setPreservesAll(); - } -}; -} // namespace - -char AssumeSimplifyPassLegacyPass::ID = 0; - -INITIALIZE_PASS_BEGIN(AssumeSimplifyPassLegacyPass, "assume-simplify", - "Assume Simplify", false, false) -INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker) -INITIALIZE_PASS_END(AssumeSimplifyPassLegacyPass, "assume-simplify", - "Assume Simplify", false, false) - -FunctionPass *llvm::createAssumeSimplifyPass() { - return new AssumeSimplifyPassLegacyPass(); + if (!simplifyAssumes(F, &AM.getResult<AssumptionAnalysis>(F), + AM.getCachedResult<DominatorTreeAnalysis>(F))) + return PreservedAnalyses::all(); + PreservedAnalyses PA; + PA.preserveSet<CFGAnalyses>(); + return PA; } PreservedAnalyses AssumeBuilderPass::run(Function &F, FunctionAnalysisManager &AM) { AssumptionCache *AC = &AM.getResult<AssumptionAnalysis>(F); DominatorTree* DT = AM.getCachedResult<DominatorTreeAnalysis>(F); + bool Changed = false; for (Instruction &I : instructions(F)) - salvageKnowledge(&I, AC, DT); - return PreservedAnalyses::all(); + Changed |= salvageKnowledge(&I, AC, DT); + if (!Changed) + PreservedAnalyses::all(); + PreservedAnalyses PA; + PA.preserveSet<CFGAnalyses>(); + return PA; } namespace { |