]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport r250951
authorMartin Liska <mliska@suse.cz>
Fri, 15 Sep 2017 09:15:32 +0000 (11:15 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 15 Sep 2017 09:15:32 +0000 (09:15 +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: r252794

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

index 0f78bd2305c31f2d3cce44bb247dd937b0a35d85..73e222133c44a96cd7e46e02106fa0105c1c83bb 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 9e3c862339b4b1b14fcf72838fa1bf416f1b194e..1c5aebf00ca3a6c7e6dcd430341360b89b8ff4b5 100644 (file)
@@ -361,10 +361,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 7edf78ee79ba34ee6742f648995c3b0127a9aea7..9fc32ee4b12ae7de77f4f54b7dc65050f36f8dd2 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"  } } */