1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00
llvm-mirror/lib/Analysis
Johannes Doerfert 1b1628ecca Introduce a CallGraph updater helper class
The CallGraphUpdater is a helper that simplifies the process of updating
the call graph, both old and new style, while running an CGSCC pass.

The uses are contained in different commits, e.g. D70767.

More functionality is added as we need it.

Reviewed By: modocache, hfinkel

Differential Revision: https://reviews.llvm.org/D70927
2020-02-08 14:16:48 -06:00
..
AliasAnalysis.cpp [AliasAnalysis] Add missing FMRB_* enums. 2020-01-28 15:47:08 -08:00
AliasAnalysisEvaluator.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
AliasAnalysisSummary.cpp
AliasAnalysisSummary.h
AliasSetTracker.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
Analysis.cpp [MustExec] Add a generic "must-be-executed-context" explorer 2019-08-23 15:17:27 +00:00
AssumptionCache.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
BasicAliasAnalysis.cpp [AliasAnalysis] Add missing FMRB_* enums. 2020-01-28 15:47:08 -08:00
BlockFrequencyInfo.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
BlockFrequencyInfoImpl.cpp [BFI] Add a debug check for unknown block queries. 2020-02-04 10:05:28 -08:00
BranchProbabilityInfo.cpp [BrachProbablityInfo] Add invalidate method. 2020-01-17 10:47:51 -08:00
CallGraph.cpp Introduce a CallGraph updater helper class 2020-02-08 14:16:48 -06:00
CallGraphSCCPass.cpp Introduce a CallGraph updater helper class 2020-02-08 14:16:48 -06:00
CallPrinter.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
CaptureTracking.cpp [CaptureTracker] Let subclasses provide dereferenceability information 2019-08-19 21:56:38 +00:00
CFG.cpp Recommit "[GVN] Preserve loop related analysis/canonical forms." 2019-07-31 09:27:54 +00:00
CFGPrinter.cpp Add missing includes needed to prune LLVMContext.h include, NFC 2019-11-14 15:23:15 -08:00
CFLAndersAliasAnalysis.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
CFLGraph.h [CFLGraph] Add support for unary fneg instruction. 2019-06-06 19:21:23 +00:00
CFLSteensAliasAnalysis.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
CGSCCPassManager.cpp Add PassManagerImpl.h to hide implementation details 2020-02-03 11:15:55 -08:00
CMakeLists.txt Revert "[SCEV] Move ScalarEvolutionExpander.cpp to Transforms/Utils (NFC)." 2020-01-04 18:44:38 +00:00
CmpInstAnalysis.cpp
CodeMetrics.cpp
ConstantFolding.cpp Add support for (expressing) vscale. 2020-01-22 10:09:27 +00:00
CostModel.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
DDG.cpp [DDG] Data Dependence Graph - Topological Sort (Memory Leak Fix) 2019-12-03 10:08:25 -05:00
Delinearization.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
DemandedBits.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
DependenceAnalysis.cpp [NFC][DA] Remove duplicate code in checkSrcSubscript and checkDstSubscript 2019-12-27 10:06:19 -05:00
DependenceGraphBuilder.cpp [DDG] Data Dependence Graph - Ordinals 2019-12-19 10:57:33 -05:00
DivergenceAnalysis.cpp [DA] Don't propagate from unreachable blocks 2020-01-24 10:28:11 -08:00
DominanceFrontier.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
DomPrinter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
DomTreeUpdater.cpp [NFC] Fixes -Wrange-loop-analysis warnings 2020-01-01 20:01:37 +01:00
EHPersonalities.cpp
GlobalsModRef.cpp [GlobalsModRef] Add invalidate method 2020-01-17 10:33:54 -08:00
GuardUtils.cpp Slightly speculative buildbot fix for issue reported in 8293f74 commit thread 2019-11-22 11:37:17 -08:00
IndirectCallPromotionAnalysis.cpp Add missing includes needed to prune LLVMContext.h include, NFC 2019-11-14 15:23:15 -08:00
InlineCost.cpp [InlineCost] Add flag to allow changing the default inline cost 2020-02-04 12:06:20 -08:00
InstCount.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
InstructionPrecedenceTracking.cpp Add missing includes needed to prune LLVMContext.h include, NFC 2019-11-14 15:23:15 -08:00
InstructionSimplify.cpp Reapply: [SVE] Fix bug in simplification of scalable vector instructions 2020-02-05 10:00:09 -08:00
Interval.cpp
IntervalPartition.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
IVDescriptors.cpp [SCEV] Remove unused ScalarEvolutionExpander.h includes (NFC). 2020-01-04 18:29:35 +00:00
IVUsers.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
LazyBlockFrequencyInfo.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
LazyBranchProbabilityInfo.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
LazyCallGraph.cpp Introduce a CallGraph updater helper class 2020-02-08 14:16:48 -06:00
LazyValueInfo.cpp Temporarily revert "Reapply [LVI] Normalize pointer behavior" and "[LVI] Restructure caching" 2019-12-20 10:25:57 -08:00
LegacyDivergenceAnalysis.cpp Resubmit: [DA][TTI][AMDGPU] Add option to select GPUDA with TTI 2020-01-24 10:39:40 -08:00
Lint.cpp [instrinsics] Add @llvm.memcpy.inline instrinsics 2020-01-28 09:42:01 +01:00
LLVMBuild.txt
Loads.cpp [Loads] Handle simple cases with same base pointer with constant offsets in FindAvailableLoadedValue when AA is null. 2020-01-29 13:05:46 -08:00
LoopAccessAnalysis.cpp [VectorUtils] Rework the Vector Function Database (VFDatabase). 2020-01-16 15:08:26 +00:00
LoopAnalysisManager.cpp Add PassManagerImpl.h to hide implementation details 2020-02-03 11:15:55 -08:00
LoopCacheAnalysis.cpp [LoopCacheAnalysis]: Fix assertion failure during cost computation 2019-11-15 14:56:26 -05:00
LoopInfo.cpp Rename LoopInfo::isRotated() to LoopInfo::isRotatedForm(). 2019-12-12 14:22:36 -05:00
LoopPass.cpp NFC. Remove obsolete SimpleAnalysis infrastructure 2020-01-23 13:58:30 +07:00
LoopUnrollAnalyzer.cpp [InstSimplify] Rename SimplifyFPUnOp and SimplifyFPBinOp 2019-07-24 12:50:10 +00:00
MemDepPrinter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
MemDerefPrinter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
MemoryBuiltins.cpp Reland [DataLayout] Fix occurrences that size and range of pointers are assumed to be the same. 2019-12-13 14:30:21 +00:00
MemoryDependenceAnalysis.cpp [MemDepAnalysis/VNCoercion] Move static method to its only use. [NFCI] 2020-01-17 15:18:42 -08:00
MemoryLocation.cpp [IR] Split out target specific intrinsic enums into separate headers 2019-12-11 18:02:14 -08:00
MemorySSA.cpp [MemorySSA] Combine verifications. 2019-11-25 16:05:38 -08:00
MemorySSAUpdater.cpp [MemorySSA] Moving at the end often means before terminator. 2019-11-20 17:11:00 -08:00
ModuleDebugInfoPrinter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
ModuleSummaryAnalysis.cpp [ThinLTO] Summarize vcall_visibility metadata 2020-01-23 13:19:56 -08:00
MustExecute.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
ObjCARCAliasAnalysis.cpp
ObjCARCAnalysisUtils.cpp
ObjCARCInstKind.cpp [ObjC][ARC] Delete ObjC runtime calls on global variables annotated 2019-06-14 22:06:32 +00:00
OptimizationRemarkEmitter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
OrderedBasicBlock.cpp
OrderedInstructions.cpp [llvm] Migrate llvm::make_unique to std::make_unique 2019-08-15 15:54:37 +00:00
PHITransAddr.cpp
PhiValues.cpp [PhiValues] Remove redundant map searches 2019-11-23 10:32:56 +02:00
PostDominators.cpp [CodeMoverUtils] Added an API to check if an instruction can be safely 2019-11-22 21:29:08 +00:00
ProfileSummaryInfo.cpp Add missing includes needed to prune LLVMContext.h include, NFC 2019-11-14 15:23:15 -08:00
PtrUseVisitor.cpp SROA: Allow eliminating addrspacecasted allocas 2019-06-14 21:38:31 +00:00
README.txt
RegionInfo.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
RegionPass.cpp
RegionPrinter.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
ScalarEvolution.cpp [SCEV] Swap guards estimation sequence. NFC 2020-01-20 16:41:16 +03:00
ScalarEvolutionAliasAnalysis.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
ScalarEvolutionExpander.cpp Revert "[SCEV] Move ScalarEvolutionExpander.cpp to Transforms/Utils (NFC)." 2020-01-04 18:44:38 +00:00
ScalarEvolutionNormalization.cpp
ScopedNoAliasAA.cpp Sink all InitializePasses.h includes 2019-11-13 16:34:37 -08:00
StackSafetyAnalysis.cpp Support zero size types in StackSafetyAnalysis. 2020-01-27 15:22:59 -08:00
StratifiedSets.h
SyncDependenceAnalysis.cpp Fix assert that doesn't check anything. 2020-01-23 19:02:00 -08:00
SyntheticCountsUtils.cpp
TargetLibraryInfo.cpp [SimplifyLibCalls] Add __strlen_chk. 2020-02-08 11:51:00 -08:00
TargetTransformInfo.cpp Resubmit: [DA][TTI][AMDGPU] Add option to select GPUDA with TTI 2020-01-24 10:39:40 -08:00
Trace.cpp
TypeBasedAliasAnalysis.cpp [Metadata] Add TBAA struct metadata to AAMDNode 2020-01-06 11:05:15 +03:00
TypeMetadataUtils.cpp Reland: Dead Virtual Function Elimination 2019-10-17 09:58:57 +00:00
ValueLattice.cpp
ValueLatticeUtils.cpp
ValueTracking.cpp [ValueTracking] usub(a, b) cannot overflow if a >= b. 2020-02-07 10:41:18 +00:00
VectorUtils.cpp [Analysis] add query to get splat value from array of ints 2020-02-05 14:55:02 -05:00
VFABIDemangling.cpp [llvm][VectorUtils] Tweak VFShape for scalable vector functions. 2020-01-30 05:53:56 +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))

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