1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00
llvm-mirror/lib/Analysis
Andrew Trick 504187a152 LoopInfo::updateUnloop fix, and verify Block->Loop maps.
Fixes an oversight, and adds verification to catch it in the unloop.ll tests.

llvm-svn: 138622
2011-08-26 03:06:34 +00:00
..
IPA Silence a bunch (but not all) "variable written but not read" warnings 2011-08-12 14:54:45 +00:00
AliasAnalysis.cpp Misc analysis passes that need to be aware of atomic load/store. 2011-08-15 20:54:19 +00:00
AliasAnalysisCounter.cpp Teach AliasAnalysisCounter about PartialAlias. 2010-12-10 19:53:05 +00:00
AliasAnalysisEvaluator.cpp land David Blaikie's patch to de-constify Type, with a few tweaks. 2011-07-18 04:54:35 +00:00
AliasDebugger.cpp Extend the AliasAnalysis::pointsToConstantMemory interface to allow it 2010-11-08 16:45:26 +00:00
AliasSetTracker.cpp Atomic load/store support in LICM. 2011-08-15 20:52:09 +00:00
Analysis.cpp C API functions must be able to see their extern "C" definitions, or it will be impossible to call them from C. 2011-08-19 01:36:54 +00:00
BasicAliasAnalysis.cpp Explicitly cast narrowing conversions inside {}s that will become errors in 2011-07-27 06:22:51 +00:00
BlockFrequencyInfo.cpp Add more constantness in BlockFrequencyInfo. 2011-08-03 21:30:57 +00:00
BranchProbabilityInfo.cpp Change SmallVector to SmallPtrSet in BranchProbabilityInfo. Handle cases where 2011-08-01 19:16:26 +00:00
CaptureTracking.cpp Don't include Operator.h from InstrTypes.h. 2011-04-11 09:35:34 +00:00
CFGPrinter.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
CMakeLists.txt Rewrite the CMake build to use explicit dependencies between libraries, 2011-07-29 00:14:25 +00:00
ConstantFolding.cpp Implement Constant::isAllOnesValue(). Fix ConstantFolding to use the new api. 2011-08-24 20:18:38 +00:00
DbgInfoPrinter.cpp Move DbgInfoPrinter specific utlities inside DbgInfoPrinter.cpp 2011-02-15 17:36:11 +00:00
DebugInfo.cpp Do not use named md nodes to track variables that are completely optimized. This does not scale while doing LTO with debug info. New approach is to include list of variables in the subprogram info directly. 2011-08-19 23:28:12 +00:00
DIBuilder.cpp Do not use named md nodes to track variables that are completely optimized. This does not scale while doing LTO with debug info. New approach is to include list of variables in the subprogram info directly. 2011-08-19 23:28:12 +00:00
DominanceFrontier.cpp Move DominanceFrontier from VMCore to Analysis. 2011-01-18 06:06:27 +00:00
DomPrinter.cpp split dom frontier handling stuff out to its own DominanceFrontier header, 2011-01-02 22:09:33 +00:00
InlineCost.cpp Change condition for determining whether a function is small for inlining metrics so that very long functions 2011-05-24 20:22:24 +00:00
InstCount.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
InstructionSimplify.cpp Revert r137781; I agree with Duncan's comment that the situation in question is clearly impossible given the current structure of the code. 2011-08-17 19:31:49 +00:00
Interval.cpp
IntervalPartition.cpp
IVUsers.cpp Teach IVUsers to stop at non-affine expressions unless they are both 2011-07-01 22:05:19 +00:00
LazyValueInfo.cpp land David Blaikie's patch to de-constify Type, with a few tweaks. 2011-07-18 04:54:35 +00:00
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
Lint.cpp land David Blaikie's patch to de-constify Type, with a few tweaks. 2011-07-18 04:54:35 +00:00
Loads.cpp Add some comments here because the lack of a check for volatile/atomic here is a bit unusual. 2011-08-15 21:56:39 +00:00
LoopDependenceAnalysis.cpp Misc analysis passes that need to be aware of atomic load/store. 2011-08-15 20:54:19 +00:00
LoopInfo.cpp LoopInfo::updateUnloop fix, and verify Block->Loop maps. 2011-08-26 03:06:34 +00:00
LoopPass.cpp Reapplying r136844. 2011-08-10 23:22:57 +00:00
Makefile
MemDepPrinter.cpp Misc analysis passes that need to be aware of atomic load/store. 2011-08-15 20:54:19 +00:00
MemoryBuiltins.cpp land David Blaikie's patch to de-constify Type, with a few tweaks. 2011-07-18 04:54:35 +00:00
MemoryDependenceAnalysis.cpp Misc analysis passes that need to be aware of atomic load/store. 2011-08-15 20:54:19 +00:00
ModuleDebugInfoPrinter.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
NoAliasAnalysis.cpp Use the new addEscapingValue callback to update GlobalsModRef when GVN adds PHIs of GEPs. For the moment, 2011-01-03 23:51:43 +00:00
PathNumbering.cpp Add this back in for now. There are still a few passes which create unwind instructions at the moment. 2011-08-03 01:07:57 +00:00
PathProfileInfo.cpp Implementation of path profiling. 2011-01-29 01:09:53 +00:00
PathProfileVerifier.cpp Fix a ton of comment typos found by codespell. Patch by 2011-04-15 05:18:47 +00:00
PHITransAddr.cpp Shorten some expressions by using ArrayRef::slice(). 2011-07-25 15:13:01 +00:00
PostDominators.cpp remove postdom frontiers, because it is dead. Forward dom frontiers are 2011-04-05 21:57:17 +00:00
ProfileEstimatorPass.cpp Fix a ton of comment typos found by codespell. Patch by 2011-04-15 05:18:47 +00:00
ProfileInfo.cpp Fix a ton of comment typos found by codespell. Patch by 2011-04-15 05:18:47 +00:00
ProfileInfoLoader.cpp Remove unused STL header includes. 2011-04-23 19:53:52 +00:00
ProfileInfoLoaderPass.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
ProfileVerifierPass.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
README.txt
RegionInfo.cpp Region: Allow user control the printing style of the print function. 2011-04-04 07:19:18 +00:00
RegionPass.cpp Minor change: Fix the typo in RegionPass.h and RegionPass.cpp. 2011-05-05 13:59:38 +00:00
RegionPrinter.cpp RegionPrinter: Ignore back edges when layouting the graph 2011-02-27 04:11:07 +00:00
ScalarEvolution.cpp Allow loop unrolling to get known trip counts from ScalarEvolution. 2011-08-11 23:36:16 +00:00
ScalarEvolutionAliasAnalysis.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
ScalarEvolutionExpander.cpp Skip the landingpad instruction when determining the insertion point. 2011-08-24 21:06:46 +00:00
ScalarEvolutionNormalization.cpp Added SCEV::NoWrapFlags to manage unsigned, signed, and self wrap 2011-03-14 16:50:06 +00:00
SparsePropagation.cpp
Trace.cpp
TypeBasedAliasAnalysis.cpp Fix a ton of comment typos found by codespell. Patch by 2011-04-15 05:18:47 +00:00
ValueTracking.cpp Migrate LLVM and Clang to use the new makeArrayRef(...) functions where previously explicit non-default constructors were used. 2011-07-18 12:00:32 +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))

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