forked from OSchip/llvm-project
Use the original no-wrap flags for normalized AddRecs
llvm-svn: 235822
This commit is contained in:
parent
63294cbb6a
commit
d5d8f67dc5
|
@ -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());
|
||||
|
|
|
@ -287,7 +287,7 @@ public:
|
|||
// if 'start' is not zero.
|
||||
const SCEV *ZeroStartExpr = SE.getAddRecExpr(
|
||||
SE.getConstant(Expr->getStart()->getType(), 0),
|
||||
Expr->getStepRecurrence(SE), Expr->getLoop(), SCEV::FlagAnyWrap);
|
||||
Expr->getStepRecurrence(SE), Expr->getLoop(), Expr->getNoWrapFlags());
|
||||
|
||||
ValidatorResult ZeroStartResult =
|
||||
ValidatorResult(SCEVType::PARAM, ZeroStartExpr);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
; INNERMOST: Function: f
|
||||
; INNERMOST: Region: %bb15---%bb26
|
||||
; INNERMOST: Max Loop Depth: 1
|
||||
; INNERMOST: p0: {0,+,{0,+,-1}<nw><%bb11>}<%bb13>
|
||||
; INNERMOST: p0: {0,+,{0,+,-1}<nw><%bb11>}<nw><%bb13>
|
||||
; INNERMOST: p1: {0,+,{0,+,1}<nuw><nsw><%bb11>}<nuw><nsw><%bb13>
|
||||
; INNERMOST: p2: {0,+,4}<nuw><nsw><%bb11>
|
||||
; INNERMOST: p3: {0,+,4}<nuw><nsw><%bb13>
|
||||
|
|
Loading…
Reference in New Issue