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

            Bug ID: 86892
           Summary: RTL CSE  commoning trivial constants across call
                    and/or too early
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pthaugen at gcc dot gnu.org
                CC: dje at gcc dot gnu.org, jakub at gcc dot gnu.org,
                    rsandifo at gcc dot gnu.org, segher at gcc dot gnu.org,
                    wschmidt at gcc dot gnu.org
  Target Milestone: ---
              Host: powerpc64le-unknown-linux-gnu
            Target: powerpc64le-unknown-linux-gnu
             Build: powerpc64le-unknown-linux-gnu

For the following testcase cse.c will common the constant 0 across the call
which then requires the use of a non-volatile register (and prologue/epilogue
save/restore).

void bar();
int a, b;
void foo()
{
  a = 0;
  bar();
  b = 0;
}


I have also observed a situation where early cse of a constant prevented some
combine transformations from occurring because the register's lifetime had been
extended.

The feeling is that cse of trivial constants should not be done so early in the
pass schedule and should not be done across calls at all.

Reply via email to