diff options
Diffstat (limited to 'polly/lib')
| -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) {  | 

