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

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Another testcase running into this.

char *bar (void);
__INTPTR_TYPE__ baz (void);

void
foo (__INTPTR_TYPE__ *q)
{
  char *p = bar ();
  __INTPTR_TYPE__ a = baz ();
  __INTPTR_TYPE__ b = baz ();
  int i = 0;
#define X q[i++] = a; q[i++] = b; a = a + b; b = b + a;
#define Y X X X X X X X X X X
#define Z Y Y Y Y Y Y Y Y Y Y
  Z Z Z Z Z Z Z Z Z Z
  p[a] = 1;
  p[b] = 2;
}

With Y X X X instead of the 10 Zs I see with -O1 -ftime-report:
 dead store elim1                   :   0.43 ( 81%)   0.00 (  0%)   0.43 ( 81%)
      6 kB (  0%)
With Y X X X X:
 dead store elim1                   :   1.15 ( 88%)   0.00 (  0%)   1.15 ( 88%)
      7 kB (  0%)
With Y X X X X X:
 dead store elim1                   :   3.29 ( 92%)   0.00 (  0%)   3.29 ( 91%)
      7 kB (  0%)
With Y X X X X X X:
 dead store elim1                   :   9.18 ( 93%)   0.00 (  0%)   9.19 ( 93%)
      8 kB (  0%)
With Y X X X X X X X:
 dead store elim1                   :  24.71 ( 94%)   0.00 (  0%)  24.73 ( 94%)
      8 kB (  1%)
With Y X X X X X X X X:
 dead store elim1                   :  68.89 ( 94%)   0.00 (  0%)  68.94 ( 94%)
      9 kB (  1%)
With Y X X X X X X X X X:
 dead store elim1                   : 190.42 ( 95%)   0.00 (  0%) 190.56 ( 95%)
      9 kB (  1%)
With Y Y:
 dead store elim1                   : 522.59 ( 95%)   0.00 (  0%) 522.96 ( 95%)
     10 kB (  1%)

Reply via email to