[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
This commit is contained in:
Prateek Pardeshi 2021-03-03 01:29:35 -06:00 committed by Michael Kruse
parent f7e675b3da
commit 50e34497ac
2 changed files with 8 additions and 7 deletions

View File

@ -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);

View File

@ -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 *