From 50e34497ac8d2a74ef644519df033e16876d0c25 Mon Sep 17 00:00:00 2001 From: Prateek Pardeshi Date: Wed, 3 Mar 2021 01:29:35 -0600 Subject: [PATCH] [Polly] Refabricating IsOutermostParallel() from Integer Set Libarary(ISL) to take the C++ wrapper Polly use algorithms from the Integer Set Library (isl), which is a library written in C and which is incompatible with the rest of the LLVM as it is written in C++. Changes made: * Refabricating IsOutermostParallel() to take C++ bindings instead of reference-counting in C isl lib. * Addition of manage_copy() to be used as reference for C objects instead of IsOutermostParallel() Reviewed By: Meinersbur Differential Revision: https://reviews.llvm.org/D97751 --- polly/include/polly/CodeGen/IslAst.h | 2 +- polly/lib/CodeGen/IslAst.cpp | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/polly/include/polly/CodeGen/IslAst.h b/polly/include/polly/CodeGen/IslAst.h index 9bc981e..c6f8778 100644 --- a/polly/include/polly/CodeGen/IslAst.h +++ b/polly/include/polly/CodeGen/IslAst.h @@ -145,7 +145,7 @@ public: static bool isParallel(__isl_keep isl_ast_node *Node); /// Is this loop an outermost parallel loop? - static bool isOutermostParallel(__isl_keep isl_ast_node *Node); + static bool isOutermostParallel(const isl::ast_node &Node); /// Is this loop an innermost parallel loop? static bool isInnermostParallel(const isl::ast_node &Node); diff --git a/polly/lib/CodeGen/IslAst.cpp b/polly/lib/CodeGen/IslAst.cpp index 1b079a3..fe88182 100644 --- a/polly/lib/CodeGen/IslAst.cpp +++ b/polly/lib/CodeGen/IslAst.cpp @@ -186,7 +186,7 @@ static isl_printer *cbPrintFor(__isl_take isl_printer *Printer, if (IslAstInfo::isExecutedInParallel(Node)) Printer = printLine(Printer, OmpPragmaStr); - else if (IslAstInfo::isOutermostParallel(Node)) + else if (IslAstInfo::isOutermostParallel(isl::manage_copy(Node))) Printer = printLine(Printer, KnownParallelStr + BrokenReductionsStr); isl_pw_aff_free(DD); @@ -483,7 +483,7 @@ static void walkAstForStatistics(__isl_keep isl_ast_node *Ast) { NumParallel++; if (IslAstInfo::isInnermostParallel(isl::manage_copy(Node))) NumInnermostParallel++; - if (IslAstInfo::isOutermostParallel(Node)) + if (IslAstInfo::isOutermostParallel(isl::manage_copy(Node))) NumOutermostParallel++; if (IslAstInfo::isReductionParallel(Node)) NumReductionParallel++; @@ -602,7 +602,7 @@ bool IslAstInfo::isInnermost(__isl_keep isl_ast_node *Node) { bool IslAstInfo::isParallel(__isl_keep isl_ast_node *Node) { return IslAstInfo::isInnermostParallel(isl::manage_copy(Node)) || - IslAstInfo::isOutermostParallel(Node); + IslAstInfo::isOutermostParallel(isl::manage_copy(Node)); } bool IslAstInfo::isInnermostParallel(const isl::ast_node &Node) { @@ -610,8 +610,8 @@ bool IslAstInfo::isInnermostParallel(const isl::ast_node &Node) { return Payload && Payload->IsInnermostParallel; } -bool IslAstInfo::isOutermostParallel(__isl_keep isl_ast_node *Node) { - IslAstUserPayload *Payload = getNodePayload(isl::manage_copy(Node)); +bool IslAstInfo::isOutermostParallel(const isl::ast_node &Node) { + IslAstUserPayload *Payload = getNodePayload(Node); return Payload && Payload->IsOutermostParallel; } @@ -636,7 +636,8 @@ bool IslAstInfo::isExecutedInParallel(__isl_keep isl_ast_node *Node) { if (!PollyParallelForce && isInnermost(Node)) return false; - return isOutermostParallel(Node) && !isReductionParallel(Node); + return isOutermostParallel(isl::manage_copy(Node)) && + !isReductionParallel(Node); } __isl_give isl_union_map * -- 2.7.4