summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/include/polly/CodeGen/IslNodeBuilder.h8
-rw-r--r--polly/lib/CodeGen/CodeGeneration.cpp2
-rw-r--r--polly/lib/CodeGen/IslNodeBuilder.cpp3
3 files changed, 13 insertions, 0 deletions
diff --git a/polly/include/polly/CodeGen/IslNodeBuilder.h b/polly/include/polly/CodeGen/IslNodeBuilder.h
index 3affb6807d1..cefc2927ce1 100644
--- a/polly/include/polly/CodeGen/IslNodeBuilder.h
+++ b/polly/include/polly/CodeGen/IslNodeBuilder.h
@@ -58,6 +58,11 @@ public:
/// @return A referecne to the associated block generator.
BlockGenerator &getBlockGenerator() { return BlockGen; }
+ /// @brief Return the parallel subfunctions that have been created.
+ const ArrayRef<Function *> getParallelSubfunctions() const {
+ return ParallelSubfunctions;
+ }
+
protected:
Scop &S;
PollyIRBuilder &Builder;
@@ -103,6 +108,9 @@ protected:
// ivs.
IslExprBuilder::IDToValueTy IDToValue;
+ /// @brief A collection of all parallel subfunctions that have been created.
+ SmallVector<Function *, 8> ParallelSubfunctions;
+
/// Generate code for a given SCEV*
///
/// This function generates code for a given SCEV expression. It generated
diff --git a/polly/lib/CodeGen/CodeGeneration.cpp b/polly/lib/CodeGen/CodeGeneration.cpp
index ec10b3e6255..c5c6527d911 100644
--- a/polly/lib/CodeGen/CodeGeneration.cpp
+++ b/polly/lib/CodeGen/CodeGeneration.cpp
@@ -202,6 +202,8 @@ public:
}
verifyGeneratedFunction(S, *EnteringBB->getParent());
+ for (auto *SubF : NodeBuilder.getParallelSubfunctions())
+ verifyGeneratedFunction(S, *SubF);
// Mark the function such that we run additional cleanup passes on this
// function (e.g. mem2reg to rediscover phi nodes).
diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp
index b21136e5a4f..9e078114e6e 100644
--- a/polly/lib/CodeGen/IslNodeBuilder.cpp
+++ b/polly/lib/CodeGen/IslNodeBuilder.cpp
@@ -622,6 +622,9 @@ void IslNodeBuilder::createForParallel(__isl_take isl_ast_node *For) {
BasicBlock::iterator AfterLoop = Builder.GetInsertPoint();
Builder.SetInsertPoint(&*LoopBody);
+ // Remember the parallel subfunction
+ ParallelSubfunctions.push_back(LoopBody->getFunction());
+
// Save the current values.
auto ValueMapCopy = ValueMap;
IslExprBuilder::IDToValueTy IDToValueCopy = IDToValue;
OpenPOWER on IntegriCloud