This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Incrementing volatiles?


Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> said:
> "Matthias Urlichs" <smurf@noris.de> writes:
> 
> |> Hi,
> |> 
> |> The following code, using egcs-current -O2 -fomit-frame-pointer
> |> 
> |>          unsigned int foo;    afoo() { foo++; }
> |> volatile unsigned int bar;    abar() { bar++; }
> |> 
> |>   compiles, on ix86, to
> |> 
> |> afoo:   incl foo
> |>         ret
> |> abar:   movl bar,%eax
> |>         incl %eax
> |>         movl %eax,bar
> |>         ret
> |> 
> |> But actually, it should be perfectly valid to compile both to code using
> |> "incr". After all, both versions read the variable, do something with it,
> |> and then write it out.
> |> 
> |> Is there a way to convince the optimizer to do this?

> No.  volatile prevents all attempts to combine instructions, because any
> two references to a volatile variable never match.  This is how gcc
> implements the implementation defined aspects of volatile.

Sorry if I'm being dense... I just don't see any difference here: both are
fetched, incremented and written back. And if it's "implementation defined",
gcc is free to optimize this, isn't it?
-- 
Dr. Horst H. von Brand                       mailto:vonbrand@inf.utfsm.cl
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]