llvm-project/llvm/lib/Analysis
Teresa Johnson cb397461e1 [ThinLTO] Split NotEligibleToImport into legality and inlinability flags
Summary:
The NotEligibleToImport flag on the GlobalValueSummary was set if it
isn't legal to import (e.g. because it references unpromotable locals)
and when it can't be inlined (in which case importing is pointless).

I split out the inlinable piece into a separate flag on the
FunctionSummary (doesn't make sense for aliases or global variables),
because in the future we may want to import for reasons other than
inlining.

Reviewers: davidxl

Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, arphaman, llvm-commits

Differential Revision: https://reviews.llvm.org/D53345

llvm-svn: 346261
2018-11-06 19:41:35 +00:00
..
AliasAnalysis.cpp [AA] Remove a needless variable [NFC] 2018-08-22 19:50:45 +00:00
AliasAnalysisEvaluator.cpp [MSSA] Print more optimization information 2018-06-14 19:55:53 +00:00
AliasAnalysisSummary.cpp
AliasAnalysisSummary.h Revert r332657: "[AA] cfl-anders-aa with field sensitivity" 2018-05-17 21:56:39 +00:00
AliasSetTracker.cpp [AliasSetTracker] Misc cleanup (NFCI) 2018-11-01 23:37:51 +00:00
Analysis.cpp [NFC] Rename the DivergenceAnalysis to LegacyDivergenceAnalysis 2018-08-30 14:21:36 +00:00
AssumptionCache.cpp [Analysis, Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-09-01 21:37:29 +00:00
BasicAliasAnalysis.cpp Replace most users of UnknownSize with LocationSize::unknown(); NFC 2018-10-10 21:28:44 +00:00
BlockFrequencyInfo.cpp Revert r320104: infinite loop profiling bug fix 2017-12-08 19:38:07 +00:00
BlockFrequencyInfoImpl.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
BranchProbabilityInfo.cpp [TI removal] Make variables declared as `TerminatorInst` and initialized 2018-10-15 10:04:59 +00:00
CFG.cpp [TI removal] Make variables declared as `TerminatorInst` and initialized 2018-10-15 10:04:59 +00:00
CFGPrinter.cpp [CFG Printer] Add support for writing the dot files with a custom 2018-10-09 04:30:23 +00:00
CFLAndersAliasAnalysis.cpp Replace most users of UnknownSize with LocationSize::unknown(); NFC 2018-10-10 21:28:44 +00:00
CFLGraph.h [IR] Replace `isa<TerminatorInst>` with `isTerminator()`. 2018-08-26 09:51:22 +00:00
CFLSteensAliasAnalysis.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
CGSCCPassManager.cpp [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
CMakeLists.txt [DA] DivergenceAnalysis for unstructured, reducible CFGs 2018-10-18 09:38:44 +00:00
CallGraph.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
CallGraphSCCPass.cpp [New PM][PassInstrumentation] IR printing support for New Pass Manager 2018-09-24 16:08:15 +00:00
CallPrinter.cpp Revert "Extend CFGPrinter and CallPrinter with Heat Colors" 2018-06-29 17:48:58 +00:00
CaptureTracking.cpp Fix aliasing of launder.invariant.group 2018-05-23 09:16:44 +00:00
CmpInstAnalysis.cpp [InstCombine][InstSimplify] Teach decomposeBitTestICmp to look through truncate instructions 2017-09-01 21:27:34 +00:00
CodeMetrics.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
ConstantFolding.cpp [ConstantFolding] Constant fold minimum and maximum intrinsics 2018-10-19 18:15:32 +00:00
CostModel.cpp Remove redundant includes from lib/Analysis. 2017-12-13 21:30:41 +00:00
Delinearization.cpp [NFC] Consolidate six getPointerOperand() utility functions into one place 2018-03-09 21:05:58 +00:00
DemandedBits.cpp [IR] Replace `isa<TerminatorInst>` with `isTerminator()`. 2018-08-26 09:51:22 +00:00
DependenceAnalysis.cpp Replace most users of UnknownSize with LocationSize::unknown(); NFC 2018-10-10 21:28:44 +00:00
DivergenceAnalysis.cpp [TI removal] Switch some newly added code over to use `Instruction` 2018-10-19 00:22:10 +00:00
DomPrinter.cpp Revert "Extend CFGPrinter and CallPrinter with Heat Colors" 2018-06-29 17:48:58 +00:00
DominanceFrontier.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
EHPersonalities.cpp [TI removal] Make variables declared as `TerminatorInst` and initialized 2018-10-15 10:04:59 +00:00
GlobalsModRef.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
GuardUtils.cpp Re-enable "[NFC] Unify guards detection" 2018-08-30 03:39:16 +00:00
IVDescriptors.cpp Revert r344172: [LV] Add a new reduction pattern match 2018-10-27 22:13:43 +00:00
IVUsers.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
IndirectCallPromotionAnalysis.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
InlineCost.cpp [Inliner] Penalise inlining of calls with loops at Oz 2018-11-05 14:54:34 +00:00
InstCount.cpp
InstructionPrecedenceTracking.cpp [NFC] Rename variable 2018-09-11 05:10:01 +00:00
InstructionSimplify.cpp [InstSimplify] fold select (fcmp X, Y), X, Y 2018-11-05 21:51:39 +00:00
Interval.cpp
IntervalPartition.cpp
IteratedDominanceFrontier.cpp [IDF] Teach Iterated Dominance Frontier to use a snapshot CFG based on a GraphDiff. 2018-08-17 17:39:15 +00:00
LLVMBuild.txt
LazyBlockFrequencyInfo.cpp Require DominatorTree when requiring/preserving LoopInfo in the old pass manager 2018-05-17 09:05:40 +00:00
LazyBranchProbabilityInfo.cpp Require DominatorTree when requiring/preserving LoopInfo in the old pass manager 2018-05-17 09:05:40 +00:00
LazyCallGraph.cpp ADT/STLExtras: Introduce llvm::empty; NFC 2018-10-31 00:23:23 +00:00
LazyValueInfo.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
LegacyDivergenceAnalysis.cpp [TI removal] Switch an analysis to just use Instruction. 2018-10-18 00:36:15 +00:00
Lint.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Loads.cpp Fix aliasing of launder.invariant.group 2018-05-23 09:16:44 +00:00
LoopAccessAnalysis.cpp [LV] Teach vectorizer about variant value store into uniform address 2018-10-16 15:46:26 +00:00
LoopAnalysisManager.cpp [LoopPassManager] MemorySSA should be preserved when enabled. 2018-09-06 20:54:24 +00:00
LoopInfo.cpp [TI removal] Make variables declared as `TerminatorInst` and initialized 2018-10-15 10:04:59 +00:00
LoopPass.cpp Output per-function size-info remarks 2018-09-06 21:19:54 +00:00
LoopUnrollAnalyzer.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
MemDepPrinter.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
MemDerefPrinter.cpp Remove redundant includes from lib/Analysis. 2017-12-13 21:30:41 +00:00
MemoryBuiltins.cpp Reverting r340807. 2018-08-30 18:37:18 +00:00
MemoryDependenceAnalysis.cpp [Analysis] Make LocationSizes carry an 'imprecise' bit 2018-10-10 06:39:40 +00:00
MemoryLocation.cpp Replace most users of UnknownSize with LocationSize::unknown(); NFC 2018-10-10 21:28:44 +00:00
MemorySSA.cpp [cxx2a] Fix warning triggered by r343285 2018-09-29 02:17:12 +00:00
MemorySSAUpdater.cpp [TI removal] Make variables declared as `TerminatorInst` and initialized 2018-10-15 10:04:59 +00:00
ModuleDebugInfoPrinter.cpp Remove redundant includes from lib/Analysis. 2017-12-13 21:30:41 +00:00
ModuleSummaryAnalysis.cpp [ThinLTO] Split NotEligibleToImport into legality and inlinability flags 2018-11-06 19:41:35 +00:00
MustExecute.cpp [NFC] Turn collectTransitivePredecessors into a static function 2018-11-06 09:07:03 +00:00
ObjCARCAliasAnalysis.cpp [ModRefInfo] Make enum ModRefInfo an enum class [NFC]. 2017-12-07 22:41:34 +00:00
ObjCARCAnalysisUtils.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
ObjCARCInstKind.cpp [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
OptimizationRemarkEmitter.cpp Remove redundant includes from lib/Analysis. 2017-12-13 21:30:41 +00:00
OrderedBasicBlock.cpp [NFC] Sanitizing asserts for OrderedBasicBlock 2018-09-11 08:46:19 +00:00
OrderedInstructions.cpp [NFC] Move OrderedInstructions and InstructionPrecedenceTracking to Analysis 2018-08-30 04:49:03 +00:00
PHITransAddr.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
PhiValues.cpp [PhiValues] Use callback value handles to invalidate deleted values 2018-08-24 15:48:30 +00:00
PostDominators.cpp [Dominators] Add PDT constructor from Function 2018-05-23 17:29:21 +00:00
ProfileSummaryInfo.cpp [ProfileSummary] Add options to override hot and cold count thresholds. 2018-11-02 17:39:31 +00:00
PtrUseVisitor.cpp [Analysis] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-08-18 23:51:26 +00:00
README.txt
RegionInfo.cpp Test commit, fix a minor typo. 2018-07-22 20:04:42 +00:00
RegionPass.cpp [NFC][PassTiming] factor out generic PassTimingInfo 2018-08-28 21:06:51 +00:00
RegionPrinter.cpp Revert "Extend CFGPrinter and CallPrinter with Heat Colors" 2018-06-29 17:48:58 +00:00
ScalarEvolution.cpp [SCEV] Avoid redundant computations when doing AddRec merge 2018-11-01 06:18:27 +00:00
ScalarEvolutionAliasAnalysis.cpp Make LocationSize a proper Optional type; NFC 2018-10-09 03:18:56 +00:00
ScalarEvolutionExpander.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
ScalarEvolutionNormalization.cpp
ScopedNoAliasAA.cpp [ModRefInfo] Make enum ModRefInfo an enum class [NFC]. 2017-12-07 22:41:34 +00:00
StratifiedSets.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
SyncDependenceAnalysis.cpp [TI removal] Switch some newly added code over to use `Instruction` 2018-10-19 00:22:10 +00:00
SyntheticCountsUtils.cpp Remove CallGraphTraits and use equivalent methods in GraphTraits 2018-02-01 19:40:35 +00:00
TargetLibraryInfo.cpp Disable calls to *_finite and other glibc-only functions on Musl. 2018-11-06 18:23:32 +00:00
TargetTransformInfo.cpp [LV] Support vectorization of interleave-groups that require an epilog under 2018-10-31 09:57:56 +00:00
Trace.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
TypeBasedAliasAnalysis.cpp Fix more spelling mistakes in comments of LLVM Analysis passes 2018-03-02 18:57:02 +00:00
TypeMetadataUtils.cpp [WPD] Fix incorrect devirtualization after indirect call promotion 2018-09-27 14:55:32 +00:00
ValueLattice.cpp [LVI] Move LVILatticeVal class to separate header file (NFC). 2017-09-28 11:09:22 +00:00
ValueLatticeUtils.cpp [IPSCCP] Move common functions to ValueLatticeUtils (NFC) 2017-10-13 17:53:44 +00:00
ValueTracking.cpp [ValueTracking] determine sign of 0.0 from select when matching min/max FP 2018-11-04 14:28:48 +00:00
VectorUtils.cpp [LV] Support vectorization of interleave-groups that require an epilog under 2018-10-31 09:57:56 +00:00

README.txt

Analysis Opportunities:

//===---------------------------------------------------------------------===//

In test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll, the
ScalarEvolution expression for %r is this:

  {1,+,3,+,2}<loop>

Outside the loop, this could be evaluated simply as (%n * %n), however
ScalarEvolution currently evaluates it as

  (-2 + (2 * (trunc i65 (((zext i64 (-2 + %n) to i65) * (zext i64 (-1 + %n) to i65)) /u 2) to i64)) + (3 * %n))

In addition to being much more complicated, it involves i65 arithmetic,
which is very inefficient when expanded into code.

//===---------------------------------------------------------------------===//

In formatValue in test/CodeGen/X86/lsr-delayed-fold.ll,

ScalarEvolution is forming this expression:

((trunc i64 (-1 * %arg5) to i32) + (trunc i64 %arg5 to i32) + (-1 * (trunc i64 undef to i32)))

This could be folded to

(-1 * (trunc i64 undef to i32))

//===---------------------------------------------------------------------===//