[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