1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00
llvm-mirror/lib/Analysis
Nikita Popov 3247e0488e Reapply "[DemandedBits] Use SetVector for Worklist"
DemandedBits currently uses a simple vector for the worklist, which
means that instructions may be inserted multiple times into it.
Especially in combination with the deep lattice, this may cause
instructions too be recomputed very often. To avoid this, switch
to a SetVector.

Reapplying with a smaller number of inline elements in the
SmallSetVector, to avoid running into the SmallDenseMap issue
described in D56455.

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

llvm-svn: 350997
2019-01-12 09:09:15 +00:00
..
AliasAnalysis.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
AliasAnalysisEvaluator.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
AliasAnalysisSummary.cpp
AliasAnalysisSummary.h
AliasSetTracker.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
Analysis.cpp [stack-safety] Empty local passes for Stack Safety Global Analysis 2018-11-26 23:05:48 +00:00
AssumptionCache.cpp
BasicAliasAnalysis.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
BlockFrequencyInfo.cpp refactor BlockFrequencyInfo::view to take a title parameter 2019-01-09 19:12:38 +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
CallGraph.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
CallGraphSCCPass.cpp Fixing -print-module-scope for legacy SCC passes 2018-12-03 14:48:15 +00:00
CallPrinter.cpp
CaptureTracking.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +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
CGSCCPassManager.cpp [NewPM] fixing asserts on deleted loop in -print-after-all 2018-12-11 19:05:35 +00:00
CMakeLists.txt [stack-safety] Empty local passes for Stack Safety Local Analysis 2018-11-26 21:57:47 +00:00
CmpInstAnalysis.cpp [CmpInstAnalysis] fix function signature for ICmp code to predicate; NFC 2018-12-04 18:53:27 +00:00
CodeMetrics.cpp
ConstantFolding.cpp [ConstantFolding] Fold undef for integer intrinsics 2019-01-11 21:18:00 +00:00
CostModel.cpp
Delinearization.cpp
DemandedBits.cpp Reapply "[DemandedBits] Use SetVector for Worklist" 2019-01-12 09:09:15 +00:00
DependenceAnalysis.cpp [DA][NewPM] Add a printerpass and port the testsuite 2019-01-08 14:06:58 +00:00
DivergenceAnalysis.cpp [DA] GPUDivergenceAnalysis for unstructured GPU kernels 2018-11-30 22:55:20 +00:00
DominanceFrontier.cpp
DomPrinter.cpp
EHPersonalities.cpp [TI removal] Make variables declared as TerminatorInst and initialized 2018-10-15 10:04:59 +00:00
GlobalsModRef.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
GuardUtils.cpp Re-enable "[NFC] Unify guards detection" 2018-08-30 03:39:16 +00:00
IndirectCallPromotionAnalysis.cpp [CallSite removal] Port IndirectCallSiteVisitor to use CallBase and 2019-01-07 07:15:51 +00:00
InlineCost.cpp [Inliner] Assert that the computed inline threshold is non-negative. 2019-01-09 19:26:17 +00:00
InstCount.cpp
InstructionPrecedenceTracking.cpp [IPT] Drop cache less eagerly in GVN and LoopSafetyInfo 2019-01-09 07:28:13 +00:00
InstructionSimplify.cpp [InstSimplify] Simplify saturating add/sub + icmp 2018-12-17 17:45:18 +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
IVDescriptors.cpp Fix parenthesis warning in IVDescriptors 2018-11-30 13:54:36 +00:00
IVUsers.cpp
LazyBlockFrequencyInfo.cpp
LazyBranchProbabilityInfo.cpp
LazyCallGraph.cpp ADT/STLExtras: Introduce llvm::empty; NFC 2018-10-31 00:23:23 +00:00
LazyValueInfo.cpp [LVI] run transfer function for binary operator even when the RHS isn't a constant 2018-11-21 05:24:12 +00:00
LegacyDivergenceAnalysis.cpp LegacyDivergenceAnalysis: fix uninitialized value 2018-11-30 23:07:49 +00:00
Lint.cpp [Lint] Use LocationSize instead of ints; NFC 2018-12-23 02:50:08 +00:00
LLVMBuild.txt
Loads.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
LoopAccessAnalysis.cpp [LAA] Avoid generating RT checks for known deps preventing vectorization. 2018-12-20 18:49:09 +00:00
LoopAnalysisManager.cpp [LoopPassManager] MemorySSA should be preserved when enabled. 2018-09-06 20:54:24 +00:00
LoopInfo.cpp Introduce llvm.loop.parallel_accesses and llvm.access.group metadata. 2018-12-20 04:58:07 +00:00
LoopPass.cpp [LoopPass] fixing 'Modification' messages in -debug-pass=Executions for loop passes 2018-11-19 15:10:59 +00:00
LoopUnrollAnalyzer.cpp
MemDepPrinter.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
MemDerefPrinter.cpp
MemoryBuiltins.cpp Reverting r340807. 2018-08-30 18:37:18 +00:00
MemoryDependenceAnalysis.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
MemoryLocation.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
MemorySSA.cpp [MemorySSA] Disable checkClobberSanity for SkipSelfWalker. 2019-01-10 21:47:15 +00:00
MemorySSAUpdater.cpp [IR] Add hasNPredecessors, hasNPredecessorsOrMore to BasicBlock 2018-11-19 19:54:27 +00:00
ModuleDebugInfoPrinter.cpp
ModuleSummaryAnalysis.cpp [LTO] Record whether LTOUnit splitting is enabled in index 2019-01-11 18:31:57 +00:00
MustExecute.cpp [IPT] Drop cache less eagerly in GVN and LoopSafetyInfo 2019-01-09 07:28:13 +00:00
ObjCARCAliasAnalysis.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
ObjCARCAnalysisUtils.cpp
ObjCARCInstKind.cpp Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
OptimizationRemarkEmitter.cpp
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
PhiValues.cpp [PhiValues] Use callback value handles to invalidate deleted values 2018-08-24 15:48:30 +00:00
PostDominators.cpp
ProfileSummaryInfo.cpp [SampleFDO] handle ProfileSampleAccurate when initializing function entry count 2018-12-13 21:51:42 +00:00
PtrUseVisitor.cpp
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
ScalarEvolution.cpp [SCEV][NFC] Verify IR in isLoop[Entry,Backedge]GuardedByCond 2018-11-08 05:07:58 +00:00
ScalarEvolutionAliasAnalysis.cpp [Analysis] More LocationSize cleanup; NFC 2018-12-22 18:23:21 +00:00
ScalarEvolutionExpander.cpp Revert r347934 "[SCEV] Guard movement of insertion point for loop-invariants" 2018-12-05 23:13:50 +00:00
ScalarEvolutionNormalization.cpp
ScopedNoAliasAA.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
StackSafetyAnalysis.cpp [IR] Add Instruction::isLifetimeStartOrEnd, NFC 2018-12-21 21:49:40 +00:00
StratifiedSets.h
SyncDependenceAnalysis.cpp [TI removal] Switch some newly added code over to use Instruction 2018-10-19 00:22:10 +00:00
SyntheticCountsUtils.cpp Refactor synthetic profile count computation. NFC. 2019-01-09 20:10:27 +00:00
TargetLibraryInfo.cpp Revert unapproved commit 2018-11-24 07:26:55 +00:00
TargetTransformInfo.cpp [TTI] getOperandInfo - a broadcast shuffle means the result is OK_UniformValue 2018-11-14 15:04:08 +00:00
Trace.cpp
TypeBasedAliasAnalysis.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
TypeMetadataUtils.cpp [WPD] Fix incorrect devirtualization after indirect call promotion 2018-09-27 14:55:32 +00:00
ValueLattice.cpp
ValueLatticeUtils.cpp
ValueTracking.cpp [CallSite removal] Migrate all Alias Analysis APIs to use the newly 2019-01-07 05:42:51 +00:00
VectorUtils.cpp [SLPVectorizer] Flag ADD/SUB SSAT/USAT intrinsics trivially vectorizable (PR40123) 2019-01-03 12:18:23 +00:00

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))

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