Index: lib/Analysis/ScopInfo.cpp =================================================================== --- lib/Analysis/ScopInfo.cpp +++ lib/Analysis/ScopInfo.cpp @@ -1294,7 +1294,6 @@ MAL.emplace_front(Access); } else if (Access->isValueKind() && Access->isWrite()) { Instruction *AccessVal = cast(Access->getAccessValue()); - assert(Parent.getStmtFor(AccessVal) == this); assert(!ValueWrites.lookup(AccessVal)); ValueWrites[AccessVal] = Access; @@ -3795,10 +3794,16 @@ void Scop::removeFromStmtMap(ScopStmt &Stmt) { if (Stmt.isRegionStmt()) - for (BasicBlock *BB : Stmt.getRegion()->blocks()) + for (BasicBlock *BB : Stmt.getRegion()->blocks()) { StmtMap.erase(BB); - else + for (Instruction &Inst : *BB) + InstStmtMap.erase(&Inst); + } + else { StmtMap.erase(Stmt.getBasicBlock()); + for (Instruction &Inst : *Stmt.getBasicBlock()) + InstStmtMap.erase(&Inst); + } } void Scop::removeStmts(std::function ShouldDelete) { @@ -4864,14 +4869,25 @@ Stmts.emplace_back(*this, *BB, SurroundingLoop, Instructions); auto *Stmt = &Stmts.back(); StmtMap[BB].push_back(Stmt); + for (Instruction *Inst : Instructions) { + assert(!InstStmtMap.count(Inst) && + "Unexpected statement corresponding to the instruction."); + InstStmtMap[Inst] = Stmt; + } } void Scop::addScopStmt(Region *R, Loop *SurroundingLoop) { assert(R && "Unexpected nullptr!"); Stmts.emplace_back(*this, *R, SurroundingLoop); auto *Stmt = &Stmts.back(); - for (BasicBlock *BB : R->blocks()) + for (BasicBlock *BB : R->blocks()) { StmtMap[BB].push_back(Stmt); + for (Instruction &Inst : *BB) { + assert(!InstStmtMap.count(&Inst) && + "Unexpected statement corresponding to the instruction."); + InstStmtMap[&Inst] = Stmt; + } + } } ScopStmt *Scop::addScopStmt(__isl_take isl_map *SourceRel,