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

            Bug ID: 87949
           Summary: PowerPC saves CR registers across calls
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: meissner at gcc dot gnu.org
  Target Milestone: ---

While there are 3 saved CR registers (CR2, CR3, CR4) in the PowerPC, we really,
really, really should not be saving CR values across calls due to the amount of
time it takes to save and restore these registers.

This shows up in the Spec 2006 perlbench benchmark where the hot function
(S_regmatch in regexep.c) saves all 3 CRs at the function prologue, and has to
restore these registers at the epilog.

It also shows up in the gamess benchmark (which is where I found it in doing
some future code).  Note only do functions in gamess save all 3 CR registers,
at least one function decides to use caller saves to save a 4th CR register
across a call.

I'm not sure whether this is a target feature or a machine independent feature
at this point.  My first attempt at fixing it via HARD_REGNO_CALLER_SAVE_MODE
fails due to LRA not supporting it returning VOIDmode (PR 87948).

Reply via email to