[llvm-commits] [PATCH][polly] isl: Detect openmp parallel loops

Sebastian Pop spop at codeaurora.org
Wed Dec 12 22:05:40 PST 2012


Hi Tobi,

attached is your patch updated with all my comments, and a second patch that
implements the innermost parallel loop detection.

Thanks,
Sebastian

Sebastian Pop wrote:
> Hi Tobi,
> 
> Thanks for working on this.  I have a few comments inline.
> 
> Tobias Grosser wrote:
> > +// Information about an ast node.
> > +struct AstNodeUserInfo {
> > +  // The node is openmp parallel.
> > +  int IsOpenmp;
> 
> I don't like the name IsOpenmp because we are referencing OpenMP: we can very
> well generate code calling POSIX threads and that's not a good reason to call it
> IsPosix either.
> 
> I was thinking about calling it IsParallel, but after thinking about it, I don't
> think this is a good name either: we are tagging the outermost parallel loop.
> What about IsOutermostParallel?  For the SIMD vectorization we would tag the
> loops with IsInnermostParallel.
> 
> > +static __isl_give isl_printer *printForOpenmp(__isl_keep isl_ast_node *Node,
> > +        __isl_take isl_printer *Printer,
> > +        __isl_take isl_ast_print_options *PrintOptions) {
> 
> indent
> 
> > +  Printer = isl_printer_start_line(Printer);
> > +  Printer = isl_printer_print_str(Printer, "#pragma omp parallel for");
> 
> I also don't like that we are generating openmp pragmas in the pretty printer.
> As I don't have an alternative for this, I am fine with keeping this notation.
> 
> > +static __isl_give isl_printer *printFor(__isl_take isl_printer *Printer,
> > +        __isl_take isl_ast_print_options *PrintOptions,
> > +        __isl_keep isl_ast_node *Node, void *User) {
> 
> indent
> 
> > +  isl_id *Id;
> > +  int Openmp;
> > +
> > +  Openmp = 0;
> > +  Id = isl_ast_node_get_annotation(Node);
> > +
> > +  if (Id) {
> > +    struct AstNodeUserInfo *Info;
> > +
> > +    Info = (struct AstNodeUserInfo *) isl_id_get_user(Id);
> > +    if (Info && Info->IsOpenmp)
> > +      Openmp = 1;
> > +  }
> > +
> > +  if (Openmp)
> > +    Printer = printForOpenmp(Node, Printer, PrintOptions);
> > +  else
> > +    Printer = isl_ast_node_for_print(Node, Printer, PrintOptions);
> > +
> > +  isl_id_free(Id);
> 
> You may free an Id that is NULL here: see the "if (Id)" above?
> 
> > +static __isl_give isl_ast_node *astBuildAfterFor(__isl_take isl_ast_node *Node,
> > +        __isl_keep isl_ast_build *Build, void *User) {
> 
> indent
> 
> >  static __isl_give isl_ast_node *AtEachDomain(__isl_keep isl_ast_node *Node,
> > -       __isl_keep isl_ast_build *Context, void *User)
> > +	__isl_keep isl_ast_build *Context, void *User)
> 
> indent
> 
> Thanks,
> Sebastian
> -- 
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-isl-Detect-openmp-parallelism.patch
Type: text/x-diff
Size: 19949 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121213/d1bc797b/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-isl-detect-vector-parallelism.patch
Type: text/x-diff
Size: 5795 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121213/d1bc797b/attachment-0001.patch>


More information about the llvm-commits mailing list