https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87727

--- Comment #4 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> Most likely r265398, i.e. another far-reaching RTL change like r264897.

The change seems to be a clear pessimization on SPARC, especially on small
functions  where there is often

  mov   %o0, %g1

at the beginning now.  That's the cant_combine_insn_p part alone (I don't
really understand make_more_copies, it looks redundant with the other part).

--- gcc.0/920608-1.s    Sat Nov 17 09:40:14 2018
+++ gcc.1/920608-1.s    Sat Nov 17 09:44:54 2018
@@ -13,9 +13,8 @@
        .type   bar, #function
        .proc   04
 bar:
-       mov     %o0, %g1
+       ldsh    [%o0+2], %g1
        mov     0, %o0
-       ldsh    [%g1+2], %g1
        cmp     %g1, 44
        jmp     %o7+8
         movle  %icc, 1, %o0

--- gcc.0/930503-1.s    Sat Nov 17 09:40:15 2018
+++ gcc.1/930503-1.s    Sat Nov 17 09:44:54 2018
@@ -5,12 +5,10 @@
        .type   f, #function
        .proc   04
 f:
-       mov     %o0, %g4
-       mov     %o1, %g3
        mov     0, %g1
 .LL2:
-       ldub    [%g4+%g1], %g2
-       stb     %g2, [%g3+%g1]
+       ldub    [%o0+%g1], %g2
+       stb     %g2, [%o1+%g1]
        ba,pt   %xcc, .LL2
         add    %g1, 1, %g1
        .size   f, .-f

--- gcc.0/941014-1.s    Sat Nov 17 09:40:15 2018
+++ gcc.1/941014-1.s    Sat Nov 17 09:44:54 2018
@@ -5,8 +5,7 @@
        .type   f, #function
        .proc   04
 f:
-       mov     %o0, %g2
-       stb     %g0, [%g2]
+       stb     %g0, [%o0]
        jmp     %o7+8
         mov    %g1, %o0
        .size   f, .-f

--- gcc.0/HIcmp.s       Sat Nov 17 09:40:16 2018
+++ gcc.1/HIcmp.s       Sat Nov 17 09:44:56 2018
@@ -30,9 +30,8 @@
        .type   reg0imm1, #function
        .proc   04
 reg0imm1:
-       mov     %o0, %g1
+       sll     %o0, 16, %g1
        mov     0, %o0
-       sll     %g1, 16, %g1
        sra     %g1, 16, %g1
        cmp     %g1, 33
        jmp     %o7+8

--- gcc.0/aos.s Sat Nov 17 09:40:15 2018
+++ gcc.1/aos.s Sat Nov 17 09:44:55 2018
@@ -5,9 +5,8 @@
        .type   foo, #function
        .proc   04
 foo:
-       mov     %o0, %g1
+       cmp     %o0, 0
        mov     0, %o0
-       cmp     %g1, 0
        jmp     %o7+8
         movg   %icc, 1, %o0
        .size   foo, .-foo

--- gcc.0/b1.s  Sat Nov 17 09:40:16 2018
+++ gcc.1/b1.s  Sat Nov 17 09:44:55 2018
@@ -6,10 +6,9 @@
        .proc   04
 foo:
        orcc    %o0, %o1, %g0
-       mov     255, %g1
-       move    %icc, 0, %g1
+       mov     255, %o0
        jmp     %o7+8
-        mov    %g1, %o0
+        move   %icc, 0, %o0

--- gcc.0/complex-1.s   Sat Nov 17 09:40:16 2018
+++ gcc.1/complex-1.s   Sat Nov 17 09:44:55 2018
@@ -16,9 +16,8 @@
        .type   g, #function
        .proc   020
 g:
-       mov     %o0, %g1
+       ld      [%o0], %o1
        mov     0, %o0
-       ld      [%g1], %o1
        or      %o7, %g0, %g1
        call    v, 0
         or     %g1, %g0, %o7

--- gcc.0/stor.s        Sat Nov 17 09:40:20 2018
+++ gcc.1/stor.s        Sat Nov 17 09:45:00 2018
@@ -12,8 +12,7 @@
        st      %g2, [%g1+8]
        st      %g2, [%g1+12]
        st      %g2, [%g1+16]
-       st      %g2, [%g1+20]
        jmp     %o7+8
-        mov    %g3, %o0
+        st     %g2, [%g1+20]
        .size   foo, .-foo

Another annoying effect

--- gcc.0/pr34966.s     Sat Nov 17 09:40:17 2018
+++ gcc.1/pr34966.s     Sat Nov 17 09:44:57 2018
@@ -16,11 +16,9 @@
        .type   f, #function
        .proc   07
 f:
-       save    %sp, -120, %sp
-       std     %i0, [%fp-24]
-       ldd     [%fp-24], %f8
+       save    %sp, -112, %sp
        stx     %g0, [%fp-16]
-       std     %f8, [%fp-8]
+       std     %i0, [%fp-8]
        call    cexp, 0
         add    %fp, -16, %o0
        return  %i7+8

[-] is the baseline
[+] is with the change reverted

Reply via email to