----- Original Message ----- > From: "Aaron Ballman" <[email protected]> > To: [email protected] > Cc: "Michael M Kuperstein" <[email protected]>, "Richard Smith" > <[email protected]>, "Hal Finkel" > <[email protected]>, "llvm cfe" <[email protected]> > 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, [email protected] <[email protected]> > 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 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
