diff options
Diffstat (limited to 'polly/lib/Support/SCEVAffinator.cpp')
-rw-r--r-- | polly/lib/Support/SCEVAffinator.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/polly/lib/Support/SCEVAffinator.cpp b/polly/lib/Support/SCEVAffinator.cpp index a9e542c25f0..e1520c8d284 100644 --- a/polly/lib/Support/SCEVAffinator.cpp +++ b/polly/lib/Support/SCEVAffinator.cpp @@ -268,7 +268,16 @@ __isl_give isl_pw_aff *SCEVAffinator::visitAddExpr(const SCEVAddExpr *Expr) { } __isl_give isl_pw_aff *SCEVAffinator::visitMulExpr(const SCEVMulExpr *Expr) { - llvm_unreachable("SCEVMulExpr should not be reached"); + isl_pw_aff *Prod = visit(Expr->getOperand(0)); + + for (int i = 1, e = Expr->getNumOperands(); i < e; ++i) { + isl_pw_aff *NextFactor = visit(Expr->getOperand(i)); + Prod = isl_pw_aff_mul(Prod, NextFactor); + if (isToComplex(Prod)) + return nullptr; + } + + return Prod; } __isl_give isl_pw_aff *SCEVAffinator::visitUDivExpr(const SCEVUDivExpr *Expr) { |