mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
fail delinearization when the size of subscripts differs
Because the delinearization is not a global analysis pass, it will compute the delinearization independently of knowledge about the way the delinearization happened for other data accesses to the same array: the dependence analysis will only trigger the delinearization on a tuple of access functions, and thus delinearization may compute different subscripts sizes for a same array. When that happens the safest is to discard the delinearized information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201866 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
12681353c6
commit
fc605ac12c
@ -3193,10 +3193,23 @@ DependenceAnalysis::tryDelinearize(const SCEV *SrcSCEV, const SCEV *DstSCEV,
|
|||||||
DstAR->delinearize(*SE, DstSubscripts, DstSizes);
|
DstAR->delinearize(*SE, DstSubscripts, DstSizes);
|
||||||
|
|
||||||
int size = SrcSubscripts.size();
|
int size = SrcSubscripts.size();
|
||||||
int dstSize = DstSubscripts.size();
|
// Fail when there is only a subscript: that's a linearized access function.
|
||||||
if (size != dstSize || size < 2)
|
if (size < 2)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
int dstSize = DstSubscripts.size();
|
||||||
|
// Fail when the number of subscripts in Src and Dst differ.
|
||||||
|
if (size != dstSize)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Fail when the size of any of the subscripts in Src and Dst differs: the
|
||||||
|
// dependence analysis assumes that elements in the same array have same size.
|
||||||
|
// SCEV delinearization does not have a context based on which it would decide
|
||||||
|
// globally the size of subscripts that would best fit all the array accesses.
|
||||||
|
for (int i = 0; i < size; ++i)
|
||||||
|
if (SrcSizes[i] != DstSizes[i])
|
||||||
|
return false;
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
DEBUG(errs() << "\nSrcSubscripts: ");
|
DEBUG(errs() << "\nSrcSubscripts: ");
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user