[PATCH] D35663: [Polly] Remove dependency of `Scop::getStmtFor(Inst)` on `getStmtFor(BB)`. [NFC].
Nandini Singhal via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 26 10:29:16 PDT 2017
nandini12396 updated this revision to Diff 108322.
https://reviews.llvm.org/D35663
Files:
include/polly/ScopInfo.h
lib/Analysis/ScopInfo.cpp
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<Instruction>(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<bool(ScopStmt &)> 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,
Index: include/polly/ScopInfo.h
===================================================================
--- include/polly/ScopInfo.h
+++ include/polly/ScopInfo.h
@@ -1746,6 +1746,9 @@
/// vector comprises only of a single statement.
DenseMap<BasicBlock *, std::vector<ScopStmt *>> StmtMap;
+ /// A map from instructions to SCoP statements.
+ DenseMap<Instruction *, ScopStmt *> InstStmtMap;
+
/// A map from basic blocks to their domains.
DenseMap<BasicBlock *, isl::set> DomainMap;
@@ -2705,7 +2708,7 @@
/// Return the ScopStmt an instruction belongs to, or nullptr if it
/// does not belong to any statement in this Scop.
ScopStmt *getStmtFor(Instruction *Inst) const {
- return getStmtFor(Inst->getParent());
+ return InstStmtMap.lookup(Inst);
}
/// Return the number of statements in the SCoP.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35663.108322.patch
Type: text/x-patch
Size: 2781 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170726/607c617e/attachment.bin>
More information about the llvm-commits
mailing list