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%)