remove constant terms
authorSebastian Pop <spop@codeaurora.org>
Tue, 27 May 2014 22:41:45 +0000 (22:41 +0000)
committerSebastian Pop <spop@codeaurora.org>
Tue, 27 May 2014 22:41:45 +0000 (22:41 +0000)
commita6e586051388a83198e5e0f1092657a2fc78e133
tree04ffe46c2cf36f94705b67e4fbd72db8076cf8f0
parentf0e0cca0c761a9a8593873c67d3d081fa0d07ebe
remove constant terms

The delinearization is needed only to remove the non linearity induced by
expressions involving multiplications of parameters and induction variables.
There is no problem in dealing with constant times parameters, or constant times
an induction variable.

For this reason, the current patch discards all constant terms and multipliers
before running the delinearization algorithm on the terms. The only thing
remaining in the term expressions are parameters and multiply expressions of
parameters: these simplified term expressions are passed to the array shape
recognizer that will not recognize constant dimensions anymore: these will be
recognized as different strides in parametric subscripts.

The only important special case of a constant dimension is the size of elements.
Instead of relying on the delinearization to infer the size of an element,
compute the element size from the base address type. This is a much more precise
way of computing the element size than before, as we would have mixed together
the size of an element with the strides of the innermost dimension.

llvm-svn: 209691
llvm/include/llvm/Analysis/DependenceAnalysis.h
llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h
llvm/lib/Analysis/Delinearization.cpp
llvm/lib/Analysis/DependenceAnalysis.cpp
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll [new file with mode: 0644]
llvm/test/Analysis/DependenceAnalysis/GCD.ll