llvm/test/Analysis
Max Kazantsev 33ec7a1ff0 [SCEV] Limit max size of AddRecExpr during evolving
When SCEV calculates product of two SCEVAddRecs from the same loop, it
tries to combine them into one big AddRecExpr. If the sizes of the initial
SCEVs were `S1` and `S2`, the size of their product is `S1 + S2 - 1`, and every
operand of the resulting SCEV is combined from operands of initial SCEV and
has much higher complexity than they have.

As result, if we try to calculate something like:
  %x1 = {a,+,b}
  %x2 = mul i32 %x1, %x1
  %x3 = mul i32 %x2, %x1
  %x4 = mul i32 %x3, %x2
  ...
The size of such SCEVs grows as `2^N`, and the arguments
become more and more complex as we go forth. This leads
to long compilation and huge memory consumption.

This patch sets a limit after which we don't try to combine two
`SCEVAddRecExpr`s into one. By default, max allowed size of the
resulting AddRecExpr is set to 16.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308847 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-23 15:40:19 +00:00
..
AliasSet Use WeakVH instead of WeakTrackingVH in AliasSetTracker's UnkownInsts 2017-05-01 17:07:56 +00:00
AssumptionCache
BasicAA Make shell redirection construct portable 2017-07-12 13:24:46 +00:00
BlockFrequencyInfo
BranchProbabilityInfo [BPI] Don't assume that strcmp returning >0 is more likely than <0 2017-06-08 09:44:40 +00:00
CallGraph
CFLAliasAnalysis [CFLAA] Add missing break; note things are broken. 2017-05-31 02:35:26 +00:00
ConstantFolding [InstSimplify] Constant fold the new GEP in SimplifyGEPInst. 2017-06-06 10:17:14 +00:00
CostModel [SystemZ] Add support for IBM z14 processor (2/3) 2017-07-17 17:42:48 +00:00
Delinearization [SCEV] Assume parameters coming from function calls contain IVs 2017-05-27 15:17:49 +00:00
DemandedBits [Analysis] Support bitreverse in -demanded-bits pass 2017-04-13 16:44:25 +00:00
DependenceAnalysis [DependenceAnalysis] Make sure base objects are the same when comparing GEPs 2017-07-05 21:35:47 +00:00
DivergenceAnalysis AMDGPU: Change DivergenceAnalysis for function arguments 2017-04-19 17:42:34 +00:00
DominanceFrontier
Dominators [Dominators] Don't compute DFS InOut numbers eagerly. 2017-06-30 01:28:21 +00:00
GlobalsModRef
IVUsers Re-enable "[SCEV] Do not fold dominated SCEVUnknown into AddRecExpr start" 2017-05-26 06:47:04 +00:00
LazyCallGraph
LazyValueAnalysis [JumpThreading][LVI] Invalidate LVI information after blocks are merged 2017-06-19 15:23:33 +00:00
Lint
LoopAccessAnalysis
LoopInfo
MemoryDependenceAnalysis
MemorySSA Remove readnone from invariant.group.barrier 2017-04-12 20:45:12 +00:00
PostDominators
ProfileSummary
RegionInfo
ScalarEvolution [SCEV] Limit max size of AddRecExpr during evolving 2017-07-23 15:40:19 +00:00
ScopedNoAliasAA
TypeBasedAliasAnalysis [BasicAA] Use MayAlias instead of PartialAlias for fallback. 2017-06-21 18:25:37 +00:00
ValueTracking
alias-analysis-uses.ll