diff options
| -rw-r--r-- | polly/include/polly/CodeGen/IslNodeBuilder.h | 8 | ||||
| -rw-r--r-- | polly/lib/CodeGen/CodeGeneration.cpp | 2 | ||||
| -rw-r--r-- | polly/lib/CodeGen/IslNodeBuilder.cpp | 3 |
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; |

