diff options
Diffstat (limited to 'polly/lib/Analysis/ScopInfo.cpp')
| -rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 7efebe18dcc..805b52318df 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -2590,12 +2590,19 @@ void Scop::addInvariantLoads(ScopStmt &Stmt, MemoryAccessList &InvMAs) { for (MemoryAccess *MA : InvMAs) { Instruction *AccInst = MA->getAccessInstruction(); if (SE->isSCEVable(AccInst->getType())) { - isl_id *ParamId = getIdForParam(SE->getSCEV(AccInst)); - if (ParamId) { - int Dim = isl_set_find_dim_by_id(DomainCtx, isl_dim_param, ParamId); - DomainCtx = isl_set_eliminate(DomainCtx, isl_dim_param, Dim, 1); + SetVector<Value *> Values; + for (const SCEV *Parameter : Parameters) { + Values.clear(); + findValues(Parameter, Values); + if (!Values.count(AccInst)) + continue; + + if (isl_id *ParamId = getIdForParam(Parameter)) { + int Dim = isl_set_find_dim_by_id(DomainCtx, isl_dim_param, ParamId); + DomainCtx = isl_set_eliminate(DomainCtx, isl_dim_param, Dim, 1); + isl_id_free(ParamId); + } } - isl_id_free(ParamId); } } |

