Scalar Optimizations
lib/Optimization/Scalar/ contains scalar optimization passes packaged in
the CanaryOptimizationScalar static library.
Headers: include/Optimization/Scalar/
Implementation: lib/Optimization/Scalar/
Available passes
AggressiveInlineris a legacyModulePassregistered asainline.DSEis Lotus’ LLVM-14-derived dead-store elimination implementation.GVNis Lotus’ LLVM-14-derived global value numbering pass.LICMis Lotus’ LLVM-14-derived loop-invariant code motion pass.
AggressiveInliner
Files: include/Optimization/Scalar/AggressiveInliner.h,
lib/Optimization/Scalar/AggressiveInliner.cpp
This pass walks every function in the module and tries to inline each direct
call site unless the callee name appears in -ainline-noinline.
Registration:
ainlineFactory:
llvm::createAggressiveInlinerPass()Useful option:
-ainline-noinline=foo,bar
Use it when analysis precision benefits from collapsing call boundaries and the resulting code-size increase is acceptable.
Dead Store Elimination
Files: include/Optimization/Scalar/DeadStoreElimination.h,
lib/Optimization/Scalar/DeadStoreElimination.cpp
Lotus ships LLVM’s dead-store elimination implementation for LLVM 14. The
legacy pass is registered as dse, and the header also exposes the new pass
manager interface llvm::DSEPass.
Legacy factory:
llvm::createDeadStoreEliminationPass()Dependencies: alias analysis, dominator tree, post-dominator tree, MemorySSA, memory dependence, target library info, loop info
Use it to remove stores that are overwritten or otherwise proven dead before a read.
GVN
Files: include/Optimization/Scalar/GVN.h,
lib/Optimization/Scalar/GVN.cpp
This is Lotus’ copy of LLVM 14 global value numbering. It eliminates fully redundant expressions, performs dead-load elimination, and optionally enables partial redundancy elimination.
Legacy registration:
gvnLegacy factory:
llvm::createGVNPass(bool NoMemDepAnalysis = false)New PM entry:
llvm::GVNPassTunable options:
-enable-pre,-enable-load-pre,-enable-load-in-loop-pre,-enable-gvn-memdep
Use it when common-subexpression elimination and load simplification are useful before analysis or code generation.
LICM
Files: include/Optimization/Scalar/LICM.h,
lib/Optimization/Scalar/LICM.cpp
Lotus ships LLVM 14 LICM for hoisting and sinking loop-invariant code and for promoting must-alias loop memory to SSA values when safe.
Legacy registration:
licmLegacy factories:
llvm::createLICMPass()and the parameterizedllvm::createLICMPass(unsigned, unsigned, bool)New PM entries:
llvm::LICMPassandllvm::LNICMPassRelevant options:
-disable-licm-promotion,-licm-control-flow-hoisting,-licm-mssa-optimization-cap,-licm-mssa-no-acc-for-promotion-cap
LICM is especially useful when evaluating alias-analysis precision because its ability to hoist and promote memory operations depends directly on alias and MemorySSA information.
Notes
AggressiveInlineris Lotus-specific and intentionally simple.DSE,GVN, andLICMare derived from LLVM 14 and kept in-tree so Lotus tools can depend on stable pass behavior across the framework.