This is the mail archive of the gcc-help@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]
Other format: [Raw text]

Re: Amusing bad code generation for ARM


Tobias RingstrÃm <tobias@ringis.se> writes:

>     struct dev_t {
>         volatile unsigned R0;
>         volatile unsigned R1;
>     };

> Note how the moveq/movne pairs always load the same value. If equal
> load 5120 else load 5120. Also note that it loads the addresses every
> iteration instead of just once before the (unrolled) loop.
>
> It's also pointlessly reloading the value of *d ("[r0]") to r3 every
> time, which is a regression from 4.4.3, and the root of my primary
> performance regression.
>
> Should I file zero, one or two bugs about this?

This is presumably happening because of the volatile declarations.

One bug report should suffice.  Thanks.

Ian


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