mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-11 04:06:20 +00:00
[CodeGen] Compute DT/LI lazily in SafeStackLegacyPass. NFC.
We currently require SCEV, which requires DT/LI. Those are expensive to compute, but the pass only runs for functions that have the safestack attribute. Compute DT/LI to build SCEV lazily, only when the pass is actually going to transform the function. Differential Revision: https://reviews.llvm.org/D31302 llvm-svn: 302610
This commit is contained in:
parent
00d6822278
commit
8c358e3016
@ -774,7 +774,8 @@ public:
|
||||
SafeStackLegacyPass() : SafeStackLegacyPass(nullptr) {}
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<ScalarEvolutionWrapperPass>();
|
||||
AU.addRequired<TargetLibraryInfoWrapperPass>();
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
}
|
||||
|
||||
bool runOnFunction(Function &F) override {
|
||||
@ -799,7 +800,19 @@ public:
|
||||
report_fatal_error("TargetLowering instance is required");
|
||||
|
||||
auto *DL = &F.getParent()->getDataLayout();
|
||||
auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
|
||||
auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
auto &ACT = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
|
||||
// Compute DT and LI only for functions that have the attribute.
|
||||
// This is only useful because the legacy pass manager doesn't let us
|
||||
// compute analyzes lazily.
|
||||
// In the backend pipeline, nothing preserves DT before SafeStack, so we
|
||||
// would otherwise always compute it wastefully, even if there is no
|
||||
// function with the safestack attribute.
|
||||
DominatorTree DT(F);
|
||||
LoopInfo LI(DT);
|
||||
|
||||
ScalarEvolution SE(F, TLI, ACT, DT, LI);
|
||||
|
||||
return SafeStack(F, *TL, *DL, SE).run();
|
||||
}
|
||||
|
@ -27,9 +27,6 @@
|
||||
; CHECK-NEXT: FunctionPass Manager
|
||||
; CHECK-NEXT: Dominator Tree Construction
|
||||
; CHECK-NEXT: Exception handling preparation
|
||||
; CHECK-NEXT: Dominator Tree Construction
|
||||
; CHECK-NEXT: Natural Loop Information
|
||||
; CHECK-NEXT: Scalar Evolution Analysis
|
||||
; CHECK-NEXT: Safe Stack instrumentation pass
|
||||
; CHECK-NEXT: Insert stack protectors
|
||||
; CHECK-NEXT: Module Verifier
|
||||
|
Loading…
x
Reference in New Issue
Block a user