public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure
@ 2023-11-07 15:56 acoplan at gcc dot gnu.org
  2023-11-07 16:40 ` [Bug target/112426] " pinskia at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: acoplan at gcc dot gnu.org @ 2023-11-07 15:56 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 112426
           Summary: sched1 pessimizes codegen on aarch64 by increasing
                    register pressure
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: acoplan at gcc dot gnu.org
  Target Milestone: ---

Consider this example:

long *foo (long *p, long x, long y)
{
  p[0] = x;
  p[1] = y;
  return p + 2;
}

on aarch64 at -O2 we get:

foo:
        mov     x3, x0
        add     x0, x0, 16
        stp     x1, x2, [x3]
        ret

and disabling sched1 (with -fno-schedule-insns) we get:

foo:
        stp     x1, x2, [x0]
        add     x0, x0, 16
        ret

so it looks like sched1 is making things worse. The RTL going in to sched1 is:

    8: [r93:DI]=r98:DI
      REG_DEAD r98:DI
    9: [r93:DI+0x8]=r99:DI
      REG_DEAD r99:DI
   10: NOTE_INSN_DELETED
   15: x0:DI=r93:DI+0x10

which allows r93 to be allocated to x0, but sched1 moves the add above the
stores, leading to:

   15: x0:DI=r93:DI+0x10
      REG_DEAD r93:DI
    8: [r93:DI]=r98:DI
      REG_DEAD r98:DI
    9: [r93:DI+0x8]=r99:DI

which requires r93 to be allocated to a separate register, and leads to an
additional move.

Note that the codegen with sched1 disabled also presents an stp writeback
opportunity, whereas this isn't the case with sched1 enabled.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
@ 2023-11-07 16:40 ` pinskia at gcc dot gnu.org
  2023-11-08  8:03 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-11-07 16:40 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This looks almost the same as PR 100697 really.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
  2023-11-07 16:40 ` [Bug target/112426] " pinskia at gcc dot gnu.org
@ 2023-11-08  8:03 ` rguenth at gcc dot gnu.org
  2023-11-08 10:39 ` acoplan at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-11-08  8:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
sched1 does not care for register pressure unless you enable -fsched-pressure,
so this isn't a bug unless you have this enabled.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
  2023-11-07 16:40 ` [Bug target/112426] " pinskia at gcc dot gnu.org
  2023-11-08  8:03 ` rguenth at gcc dot gnu.org
@ 2023-11-08 10:39 ` acoplan at gcc dot gnu.org
  2023-11-09 18:28 ` wilco at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: acoplan at gcc dot gnu.org @ 2023-11-08 10:39 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Seems to happen with/without -fsched-pressure FWIW.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2023-11-08 10:39 ` acoplan at gcc dot gnu.org
@ 2023-11-09 18:28 ` wilco at gcc dot gnu.org
  2023-11-09 18:30 ` pinskia at gcc dot gnu.org
  2023-11-09 18:35 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: wilco at gcc dot gnu.org @ 2023-11-09 18:28 UTC (permalink / raw)
  To: gcc-bugs

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

Wilco <wilco at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |wilco at gcc dot gnu.org

--- Comment #4 from Wilco <wilco at gcc dot gnu.org> ---
That first REG_DEAD note after scheduling looks wrong:

   15: x0:DI=r93:DI+0x10
      REG_DEAD r93:DI
    8: [r93:DI]=r98:DI
      REG_DEAD r98:DI
    9: [r93:DI+0x8]=r99:DI

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2023-11-09 18:28 ` wilco at gcc dot gnu.org
@ 2023-11-09 18:30 ` pinskia at gcc dot gnu.org
  2023-11-09 18:35 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-11-09 18:30 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Wilco from comment #4)
> That first REG_DEAD note after scheduling looks wrong:
> 
>    15: x0:DI=r93:DI+0x10
>       REG_DEAD r93:DI
>     8: [r93:DI]=r98:DI
>       REG_DEAD r98:DI
>     9: [r93:DI+0x8]=r99:DI

IIRC REG_DEADs are updated via df before IRA so they can be ignored here.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug target/112426] sched1 pessimizes codegen on aarch64 by increasing register pressure
  2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2023-11-09 18:30 ` pinskia at gcc dot gnu.org
@ 2023-11-09 18:35 ` pinskia at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-11-09 18:35 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #5)
> IIRC REG_DEADs are updated via df before IRA so they can be ignored here.

Yes see ira in ira.cc:
  df_note_add_problem ();

That will recompute the REG_DEAD (removing all old ones too).

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-11-09 18:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-07 15:56 [Bug target/112426] New: sched1 pessimizes codegen on aarch64 by increasing register pressure acoplan at gcc dot gnu.org
2023-11-07 16:40 ` [Bug target/112426] " pinskia at gcc dot gnu.org
2023-11-08  8:03 ` rguenth at gcc dot gnu.org
2023-11-08 10:39 ` acoplan at gcc dot gnu.org
2023-11-09 18:28 ` wilco at gcc dot gnu.org
2023-11-09 18:30 ` pinskia at gcc dot gnu.org
2023-11-09 18:35 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).