[Polly][Refactor] IslAst [4/7]

Johannes Doerfert jdoerfert at codeaurora.org
Thu Jul 24 09:07:59 PDT 2014


r213870

--

Johannes Doerfert
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
The Linux Foundation


-----Original Message-----
From: Tobias Grosser [mailto:tobias at grosser.es] 
Sent: Wednesday, July 23, 2014 10:33 PM
To: Johannes Doerfert; llvm-commits at cs.uiuc.edu
Cc: 'Yabin Hu'; 'David Peixotto'
Subject: Re: [Polly][Refactor] IslAst [4/7]

On 23/07/2014 22:46, Johannes Doerfert wrote:
> Here is yet another patch of the IslAst refactoring series.

LGTM.


> +
> +  /// @brief The dependence information used for the parallelism check.
>     Dependences *Deps;
>
> -  // We are inside a parallel for node.
> -  int InParallelFor;
> +  /// @brief Flag to indicate that we are inside a parallel for node.
> +  bool InParallelFor;
> +
> +  /// @brief The last iterator id created for the current SCoP.
> +  isl_id *LastForNodeId;
>   };
>
>   // Print a loop annotated with OpenMP or vector pragmas.
> @@ -237,52 +244,13 @@ static __isl_give isl_id
*astBuildBeforeFor(__isl_keep isl_ast_build *Build,
>     IslAstUserPayload *NodeInfo = new IslAstUserPayload();
>     isl_id *Id = isl_id_alloc(isl_ast_build_get_ctx(Build), "", NodeInfo);
>     Id = isl_id_set_free_user(Id, freeIslAstUserPayload);
> +  BuildInfo->LastForNodeId = Id;
>
>     markOpenmpParallel(Build, BuildInfo, NodeInfo);
>
>     return Id;
>   }
>
> -// Returns 0 when Node contains loops, otherwise returns -1. This 
> search -// function uses ISL's way to iterate over lists of 
> isl_ast_nodes with -// isl_ast_node_list_foreach. Please use the 
> single argument wrapper function -// that returns a bool instead of using
this function directly.
> -static int containsLoops(__isl_take isl_ast_node *Node, void *User) {
> -  if (!Node)
> -    return -1;
> -
> -  switch (isl_ast_node_get_type(Node)) {
> -  case isl_ast_node_for:
> -    isl_ast_node_free(Node);
> -    return 0;
> -  case isl_ast_node_block: {
> -    isl_ast_node_list *List = isl_ast_node_block_get_children(Node);
> -    int Res = isl_ast_node_list_foreach(List, &containsLoops, nullptr);
> -    isl_ast_node_list_free(List);
> -    isl_ast_node_free(Node);
> -    return Res;
> -  }
> -  case isl_ast_node_if: {
> -    int Res = -1;
> -    if (0 == containsLoops(isl_ast_node_if_get_then(Node), nullptr) ||
> -        (isl_ast_node_if_has_else(Node) &&
> -         0 == containsLoops(isl_ast_node_if_get_else(Node), nullptr)))
> -      Res = 0;
> -    isl_ast_node_free(Node);
> -    return Res;
> -  }
> -  case isl_ast_node_user:
> -  default:
> -    isl_ast_node_free(Node);
> -    return -1;
> -  }
> -}
> -
> -// Returns true when Node contains loops.
> -static bool containsLoops(__isl_take isl_ast_node *Node) {
> -  return 0 == containsLoops(Node, nullptr); -}
> -

Nice!

Tobias





More information about the llvm-commits mailing list