gcc/ChangeLog: 2019-07-24 Martin Liska <mli...@suse.cz>
* ipa-icf-gimple.c (func_checker::compatible_types_p): Do not compare alias sets. It's handled by operand_equal_p. gcc/testsuite/ChangeLog: 2019-07-24 Martin Liska <mli...@suse.cz> * c-c++-common/Wstringop-truncation-4.c: Disable IPA ICF. * gcc.dg/tree-ssa/pr64910-2.c: Likewise. * gcc.dg/tree-ssa/pr79352.c: Likewise. * gcc.dg/ipa/ipa-icf-40.c: New test. --- gcc/ipa-icf-gimple.c | 12 ------- .../c-c++-common/Wstringop-truncation-4.c | 2 +- gcc/testsuite/gcc.dg/ipa/ipa-icf-40.c | 32 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/pr64910-2.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr79352.c | 2 +- 5 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ipa/ipa-icf-40.c
diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index 375aadad412..751d5859706 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -31,7 +31,6 @@ along with GCC; see the file COPYING3. If not see #include "cgraph.h" #include "data-streamer.h" #include "gimple-pretty-print.h" -#include "alias.h" #include "fold-const.h" #include "gimple-iterator.h" #include "ipa-utils.h" @@ -209,17 +208,6 @@ func_checker::compatible_types_p (tree t1, tree t2) if (!types_compatible_p (t1, t2)) return return_false_with_msg ("types are not compatible"); - /* We do a lot of unnecesary matching of types that are not being - accessed and thus do not need to be compatible. In longer term we should - remove these checks on all types which are not accessed as memory - locations. - - For time being just avoid calling get_alias_set on types that are not - having alias sets defined at all. */ - if (type_with_alias_set_p (t1) && type_with_alias_set_p (t2) - && get_alias_set (t1) != get_alias_set (t2)) - return return_false_with_msg ("alias sets are different"); - return true; } diff --git a/gcc/testsuite/c-c++-common/Wstringop-truncation-4.c b/gcc/testsuite/c-c++-common/Wstringop-truncation-4.c index c76f2823daf..15209536add 100644 --- a/gcc/testsuite/c-c++-common/Wstringop-truncation-4.c +++ b/gcc/testsuite/c-c++-common/Wstringop-truncation-4.c @@ -3,7 +3,7 @@ Verify that -Wstringop-truncation is issued for uses of arrays and pointers to qualified forms of characters of all three types. { dg-do compile } - { dg-options "-O2 -Wall -Wstringop-truncation" } */ + { dg-options "-O2 -Wall -Wstringop-truncation -fno-ipa-icf" } */ #if __cplusplus extern "C" diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-icf-40.c b/gcc/testsuite/gcc.dg/ipa/ipa-icf-40.c new file mode 100644 index 00000000000..8d512cbc7d3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-icf-40.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-ipa-icf" } */ + +struct A { int i; char a1[10]; }; +struct B { int i; char a3[30]; }; +struct C { int i; char ax[]; }; + +static int +__attribute__((noinline)) +test_array_1 (int i, struct A *a) +{ + return __builtin_printf ("%-s\n", a->a1); +} + +static int +__attribute__((noinline)) +test_array_3 (int i, struct B *b) +{ + return __builtin_printf ("%-s\n", b->a3); +} + +struct A a = { 0, "foo" }; +struct B b = { 0, "bar" }; + +int main() +{ + test_array_1 (0, &a); + test_array_3 (0, &b); + return 0; +} + +/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr64910-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr64910-2.c index 2e3d6790776..812bfa48825 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr64910-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr64910-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-reassoc1" } */ +/* { dg-options "-O2 -fdump-tree-reassoc1 -fno-ipa-icf" } */ /* We want to make sure that we reassociate in a way that has the constant last. With the constant last, it's more likely to result diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr79352.c b/gcc/testsuite/gcc.dg/tree-ssa/pr79352.c index 485e2d64cb3..36e195c3a06 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr79352.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr79352.c @@ -1,7 +1,7 @@ /* PR tree-optimization/79352 - -fprintf-return-value doesn't handle flexible-like array members properly { dg-do compile } - { dg-options "-O2 -fdump-tree-optimized" } */ + { dg-options "-O2 -fdump-tree-optimized -fno-ipa-icf" } */ struct A { int i; char a1[1]; }; struct B { int i; char a3[3]; };