To help LDC/GDC
Johannes Pfau
nospam at example.com
Mon Apr 8 11:15:37 PDT 2013
Am Mon, 08 Apr 2013 15:32:35 +0200
schrieb "David Nadlinger" <see at klickverbot.at>:
> On Monday, 8 April 2013 at 12:37:48 UTC, Manu wrote:
> > On 8 April 2013 21:46, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
> >> Only builtins are pure in the sense of 'C'. Even functions
> >> considered
> >> PUREstrong by the frontend may update an internal state, so
> >> the rules just
> >> don't apply. Except for maybe global functions... In any
> >> case, the only
> >> benefit you can reap from 'D pure' functions are that they are
> >> more likely
> >> to be const-folded / inlined.
> >>
> >
> > Oh my god... ..... this is the most upsetting thing I've heard
> > all day! :(
> > No really, I have been SOOOO excited for so long about this
> > optimisation
> > potential in D!
> > There's gotta be something that can be done! >_<
> >
> > Does the front end know if the function actually DOES assign to
> > any state?
> > The compiler could easily work that out, and in the event it
> > doesn't
> > actually perform any such assignment, it could be marked pure
> > for reals...
>
> Iain, are you sure about that? (No offense, but you have been
> wrong about what GCC can/can't do in the past. :P) Could you
> maybe elaborate a bit and present a counterexample? It might also
> be a question of how the »as-if« rule is really defined for pure
> function calls.
>
> In any case, if the source is available, the LLVM optimizer is
> usually very good at figuring out »pure for reals« (inferring the
> LLVM 'readnone' attribute). Obviously, this doesn't help you when
> you are doing separate compilation, though.
>
> David
I guess he only meant that the pure attribute doesn't help much,
especially when compared to the GCC __pure__ C attribute. Of course the
backend might still figure out that a function is really pure if the
source code is known, but that probably also applies to functions not
marked as pure so there's not much benefit for the backend if a
function is marked pure or not.
More information about the Digitalmars-d
mailing list