Skip to content

Commit

Permalink
[AssumeBundleBuilder] Fix PreservedAnalyses reporting
Browse files Browse the repository at this point in the history
These weren't properly reporting changes.
  • Loading branch information
aeubanks committed Mar 14, 2023
1 parent 62fbb4c commit f8bd0be
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
3 changes: 2 additions & 1 deletion llvm/include/llvm/Transforms/Utils/AssumeBundleBuilder.h
Expand Up @@ -40,7 +40,8 @@ AssumeInst *buildAssumeFromInst(Instruction *I);
/// become silently be invalid.
/// The DominatorTree can optionally be provided to enable cross-block
/// reasoning.
void salvageKnowledge(Instruction *I, AssumptionCache *AC = nullptr,
/// This returns if a change was made.
bool salvageKnowledge(Instruction *I, AssumptionCache *AC = nullptr,
DominatorTree *DT = nullptr);

/// Build and return a new assume created from the provided knowledge
Expand Down
25 changes: 18 additions & 7 deletions llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
Expand Up @@ -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 *
Expand Down Expand Up @@ -563,9 +566,12 @@ 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();
if (!simplifyAssumes(F, &AM.getResult<AssumptionAnalysis>(F),
AM.getCachedResult<DominatorTreeAnalysis>(F)))
return PreservedAnalyses::all();
PreservedAnalyses PA;
PA.preserveSet<CFGAnalyses>();
return PA;
}

namespace {
Expand Down Expand Up @@ -611,9 +617,14 @@ 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 {
Expand Down

0 comments on commit f8bd0be

Please sign in to comment.