Index: llvm/lib/Analysis/ScalarEvolution.cpp =================================================================== --- llvm/lib/Analysis/ScalarEvolution.cpp +++ llvm/lib/Analysis/ScalarEvolution.cpp @@ -7822,9 +7822,10 @@ Idx = getSCEVAtScope(Idx, L); // We can only recognize very limited forms of loop index expressions, in - // particular, only affine AddRec's like {C1,+,C2}. + // particular, only affine AddRec's like {C1,+,C2} where L is inside L2. const SCEVAddRecExpr *IdxExpr = dyn_cast(Idx); - if (!IdxExpr || !IdxExpr->isAffine() || isLoopInvariant(IdxExpr, L) || + if (!IdxExpr || !IdxExpr->getLoop()->contains(L) || !IdxExpr->isAffine() || + isLoopInvariant(IdxExpr, L) || !isa(IdxExpr->getOperand(0)) || !isa(IdxExpr->getOperand(1))) return getCouldNotCompute();