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

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #7)
> Created attachment 60871 [details]
> Patch which I will be submitting for GCC 16

+FAIL: gcc.dg/ipa/ipa-icf-20.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-20.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-21.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-21.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-23.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-23.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-25.c scan-ipa-dump icf "Equal symbols: 2"
+FAIL: gcc.dg/ipa/ipa-icf-25.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-25.c scan-ipa-dump icf "Semantic equality
hit:zip/[0-9+]+->zap/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-26.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-26.c scan-ipa-dump icf "Semantic equality
hit:destroy/[0-9+]+->remove/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-28.c scan-ipa-dump icf "different decl attributes"
+FAIL: gcc.dg/ipa/ipa-icf-3.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-3.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-35.c scan-ipa-dump icf "Equal symbols: 3"
+FAIL: gcc.dg/ipa/ipa-icf-35.c scan-ipa-dump icf "Semantic equality
hit:f1/[0-9+]+->f2/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-38.c scan-ltrans-tree-dump-not optimized "Function
bar"
+FAIL: gcc.dg/ipa/ipa-icf-38.c scan-wpa-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-38.c scan-wpa-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->bar/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-5.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-5.c scan-ipa-dump icf "Semantic equality
hit:f1/[0-9+]+->f2/[0-9+]+"
+FAIL: gcc.dg/ipa/ipa-icf-7.c scan-ipa-dump icf "Equal symbols: 1"
+FAIL: gcc.dg/ipa/ipa-icf-7.c scan-ipa-dump icf "Semantic equality
hit:foo/[0-9+]+->foo2/[0-9+]+"

+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++17  scan-ipa-dump icf "Equal symbols:
1"
+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++17  scan-ipa-dump icf "Semantic
equality hit:"
+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++26  scan-ipa-dump icf "Equal symbols:
1"
+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++26  scan-ipa-dump icf "Semantic
equality hit:"
+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++98  scan-ipa-dump icf "Equal symbols:
1"
+FAIL: g++.dg/ipa/ipa-icf-2.C  -std=gnu++98  scan-ipa-dump icf "Semantic
equality hit:"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++17  scan-ipa-dump icf "Equal symbols:
2"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++17  scan-ipa-dump icf "Semantic
equality hit:.*bar.*->.*foo.*"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++17  scan-ipa-dump icf "Semantic
equality hit:.*nula.*->.*zero.*"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++26  scan-ipa-dump icf "Equal symbols:
2"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++26  scan-ipa-dump icf "Semantic
equality hit:.*bar.*->.*foo.*"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++26  scan-ipa-dump icf "Semantic
equality hit:.*nula.*->.*zero.*"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++98  scan-ipa-dump icf "Equal symbols:
2"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++98  scan-ipa-dump icf "Semantic
equality hit:.*bar.*->.*foo.*"
+FAIL: g++.dg/ipa/ipa-icf-3.C  -std=gnu++98  scan-ipa-dump icf "Semantic
equality hit:.*nula.*->.*zero.*"
+FAIL: g++.dg/ipa/ipa-icf-4.C  -std=gnu++17  scan-ipa-dump icf "Equal symbols:
[67]"
+FAIL: g++.dg/ipa/ipa-icf-4.C  -std=gnu++26  scan-ipa-dump icf "Equal symbols:
[67]"
+FAIL: g++.dg/ipa/ipa-icf-4.C  -std=gnu++98  scan-ipa-dump icf "Equal symbols:
[67]"



Because who wrote the testcases decided not have a complex testcases. None of
these ICF are useful either. 

ipa-icf-20.c for an example is just:
```
__attribute__ ((noinline))
float foo()
{
  return sin(12.4f);
}

__attribute__ ((noinline))
float bar()
{
  return sin(12.4f);
}
```

which gets optimized to a return of a constant. So I think -fno-builtins here
might be good thing to add.

ipa-icf-21.c

is:
```
__attribute__ ((noinline))
void foo()
{
  float x = 1.2345f;
  __m128 v =_mm_load1_ps(&x);
}
```

And those statements get optimized away. Maybe `-fno-tree-dce ` is needed here.
I think most of these were written before we did some simple cleanups before
IPA passes; I have noticed that most of the functions do become empty functions
and not actually testing ICF at all.

23.c is `return 123;` which is exactly one where we don't need to do it.

25.c shows why maybe not doing ICF for functions with just a return might cause
issues BUT it is artificial testcase and requires noinline and -fno-ipa-vrp (so
it does cause function call be turned into a value due to return value being
constant).

35.c might be another reason why NOT doing it for functions just returning is
worse off; but I suspect it does not matter because a, b, c, and d all should
be inlined anyways afterwards so I doubt it.

Reply via email to