]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport r250951
authorMartin Liska <mliska@suse.cz>
Fri, 15 Sep 2017 12:13:42 +0000 (14:13 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 15 Sep 2017 12:13:42 +0000 (12:13 +0000)
2017-09-15  Martin Liska  <mliska@suse.cz>

Backport from mainline
2017-08-08  Martin Liska  <mliska@suse.cz>

PR tree-opt/81696
* ipa-icf-gimple.c (func_checker::compare_cst_or_decl): Consider
LABEL_DECLs that can be from a different function.
2017-09-15  Martin Liska  <mliska@suse.cz>

Backport from mainline
2017-08-08  Martin Liska  <mliska@suse.cz>

PR tree-opt/81696
* gcc.dg/ipa/pr81696.c: New test.

From-SVN: r252810

gcc/ChangeLog
gcc/ipa-icf-gimple.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/pr81696.c [new file with mode: 0644]

index a77bf9d2c51476340981ffa10398f6b78b6440f1..4123cd032c7675047d831c1a8106bdf2a891b36c 100644 (file)
@@ -1,3 +1,12 @@
+2017-09-15  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2017-08-08  Martin Liska  <mliska@suse.cz>
+
+       PR tree-opt/81696
+       * ipa-icf-gimple.c (func_checker::compare_cst_or_decl): Consider
+       LABEL_DECLs that can be from a different function.
+
 2017-09-15  Martin Liska  <mliska@suse.cz>
 
        Backport from mainline
index 9efdea465c292778a8249348c55a534f91590c9f..6227b7e95794445ea076fb7b7b27730eb5d4cc53 100644 (file)
@@ -395,10 +395,14 @@ func_checker::compare_cst_or_decl (tree t1, tree t2)
       }
     case LABEL_DECL:
       {
+       if (t1 == t2)
+         return true;
+
        int *bb1 = m_label_bb_map.get (t1);
        int *bb2 = m_label_bb_map.get (t2);
 
-       return return_with_debug (*bb1 == *bb2);
+       /* Labels can point to another function (non-local GOTOs).  */
+       return return_with_debug (bb1 != NULL && bb2 != NULL && *bb1 == *bb2);
       }
     case PARM_DECL:
     case RESULT_DECL:
index 925cb4ed7df7288a12c5c4743df1c9f3e8a51eec..4af92529d7ac917bf45b3b12462a7095caccd289 100644 (file)
@@ -1,3 +1,11 @@
+2017-09-15  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2017-08-08  Martin Liska  <mliska@suse.cz>
+
+       PR tree-opt/81696
+       * gcc.dg/ipa/pr81696.c: New test.
+
 2017-09-15  Martin Liska  <mliska@suse.cz>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/ipa/pr81696.c b/gcc/testsuite/gcc.dg/ipa/pr81696.c
new file mode 100644 (file)
index 0000000..2d3d63f
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-options "-O2 -fdump-ipa-icf-details"  } */
+
+int
+main (int argc, char **argv)
+{
+  __label__ lab4, lab5, lab6;
+
+  void foo (void) { goto lab4; }
+  void foo2 (void) { goto lab4; }
+  void bar (void) { goto lab5; }
+  void baz (void) { goto lab6; }
+
+  if (argc)
+    foo ();
+  else
+    foo2 ();
+
+ lab4:;
+  bar ();
+ lab5:;
+  baz ();
+ lab6:;
+  return 0;
+}
+
+/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf"  } } */