Hi Jakub,
        Please see my response below.
Thanks,

Balaji V. Iyer.

> -----Original Message-----
> From: Jakub Jelinek [mailto:ja...@redhat.com]
> Sent: Wednesday, May 22, 2013 2:15 AM
> To: Richard Henderson
> Cc: Iyer, Balaji V; 'Joseph S. Myers'; 'Aldy Hernandez'; 'gcc-patches'
> Subject: Re: [PING]RE: [patch] cilkplus: Array notation for C patch
> 
> On Tue, May 21, 2013 at 07:57:10PM -0700, Richard Henderson wrote:
> > >+      /* This will create the if statement label.  */
> > >+      if_stmt_label[ii] = build_decl (location, LABEL_DECL, NULL_TREE,
> > >+                                     void_type_node);
> > >+      DECL_CONTEXT (if_stmt_label[ii]) = current_function_decl;
> > >+      DECL_ARTIFICIAL (if_stmt_label[ii]) = 0;
> > >+      DECL_IGNORED_P (if_stmt_label[ii]) = 1;
> > >+
> > >+      /* This label statement will point to the loop body.  */
> > >+      body_label[ii] = build_decl (location, LABEL_DECL, NULL_TREE,
> > >+                                  void_type_node);
> > >+      DECL_CONTEXT (body_label[ii]) = current_function_decl;
> > >+      DECL_ARTIFICIAL (body_label[ii]) = 0;
> > >+      DECL_IGNORED_P (body_label[ii]) = 1;
> > >+      body_label_expr[ii] = build1 (LABEL_EXPR, void_type_node,
> > >+ body_label[ii])
> > >;
> > >+
> > >+      /* This will create the exit label, i.e. where the while loop will 
> > >branch
> > >+        out of.  */
> > >+      exit_label[ii] = build_decl (location, LABEL_DECL, NULL_TREE,
> > >+                                  void_type_node);
> > >+      DECL_CONTEXT (exit_label[ii]) = current_function_decl;
> > >+      DECL_ARTIFICIAL (exit_label[ii]) = 0;
> > >+      DECL_IGNORED_P (exit_label[ii]) = 1;
> > >+      exit_label_expr[ii] = build1 (LABEL_EXPR, void_type_node, 
> > >exit_label[ii]);
> > >+    }
> >
> > Is there any particular reason why you're open-coding the loop
> > expansion instead of using existing infrastructure like c_finish_loop?
> >
> > Yes, the specific example of c_finish_loop goes against the c++
> > sharing, but it's fairly easy to add new interfaces to c-common.h that
> > are implemented in the two front ends.
> 
> Furthermore, do you want to generate just normal loop out of it, or shouldn't
> we generate a #pragma omp simd loop out of it instead?
> Haven't read the spec if array notation guarantees lack of forward/backward
> loop dependencies and what are the restrictions on the calls you can do 
> inside of
> array notation.  Perhaps the lowering to normal vs. simd loop could depend on
> whether all called functions in the expression are elemental.

What you mentioned is a good performance optimization. It is something I have  
planned to do in future. But, the spec does not require the loop (or array 
notation expansion) to be vectorized.

> 
>       Jakub

Reply via email to