[all-commits] [llvm/llvm-project] 19867d: [NewPM] Only invalidate modified functions' analys...
aeubanks via All-commits
all-commits at lists.llvm.org
Mon Nov 15 14:47:03 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 19867de9e79327207796a16c1c24ac5d2cafecf9
https://github.com/llvm/llvm-project/commit/19867de9e79327207796a16c1c24ac5d2cafecf9
Author: Arthur Eubanks <aeubanks at google.com>
Date: 2021-11-15 (Mon, 15 Nov 2021)
Changed paths:
M clang/test/CodeGen/thinlto-distributed-newpm.ll
M llvm/lib/Analysis/CGSCCPassManager.cpp
M llvm/lib/Passes/PassBuilderPipelines.cpp
M llvm/lib/Transforms/IPO/ArgumentPromotion.cpp
M llvm/lib/Transforms/IPO/FunctionAttrs.cpp
M llvm/lib/Transforms/IPO/Inliner.cpp
M llvm/test/Other/new-pm-defaults.ll
M llvm/test/Other/new-pm-eager-invalidate.ll
M llvm/test/Other/new-pm-lto-defaults.ll
M llvm/test/Other/new-pm-pgo-preinline.ll
M llvm/test/Other/new-pm-thinlto-defaults.ll
M llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
M llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
M llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
M llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
A llvm/test/Transforms/FunctionAttrs/invalidate.ll
A llvm/test/Transforms/Inline/analysis-invalidation.ll
M llvm/test/Transforms/Inline/cgscc-incremental-invalidate.ll
Log Message:
-----------
[NewPM] Only invalidate modified functions' analyses in CGSCC passes + turn on eagerly invalidate analyses
Previously, any change in any function in an SCC would cause all
analyses for all functions in the SCC to be invalidated. With this
change, we now manually invalidate analyses for functions we modify,
then let the pass manager know that all function analyses should be
preserved since we've already handled function analysis invalidation.
So far this only touches the inliner, argpromotion, function-attrs, and
updateCGAndAnalysisManager(), since they are the most used.
This is part of an effort to investigate running the function
simplification pipeline less on functions we visit multiple times in the
inliner pipeline.
However, this causes major memory regressions especially on larger IR.
To counteract this, turn on the option to eagerly invalidate function
analyses. This invalidates analyses on functions immediately after
they're processed in a module or scc to function adaptor for specific
parts of the pipeline.
Within an SCC, if a pass only modifies one function, other functions in
the SCC do not have their analyses invalidated, so in later function
passes in the SCC pass manager the analyses may still be cached. It is
only after the function passes that the eager invalidation takes effect.
For the default pipelines this makes sense because the inliner pipeline
runs the function simplification pipeline after all other SCC passes
(except CoroSplit which doesn't request any analyses).
Overall this has mostly positive effects on compile time and positive effects on memory usage.
https://llvm-compile-time-tracker.com/compare.php?from=7f627596977624730f9298a1b69883af1555765e&to=39e824e0d3ca8a517502f13032dfa67304841c90&stat=instructions
https://llvm-compile-time-tracker.com/compare.php?from=7f627596977624730f9298a1b69883af1555765e&to=39e824e0d3ca8a517502f13032dfa67304841c90&stat=max-rss
D113196 shows that we slightly regressed compile times in exchange for
some memory improvements when turning on eager invalidation. D100917
shows that we slightly improved compile times in exchange for major
memory regressions in some cases when invalidating less in SCC passes.
Turning these on at the same time keeps the memory improvements while
keeping compile times neutral/slightly positive.
Reviewed By: asbirlea, nikic
Differential Revision: https://reviews.llvm.org/D113304
More information about the All-commits
mailing list