[cfe-dev] Adding a new pragma to Clang

Hal Finkel hfinkel at anl.gov
Mon Jan 6 08:02:39 PST 2014


----- Original Message -----
> From: "Alp Toker" <alp at nuanti.com>
> To: "Renato Golin" <renato.golin at linaro.org>, "Hal Finkel" <hfinkel at anl.gov>
> Cc: "Richard Smith" <richard at metafoo.co.uk>, "Clang Dev" <cfe-dev at cs.uiuc.edu>
> Sent: Monday, January 6, 2014 9:42:01 AM
> Subject: Re: [cfe-dev] Adding a new pragma to Clang
> 
> 
> On 06/01/2014 15:32, Renato Golin wrote:
> > On 6 January 2014 15:20, Hal Finkel <hfinkel at anl.gov
> > <mailto:hfinkel at anl.gov>> wrote:
> >
> >     I think he'll need something very close to the OpenMP syntax.
> >
> >
> > Or that.
> >
> > I don't really mind *how* it's represented in C code, as long as it
> > does what we need in IR in the long run: lexical block level
> > metadata.
> 
> The C frontend syntax is the one that's going to ship and get used in
> tens of thousands of software projects, and which we might still be
> having to support 15 years later when the CPU architectures have all
> changed. It's quite likely in that lifetime that other vendors will
> try
> to do a compatible implementation too if it sees adoption.

I recommend that, where practical, we use a syntax compatible with other implementations. For example, Intel's compiler implements some of these which I believe we'd like to have:

  ivdep
  loop_count
  vector/novector
  unroll/nounroll

http://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-346BAAA5-CF2D-4A26-9194-CA840BFB34E5.htm

IBM's compiler also has a few of these (unroll, novector, etc.):

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Frupragen.htm

 -Hal

> 
> So from my point of view the backend implementation, and even the AST
> representation if there is any, is a secondary almost trivial issue
> compared to specifying a new extension to the language. But that's my
> take as a parser maintainer  :-)
> 
> Incidentally I don't think there needs to be an AST representation as
> such. This looks like it can be supported with a lookup map for
> statements / expressions, and synthesized attributes for functions.
> 
> The list of commands you posted in the previous email is a good
> starting
> point, but I'd like to see real code samples of what you want to
> work.
> 
> Can it annotate statements, declarations or both? Is it expected to
> survive through template instantiations?

Yes.

> Do the directives require
> semantic analysis?

This is an interesting point; some of them might.

> Those are the questions that'll determine how this
> is
> implemented.
> 
> Hal's suggestion to plug into the OpenMP directives is also very
> interesting.

Just trying to figure out how to not reinvent the wheel yet again ;)

 -Hal

> 
> Alp.
> 
> >
> > cheers,
> > --renato
> 
> --
> http://www.nuanti.com
> the browser experts
> 
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the cfe-dev mailing list