[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
Thu Jul 20 08:25:58 PDT 2017
nandini12396 updated this revision to Diff 107525.
nandini12396 added a comment.
Addressed comments.
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
@@ -3796,10 +3796,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) {
@@ -4819,14 +4825,25 @@
Stmts.emplace_back(*this, *BB, SurroundingLoop, Instructions);
auto *Stmt = &Stmts.back();
StmtMap[BB].push_back(Stmt);
+ for (Instruction &Inst : *BB) {
+ assert(!InstStmtMap[&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[&Inst] &&
+ "Unexpected statement corresponding to the instruction.");
+ InstStmtMap[&Inst] = Stmt;
+ }
+ }
}
ScopStmt *Scop::addScopStmt(__isl_take isl_map *SourceRel,
@@ -4982,6 +4999,13 @@
return StmtMapIt->second.front();
}
+ScopStmt *Scop::getStmtFor(Instruction *Inst) const {
+ auto InstStmtMapIt = InstStmtMap.find(Inst);
+ if (InstStmtMapIt == InstStmtMap.end())
+ return nullptr;
+ return InstStmtMapIt->second;
+}
+
ScopStmt *Scop::getStmtFor(RegionNode *RN) const {
if (RN->isSubRegion())
return getStmtFor(RN->getNodeAs<Region>());
Index: include/polly/ScopInfo.h
===================================================================
--- include/polly/ScopInfo.h
+++ include/polly/ScopInfo.h
@@ -1689,6 +1689,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;
@@ -2644,9 +2647,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());
- }
+ ScopStmt *getStmtFor(Instruction *Inst) const;
/// Return the number of statements in the SCoP.
size_t getSize() const { return Stmts.size(); }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35663.107525.patch
Type: text/x-patch
Size: 2899 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170720/8fcfae5b/attachment.bin>
More information about the llvm-commits
mailing list