1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/lib/Analysis
Sean Fertile 152672e597 Extend CFGPrinter and CallPrinter with Heat Colors
Extends the CFGPrinter and CallPrinter with heat colors based on heuristics or
profiling information. The colors are enabled by default and can be toggled
on/off for CFGPrinter by using the option -cfg-heat-colors for both
-dot-cfg[-only] and -view-cfg[-only].  Similarly, the colors can be toggled
on/off for CallPrinter by using the option -callgraph-heat-colors for both
-dot-callgraph and -view-callgraph.

Patch by Rodrigo Caetano Rocha!

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

llvm-svn: 335996
2018-06-29 17:13:58 +00:00
..
AliasAnalysis.cpp [MSSA] Print more optimization information 2018-06-14 19:55:53 +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 [AliasSet] Fix UnknownInstructions printing 2018-06-27 16:34:30 +00:00
Analysis.cpp Add a PhiValuesAnalysis pass to calculate the underlying values of phis 2018-06-28 14:13:06 +00:00
AssumptionCache.cpp
BasicAliasAnalysis.cpp [BasicAA] Teach the analysis about atomic memcpy 2018-05-29 19:23:50 +00:00
BlockFrequencyInfo.cpp
BlockFrequencyInfoImpl.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
BranchProbabilityInfo.cpp [BPI] Remove unnecessary std::list 2018-06-15 21:06:43 +00:00
CallGraph.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
CallGraphSCCPass.cpp Add remarks describing when a pass changes the IR instruction count of a module 2018-05-18 17:26:39 +00:00
CallPrinter.cpp Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
CaptureTracking.cpp Fix aliasing of launder.invariant.group 2018-05-23 09:16:44 +00:00
CFG.cpp
CFGPrinter.cpp Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
CFLAndersAliasAnalysis.cpp Replace AA's uses of uint64_t with LocationSize; NFC. 2018-05-25 21:16:58 +00:00
CFLGraph.h [CFLAA] Reflow comments; NFC 2018-05-26 02:17:43 +00:00
CFLSteensAliasAnalysis.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
CGSCCPassManager.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
CMakeLists.txt Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
CmpInstAnalysis.cpp
CodeMetrics.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
ConstantFolding.cpp Constant fold launder of null and undef 2018-05-18 23:52:57 +00:00
CostModel.cpp
Delinearization.cpp
DemandedBits.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
DependenceAnalysis.cpp [DA] Delinearise AddRecs if we can prove they don't wrap 2018-06-25 15:13:26 +00:00
DivergenceAnalysis.cpp
DominanceFrontier.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
DomPrinter.cpp Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
EHPersonalities.cpp [WebAssembly] Add Wasm personality and isScopedEHPersonality() 2018-05-17 20:52:03 +00:00
GlobalsModRef.cpp
HeatUtils.cpp Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
IndirectCallPromotionAnalysis.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
InlineCost.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
InstCount.cpp
InstructionSimplify.cpp [InstSimplify] fold shifts by sext bool 2018-06-26 17:31:38 +00:00
Interval.cpp
IntervalPartition.cpp
IteratedDominanceFrontier.cpp [IDF] Enforce the returned blocks to be sorted. 2018-05-12 01:44:32 +00:00
IVUsers.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
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 [STLExtras] Add size() for ranges, and remove distance() 2018-05-16 23:20:42 +00:00
LazyValueInfo.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
Lint.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LLVMBuild.txt
Loads.cpp Fix aliasing of launder.invariant.group 2018-05-23 09:16:44 +00:00
LoopAccessAnalysis.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopAnalysisManager.cpp
LoopInfo.cpp [STLExtras] Add distance() for ranges, pred_size(), and succ_size() 2018-05-10 23:01:54 +00:00
LoopPass.cpp [LegacyPM] Fix PR37888 by teaching the legacy loop pass manager how to 2018-06-22 02:43:41 +00:00
LoopUnrollAnalyzer.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
MemDepPrinter.cpp
MemDerefPrinter.cpp
MemoryBuiltins.cpp [InstCombine] Remove calloc transformations 2018-05-22 20:27:36 +00:00
MemoryDependenceAnalysis.cpp Dissallow non-empty metadata for invariant.group 2018-05-18 23:53:46 +00:00
MemoryLocation.cpp [DSE] Teach the pass that atomic memory intrinsics are stores. 2018-04-23 19:06:49 +00:00
MemorySSA.cpp [MSSA] Add domination number verifier; NFC 2018-06-25 05:30:36 +00:00
MemorySSAUpdater.cpp [MemorySSA] Reflow comments + clean up control flow; NFC 2018-05-26 02:28:55 +00:00
ModuleDebugInfoPrinter.cpp
ModuleSummaryAnalysis.cpp [ThinLTO] Add string saver onto index for value names 2018-06-26 02:29:08 +00:00
MustExecute.cpp [MustExecute] Fix a debug invariant issue in isGuaranteedToExecute() 2018-05-25 13:02:59 +00:00
ObjCARCAliasAnalysis.cpp
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
OrderedBasicBlock.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
PHITransAddr.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
PhiValues.cpp Add a PhiValuesAnalysis pass to calculate the underlying values of phis 2018-06-28 14:13:06 +00:00
PostDominators.cpp [Dominators] Add PDT constructor from Function 2018-05-23 17:29:21 +00:00
ProfileSummaryInfo.cpp [SampleFDO] Don't treat warm callsite with inline instance in the profile as cold 2018-05-10 23:02:27 +00:00
PtrUseVisitor.cpp
README.txt
RegionInfo.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
RegionPass.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
RegionPrinter.cpp Extend CFGPrinter and CallPrinter with Heat Colors 2018-06-29 17:13:58 +00:00
ScalarEvolution.cpp Fix overconfident assert in ScalarEvolution::isImpliedViaMerge 2018-06-29 11:46:30 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp SCEVExpander::expandAddRecExprLiterally(): check before casting as Instruction 2018-06-29 07:44:20 +00:00
ScalarEvolutionNormalization.cpp
ScopedNoAliasAA.cpp
StratifiedSets.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
SyntheticCountsUtils.cpp
TargetLibraryInfo.cpp Add Triple::isMIPS()/isMIPS32()/isMIPS64(). NFC 2018-06-25 16:49:20 +00:00
TargetTransformInfo.cpp [IR] move shuffle mask queries from TTI to ShuffleVectorInst 2018-06-19 18:44:00 +00:00
Trace.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
TypeBasedAliasAnalysis.cpp
TypeMetadataUtils.cpp
ValueLattice.cpp
ValueLatticeUtils.cpp
ValueTracking.cpp [ValueTracking] Match select abs pattern when there's an sext involved 2018-06-04 16:53:57 +00:00
VectorUtils.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +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))

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