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

            Bug ID: 100359
           Summary: missed optimization for dead code elimination at -O3
                    (vs. -O2)
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhendong.su at inf dot ethz.ch
  Target Milestone: ---

This seems to be a very recent regression as it does not reproduce for GCC 11.1
(and earlier).  

[524] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/suz-local/software/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--prefix=/local/suz-local/software/local/gcc-trunk --enable-languages=c,c++
--disable-werror --enable-multilib --with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.0.0 20210430 (experimental) [master revision
4cf3b10f27b:939d67a66c9:c111f6066043d3b7bc4141ca0411eae9294aa6c5] (GCC) 
[525] % 
[525] % gcctk -O2 -S -o O2.s small.c
[526] % gcctk -O3 -S -o O3.s small.c
[527] % 
[527] % wc O2.s O3.s
  37   83  635 O2.s
  49  109  808 O3.s
  86  192 1443 total
[528] % 
[528] % grep foo O2.s
[529] % grep foo O3.s
        call    foo
[530] % 
[530] % cat small.c
extern void foo(void);
static int b, f, *a = &b;
int **c = &a;
static void d() {
  int g, h;
  for (f = 0; f < 1; f++) {
    int *i = &b;
    {
      int *j[3], **k = &a;
      for (g = 0; g < 3; g++)
        for (h = 0; h < 1; h++)
          j[g] = &b;
      *k = j[0];
    }
    *c = i;
  }
}
int main() {
  d();
  *a = 0;
  if (**c)
    foo();
  return 0;
}

Reply via email to