diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-04-26 19:55:21 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-04-26 19:55:21 +0000 |
commit | d5d8f67dc5ec18bfd172dc620a49f68db898512d (patch) | |
tree | 89eaf122b5b93b0689caba5e925014c5a7baa6b5 /polly/lib/Analysis/ScopInfo.cpp | |
parent | 63294cbb6a2bc9a48aa2367e61136b13ab1ac12d (diff) | |
download | bcm5719-llvm-d5d8f67dc5ec18bfd172dc620a49f68db898512d.tar.gz bcm5719-llvm-d5d8f67dc5ec18bfd172dc620a49f68db898512d.zip |
Use the original no-wrap flags for normalized AddRecs
llvm-svn: 235822
Diffstat (limited to 'polly/lib/Analysis/ScopInfo.cpp')
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 59bf345cd6f..2caab15adfa 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -214,6 +214,8 @@ __isl_give isl_pw_aff * SCEVAffinator::visitAddRecExpr(const SCEVAddRecExpr *Expr) { assert(Expr->isAffine() && "Only affine AddRecurrences allowed"); + auto Flags = Expr->getNoWrapFlags(); + // Directly generate isl_pw_aff for Expr if 'start' is zero. if (Expr->getStart()->isZero()) { assert(S->getRegion().contains(Expr->getLoop()) && @@ -236,10 +238,13 @@ SCEVAffinator::visitAddRecExpr(const SCEVAddRecExpr *Expr) { // Translate AddRecExpr from '{start, +, inc}' into 'start + {0, +, inc}' // if 'start' is not zero. + // TODO: Using the original SCEV no-wrap flags is not always safe, however + // as our code generation is reordering the expression anyway it doesn't + // really matter. ScalarEvolution &SE = *S->getSE(); - const SCEV *ZeroStartExpr = SE.getAddRecExpr( - SE.getConstant(Expr->getStart()->getType(), 0), - Expr->getStepRecurrence(SE), Expr->getLoop(), SCEV::FlagAnyWrap); + const SCEV *ZeroStartExpr = + SE.getAddRecExpr(SE.getConstant(Expr->getStart()->getType(), 0), + Expr->getStepRecurrence(SE), Expr->getLoop(), Flags); isl_pw_aff *ZeroStartResult = visit(ZeroStartExpr); isl_pw_aff *Start = visit(Expr->getStart()); |