On Mon, Aug 3, 2020 at 2:20 AM Richard Biener via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> On Sun, Aug 2, 2020 at 6:31 PM Roger Sayle <ro...@nextmovesoftware.com> wrote:
> >
> >
> >
> > PR rtl-optimization/60473 was a code quality regression that has
> >
> > been cured by improvements to register allocation.  For the function
> >
> > in the test case, GCC 4.4, 4.5 and 4.6 generated very poor code
> >
> > requiring two mov instructions:
> >
> >
> >
> > foo:    rdtsc
> >
> >         mov     rcx, rax
> >
> >         mov     rax, rdx
> >
> >         sal     rax, 32
> >
> >         or      rax, rcx
> >
> >         ret
> >
> >
> >
> > GCC 4.7 and 4.8 (when the PR was filed) produced better but
> >
> > still poor code with one mov instruction:
> >
> >
> >
> > foo:    rtdsc
> >
> >         sal     rdx, 32
> >
> >         or      rdx, rax
> >
> >         mov     rax, rdx
> >
> >         ret
> >
> >
> >
> > Since GCC 4.9 (including current mainline), it generates optimal
> >
> > code with no mov instructions, matching what used to be generated
> >
> > in GCC 4.1.
> >
> >
> >
> > foo:    rdtsc
> >
> >         sal     rdx, 32
> >
> >         or      rax, rdx
> >
> >         ret
> >
> >
> >
> > This test case, which has been tested on x86_64-pc-linux-gnu,
> >
> > simply checks that we don't regress again in future.
> >
> > Ok for mainline?
>
> I think you need to restrict this to lp64, at least it fails for me with -m32.
> It also passes with -mx32 but not sure how the perfect target selector
> would look like.

/* { dg-do compile { target { ! ia32 } } } */

> Otherwise looks OK.
>
> Richard.
>

-- 
H.J.

Reply via email to