Fix a bug in getSCEVAtScope w.r.t. non-canonical loops

The issue is that if we have a loop with multiple predecessors outside the loop, the code was expecting to merge them and only return if equal, but instead returned the first one seen.

I have no idea if this actually tripped anywhere.  I noticed it by accident when reading the code and have no idea how to go about constructing a test case.

llvm-svn: 363112
This commit is contained in:
Philip Reames 2019-06-11 23:21:24 +00:00
parent 0e9b1d2a20
commit 02f0b379f5
1 changed files with 2 additions and 2 deletions

View File

@ -8126,9 +8126,9 @@ const SCEV *ScalarEvolution::computeSCEVAtScope(const SCEV *V, const Loop *L) {
break;
}
}
if (!MultipleInitValues && InitValue)
return getSCEV(InitValue);
}
if (!MultipleInitValues && InitValue)
return getSCEV(InitValue);
}
// Okay, we know how many times the containing loop executes. If
// this is a constant evolving PHI node, get the final value at