[PATCH] Have HasSideEffects() return false for __attribute__((const)) functions

Hal Finkel hfinkel at anl.gov
Mon Mar 23 09:44:08 PDT 2015


----- Original Message -----
> From: "Aaron Ballman" <aaron.ballman at gmail.com>
> To: reviews+D8548+public+9c0a033e02b7b4b5 at reviews.llvm.org
> Cc: "Michael M Kuperstein" <michael.m.kuperstein at intel.com>, "Richard Smith" <richard at metafoo.co.uk>, "Hal Finkel"
> <hfinkel at anl.gov>, "llvm cfe" <cfe-commits at cs.uiuc.edu>
> Sent: Monday, March 23, 2015 11:38:02 AM
> Subject: Re: [PATCH] Have HasSideEffects() return false for __attribute__((const)) functions
> 
> On Mon, Mar 23, 2015 at 12:33 PM, hfinkel at anl.gov <hfinkel at anl.gov>
> wrote:
> > In http://reviews.llvm.org/D8548#145253, @mkuper wrote:
> >
> >> I think PureAttr isn't strong enough.
> >>
> >> char foo(char *a)
> >>  {
> >>
> >>   return *a;
> >>
> >> }
> >>
> >> is pure, but isn't side-effect free.
> >
> >
> > Loads are not considered side effects currently, however. This
> > works fine:
> >
> >   void bar(int *i) {
> >     __builtin_assume(*i > 0);
> >   }
> >
> > and, thus, my recommendation ;)
> 
> Some loads are side-effecting though, such as volatile loads:
> 
> int foo(volatile int *a) {
>   return *a;
> }
> 
> Can that be marked __attribute__((pure))? Or can pure access a
> volatile global variable?

I think that the answer is no, but only by indirect inference. The GCC docs say:

[from GCC docs]
Many functions have no effects except the return value and their return value depends only on the parameters and/or global variables. Such a function can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be.
[end from GCC docs]

and since volatile loads often cannot be CSE'd, I suspect they're meant to be excluded. What do you think?

 -Hal

> 
> ~Aaron
> 
> >
> >
> > http://reviews.llvm.org/D8548
> >
> > EMAIL PREFERENCES
> >   http://reviews.llvm.org/settings/panel/emailpreferences/
> >
> >
> 

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



More information about the cfe-commits mailing list