diff options
author | Sebastian Pop <spop@codeaurora.org> | 2014-05-09 22:45:07 +0000 |
---|---|---|
committer | Sebastian Pop <spop@codeaurora.org> | 2014-05-09 22:45:07 +0000 |
commit | 47fe7de1b517161d1c162ead1ec6e1143dd99372 (patch) | |
tree | 5cf80971f8edda453ab14ef46e7b238a6e1333a0 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 444621abe1951358fc5051b28e31bb2efdf5d61f (diff) | |
download | bcm5719-llvm-47fe7de1b517161d1c162ead1ec6e1143dd99372.tar.gz bcm5719-llvm-47fe7de1b517161d1c162ead1ec6e1143dd99372.zip |
move findArrayDimensions to ScalarEvolution
we do not use the information from SCEVAddRecExpr to compute the shape of the array,
so a better place for this function is in ScalarEvolution.
llvm-svn: 208456
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index b8a49f590f0..f065d851a00 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -7195,8 +7195,7 @@ findGCD(ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &Terms) { static void findArrayDimensionsRec(ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &Terms, - SmallVectorImpl<const SCEV *> &Sizes, - const SCEV *Zero, const SCEV *One) { + SmallVectorImpl<const SCEV *> &Sizes) { // The GCD of all Terms is the dimension of the innermost dimension. const SCEV *GCD = findGCD(SE, Terms); @@ -7215,6 +7214,8 @@ static void findArrayDimensionsRec(ScalarEvolution &SE, return; } + const SCEV *Zero = SE.getConstant(GCD->getType(), 0); + for (unsigned I = 0; I < Terms.size(); ++I) { // Normalize the terms before the next call to findArrayDimensionsRec. const SCEV *Q, *R; @@ -7230,7 +7231,7 @@ static void findArrayDimensionsRec(ScalarEvolution &SE, Terms.end()); if (Terms.size() > 0) - findArrayDimensionsRec(SE, Terms, Sizes, Zero, One); + findArrayDimensionsRec(SE, Terms, Sizes); Sizes.push_back(GCD); } @@ -7283,8 +7284,8 @@ static inline int numberOfTerms(const SCEV *S) { /// Second step of delinearization: compute the array dimensions Sizes from the /// set of Terms extracted from the memory access function of this SCEVAddRec. -void SCEVAddRecExpr::findArrayDimensions( - ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &Terms, +void ScalarEvolution::findArrayDimensions( + SmallVectorImpl<const SCEV *> &Terms, SmallVectorImpl<const SCEV *> &Sizes) const { if (Terms.size() < 2) @@ -7316,9 +7317,8 @@ void SCEVAddRecExpr::findArrayDimensions( dbgs() << *T << "\n"; }); - const SCEV *Zero = SE.getConstant(this->getType(), 0); - const SCEV *One = SE.getConstant(this->getType(), 1); - findArrayDimensionsRec(SE, Terms, Sizes, Zero, One); + ScalarEvolution &SE = *const_cast<ScalarEvolution *>(this); + findArrayDimensionsRec(SE, Terms, Sizes); DEBUG({ dbgs() << "Sizes:\n"; @@ -7436,7 +7436,7 @@ SCEVAddRecExpr::delinearize(ScalarEvolution &SE, collectParametricTerms(SE, Terms); // Second step: find subscript sizes. - findArrayDimensions(SE, Terms, Sizes); + SE.findArrayDimensions(Terms, Sizes); // Third step: compute the access functions for each subscript. const SCEV *Remainder = computeAccessFunctions(SE, Subscripts, Sizes); |