llvm-project/llvm/lib/Analysis
Nikita Popov 322e2dbee1 [ValueTracking] Use ConstantRange overflow check for signed add; NFC
This is the same change as rL356290, but for signed add. It replaces
the existing ripple logic with the overflow logic in ConstantRange.

This is NFC in that it should return NeverOverflow in exactly the
same cases as the previous implementation. However, it does make
computeOverflowForSignedAdd() more powerful by now also determining
AlwaysOverflows conditions. As none of its consumers handle this yet,
this has no impact on optimization. Making use of AlwaysOverflows
in with.overflow folding will be handled as a followup.

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

llvm-svn: 356345
2019-03-17 21:25:26 +00:00
..
AliasAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AliasAnalysisEvaluator.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AliasAnalysisSummary.cpp Move CFLGraph and the AA summary code over to the new `CallBase` 2019-02-11 09:25:41 +00:00
AliasAnalysisSummary.h Move CFLGraph and the AA summary code over to the new `CallBase` 2019-02-11 09:25:41 +00:00
AliasSetTracker.cpp [LICM/MSSA] Add promotion to scalars by building an AliasSetTracker with MemorySSA. 2019-02-06 20:25:17 +00:00
Analysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AssumptionCache.cpp [CodeExtractor] Update function's assumption cache after extracting blocks from it 2019-02-08 06:55:18 +00:00
BasicAliasAnalysis.cpp [BasicAA] Cache nonEscapingLocalObjects for alias() calls. 2019-02-05 23:52:08 +00:00
BlockFrequencyInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
BlockFrequencyInfoImpl.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
BranchProbabilityInfo.cpp [BPI] Look through bitcasts in calcZeroHeuristic 2019-02-15 11:50:21 +00:00
CFG.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CFGPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CFLAndersAliasAnalysis.cpp [CFLAnders] Fix typo in comment; NFC 2019-03-08 19:28:55 +00:00
CFLGraph.h Move CFLGraph and the AA summary code over to the new `CallBase` 2019-02-11 09:25:41 +00:00
CFLSteensAliasAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CGSCCPassManager.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CMakeLists.txt Move DomTreeUpdater from IR to Analysis 2019-02-06 02:52:52 +00:00
CallGraph.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CallGraphSCCPass.cpp Fix IR/Analysis layering issue with OptBisect 2019-02-28 04:00:55 +00:00
CallPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CaptureTracking.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CmpInstAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CodeMetrics.cpp Remove `CallSite` from the CodeMetrics analysis, moving it to the new 2019-02-11 09:03:32 +00:00
ConstantFolding.cpp [CallSite removal] Migrate ConstantFolding APIs and implementation to 2019-02-11 07:51:44 +00:00
CostModel.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Delinearization.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DemandedBits.cpp [DemandedBits] Remove some redundancy in the work list 2019-03-03 14:50:01 +00:00
DependenceAnalysis.cpp [DA][NewPM] Handle transitive dependencies in the new-pm version of DA 2019-02-03 12:25:41 +00:00
DivergenceAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DomPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DomTreeUpdater.cpp [DTU] Refine the interface and logic of applyUpdates 2019-02-22 13:48:38 +00:00
DominanceFrontier.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
EHPersonalities.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
GlobalsModRef.cpp [NFC] fix trivial typos in comments 2019-02-05 08:30:48 +00:00
GuardUtils.cpp [NFC] Add function to parse widenable conditional branches 2019-01-22 11:21:32 +00:00
IVDescriptors.cpp Reland "Relax constraints for reduction vectorization" 2019-03-12 01:31:44 +00:00
IVUsers.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
IndirectCallPromotionAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
InlineCost.cpp Revert "[INLINER] allow inlining of address taken blocks" 2019-02-14 23:42:21 +00:00
InstCount.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
InstructionPrecedenceTracking.cpp Make widenable condition transparent for MemoryWriteTracking 2019-02-14 11:10:29 +00:00
InstructionSimplify.cpp [InstCombine] canonicalize funnel shift constant shift amount to be modulo bitwidth 2019-03-14 19:22:08 +00:00
Interval.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
IntervalPartition.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
IteratedDominanceFrontier.cpp [IDF] Delete a redundant J-edge test 2019-03-07 11:42:59 +00:00
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LazyBlockFrequencyInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LazyBranchProbabilityInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LazyCallGraph.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LazyValueInfo.cpp [NFC] fix trivial typos in comments 2019-02-05 08:30:48 +00:00
LegacyDivergenceAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Lint.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Loads.cpp [Analysis] Fix isSafeToLoadUnconditionally handling of volatile. 2019-01-24 21:31:13 +00:00
LoopAccessAnalysis.cpp [NFC] fix trivial typos in comments 2019-02-05 08:30:48 +00:00
LoopAnalysisManager.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LoopInfo.cpp Refactor setAlreadyUnrolled() and setAlreadyVectorized(). 2019-02-11 19:45:44 +00:00
LoopPass.cpp Fix IR/Analysis layering issue with OptBisect 2019-02-28 04:00:55 +00:00
LoopUnrollAnalyzer.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MemDepPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MemDerefPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MemoryBuiltins.cpp Add a 'dynamic' parameter to the objectsize intrinsic 2019-01-30 20:34:35 +00:00
MemoryDependenceAnalysis.cpp [NFC] Fix typos: preceeding -> preceding 2019-02-23 01:28:32 +00:00
MemoryLocation.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MemorySSA.cpp [MemorySSA] Remove redundant walker assignment [NFC]. 2019-03-14 18:45:17 +00:00
MemorySSAUpdater.cpp [MemorySSA] Make insertDef insert corresponding phi nodes. 2019-02-27 22:20:22 +00:00
ModuleDebugInfoPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ModuleSummaryAnalysis.cpp [ThinLTO] Restructure AliasSummary to contain ValueInfo of Aliasee 2019-03-15 15:11:38 +00:00
MustExecute.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ObjCARCAliasAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ObjCARCAnalysisUtils.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ObjCARCInstKind.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
OptimizationRemarkEmitter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
OrderedBasicBlock.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
OrderedInstructions.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
PHITransAddr.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
PhiValues.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
PostDominators.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ProfileSummaryInfo.cpp [PGO] Context sensitive PGO (part 2) 2019-02-28 19:55:07 +00:00
PtrUseVisitor.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
README.txt
RegionInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
RegionPass.cpp [RegionPass] Fix forgotten "!". 2019-03-08 21:03:06 +00:00
RegionPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ScalarEvolution.cpp [SCEV] Use depth limit for trunc analysis 2019-03-12 18:28:05 +00:00
ScalarEvolutionAliasAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ScalarEvolutionExpander.cpp [SCEV] Ensure that isHighCostExpansion takes into account what is being divided 2019-03-05 12:12:18 +00:00
ScalarEvolutionNormalization.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ScopedNoAliasAA.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StackSafetyAnalysis.cpp Hide two unused debugging methods, NFCI. 2019-03-01 17:15:21 +00:00
StratifiedSets.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
SyncDependenceAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
SyntheticCountsUtils.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
TargetLibraryInfo.cpp [SelectionDAG] Allow the user to specify a memeq function. 2019-03-08 09:07:45 +00:00
TargetTransformInfo.cpp [TTI] Enable analysis of clib functions in getIntrinsicCosts. NFCI. 2019-03-12 09:48:02 +00:00
Trace.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
TypeBasedAliasAnalysis.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
TypeMetadataUtils.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ValueLattice.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ValueLatticeUtils.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ValueTracking.cpp [ValueTracking] Use ConstantRange overflow check for signed add; NFC 2019-03-17 21:25:26 +00:00
VectorUtils.cpp [Vectorizer] Add vectorization support for fixed smul/umul intrinsics 2019-02-25 15:42:02 +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))

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