aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-08-13 12:35:47 +0200
committerMartin Liska <mliska@suse.cz>2021-08-16 09:53:11 +0200
commitb0de3ad2620d665ab481c2f24204f77f386ff6b2 (patch)
treef35bfd192dcdd276d9b9f3041c8a9d9556d8ca85
parentfaf2b6bc527dff31725dde5538ffff1c92688047 (diff)
downloadgcc-b0de3ad2620d665ab481c2f24204f77f386ff6b2.zip
gcc-b0de3ad2620d665ab481c2f24204f77f386ff6b2.tar.gz
gcc-b0de3ad2620d665ab481c2f24204f77f386ff6b2.tar.bz2
ipa: ICF should check SSA_NAME_IS_DEFAULT_DEF
PR ipa/100600 gcc/ChangeLog: * ipa-icf-gimple.c (func_checker::compare_ssa_name): Do not consider equal SSA_NAMEs when one is a param. gcc/testsuite/ChangeLog: * gcc.dg/ipa/pr100600.c: New test.
-rw-r--r--gcc/ipa-icf-gimple.c3
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr100600.c22
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c
index edf5f02..cf02626 100644
--- a/gcc/ipa-icf-gimple.c
+++ b/gcc/ipa-icf-gimple.c
@@ -96,6 +96,9 @@ func_checker::compare_ssa_name (const_tree t1, const_tree t2)
unsigned i1 = SSA_NAME_VERSION (t1);
unsigned i2 = SSA_NAME_VERSION (t2);
+ if (SSA_NAME_IS_DEFAULT_DEF (t1) != SSA_NAME_IS_DEFAULT_DEF (t2))
+ return false;
+
if (m_source_ssa_names[i1] == -1)
m_source_ssa_names[i1] = i2;
else if (m_source_ssa_names[i1] != (int) i2)
diff --git a/gcc/testsuite/gcc.dg/ipa/pr100600.c b/gcc/testsuite/gcc.dg/ipa/pr100600.c
new file mode 100644
index 0000000..8a3d0e1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr100600.c
@@ -0,0 +1,22 @@
+/* PR ipa/100600 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int a, b, c;
+long d(long x, long e, long f, long g) {
+ long h, i;
+ for (; h < e; h++) {
+ i = f;
+ for (; i < g; i++)
+ c = b + a;
+ }
+ return h + i;
+}
+
+long j(long x, long e, long y, long g) {
+ long h, i;
+ for (; h < e; h++)
+ for (; i < g; i++)
+ c = b + a;
+ return h + i;
+}