[PATCH] D91327: [NewPM] Redesign of PreserveCFG Checker
Yevgeny Rouban via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 22 21:24:28 PST 2020
yrouban added inline comments.
================
Comment at: llvm/include/llvm/Passes/StandardInstrumentations.h:134
public:
static cl::opt<bool> VerifyPreservedCFG;
----------------
kuhar wrote:
> not necessary anymore
there can bee a need to disabled/enable (e.g. for some tests or for debugging).
================
Comment at: llvm/lib/Passes/StandardInstrumentations.cpp:759
+ CFG::printDiff(dbgs(), GraphBefore, GraphAfter);
+ report_fatal_error(Twine("CFG unexpectedly changed by ", Pass));
+ };
----------------
kuhar wrote:
> I think this will print with `errs()`. Would it make sense to flush `dbgs()` ahead of printing with `errs()`?
I believe this comment is true for all callsites of //report_fatal_error()//. If so it should be done inside.
================
Comment at: llvm/lib/Passes/StandardInstrumentations.cpp:771
+ *const_cast<Function *>(F)))
+ checkCFG(P, F->getName(), *Result, CFG(F, false /* TrackBBLifetime */));
else
----------------
skatkov wrote:
> why do you check before pass runs?
removed
================
Comment at: llvm/lib/Passes/StandardInstrumentations.cpp:778
[this](StringRef P, const PreservedAnalyses &PassPA) {
- auto Before = GraphStackBefore.pop_back_val();
- assert(Before.first == P &&
+ assert(PassStack.pop_back_val() == P &&
"Before and After callbacks must correspond");
----------------
skatkov wrote:
> you should not PassStack.pop_back_val() for product build?
PassStack is used only inside asserts
================
Comment at: llvm/lib/Passes/StandardInstrumentations.cpp:796
+ auto *F = any_cast<const Function *>(IR);
+ if (auto *GraphBefore = FAM.getCachedResult<PreservedCFGCheckerAnalysis>(
+ *const_cast<Function *>(F)))
----------------
to @skatkov
if //AfterPassCallback// is called before //AM.invalidate()// then we check CFG only if the condition (PassPA.allAnalysesInSetPreserved<CFGAnalyses>() || PassPA.allAnalysesInSetPreserved<AllAnalysesOn<Function>>()) holds.
if //AfterPassCallback// is called after //AM.invalidate()// then we check CFG only if the same condition holds and the PreservedCFGCheckerAnalysis is not invalidated. But it is invalidated according to the same condition.
All in all it does not matter if //AfterPassCallback// is called before or after //AM.invalidate()//.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91327/new/
https://reviews.llvm.org/D91327
More information about the cfe-commits
mailing list