[gcc/f21] 4.9.1-11

Jakub Jelinek jakub at fedoraproject.org
Tue Sep 30 17:18:09 UTC 2014


commit 7673a11d7494c1f2fe3fd15a805aaad2d735b892
Author: Jakub Jelinek <jakub at redhat.com>
Date:   Tue Sep 30 19:14:37 2014 +0200

    4.9.1-11

 .gitignore          |    1 +
 gcc.spec            |   16 +++++-
 gcc49-pr63186.patch |  129 +++++++++++++++++++++++++++++++++++++++++++++++++++
 sources             |    2 +-
 4 files changed, 144 insertions(+), 4 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 6dbc88f..fe94c82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,4 @@
 /gcc-4.9.1-20140815.tar.bz2
 /gcc-4.9.1-20140912.tar.bz2
 /gcc-4.9.1-20140922.tar.bz2
+/gcc-4.9.1-20140930.tar.bz2
diff --git a/gcc.spec b/gcc.spec
index ebe81f1..7ea3de4 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20140922
-%global SVNREV 215456
+%global DATE 20140930
+%global SVNREV 215732
 %global gcc_version 4.9.1
 # Note, gcc_release must be integer, if you want to add suffixes to
 # %{release}, append them after %{gcc_release} on Release: line.
-%global gcc_release 10
+%global gcc_release 11
 %global _unpackaged_files_terminate_build 0
 %global _performance_build 1
 %global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
@@ -201,6 +201,7 @@ Patch16: gcc49-libgo-p224.patch
 Patch17: gcc49-aarch64-async-unw-tables.patch
 Patch18: gcc49-aarch64-unwind-opt.patch
 Patch19: gcc49-pr63285.patch
+Patch20: gcc49-pr63186.patch
 
 Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
 
@@ -730,6 +731,7 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
 %patch17 -p0 -b .aarch64-async-unw-tables~
 %patch18 -p0 -b .aarch64-unwind-opt~
 %patch19 -p0 -b .pr63285~
+%patch20 -p0 -b .pr63186~
 
 %if 0%{?_enable_debug_packages}
 cat > split-debuginfo.sh <<\EOF
@@ -2802,6 +2804,14 @@ fi
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
 
 %changelog
+* Tue Sep 30 2014 Jakub Jelinek <jakub at redhat.com> 4.9.1-11
+- update from the 4.9 branch
+  - PRs c++/61465, c++/62219, c++/63249, inline-asm/63282, middle-end/63247,
+	plugins/63410, sanitizer/61272, target/49423, target/61407,
+	target/62218, target/63335, tree-optimization/63341
+- avoid fnsplit if there are forced labels accessed in between the partitions
+  (#1106758, PR tree-optimization/63186)
+
 * Mon Sep 22 2014 Jakub Jelinek <jakub at redhat.com> 4.9.1-10
 - update from the 4.9 branch
   - PRs c++/62017, c++/63241, c++/63248, debug/63284, debug/63328, ipa/61654,
diff --git a/gcc49-pr63186.patch b/gcc49-pr63186.patch
new file mode 100644
index 0000000..ed3dcf9
--- /dev/null
+++ b/gcc49-pr63186.patch
@@ -0,0 +1,129 @@
+2014-09-10  Jan Hubicka  <hubicka at ucw.cz>
+
+	PR tree-optimization/63186
+	* ipa-split.c (test_nonssa_use): Skip nonforced labels.
+	(mark_nonssa_use): Likewise.
+	(verify_non_ssa_vars): Verify all header blocks for label
+	definitions.
+
+	* gcc.dg/pr63186.c: New testcase.
+
+--- gcc/ipa-split.c	(revision 215148)
++++ gcc/ipa-split.c	(revision 215149)
+@@ -167,7 +167,11 @@ test_nonssa_use (gimple, tree t, tree, v
+       || (TREE_CODE (t) == VAR_DECL
+ 	  && auto_var_in_fn_p (t, current_function_decl))
+       || TREE_CODE (t) == RESULT_DECL
+-      || TREE_CODE (t) == LABEL_DECL)
++	 /* Normal labels are part of CFG and will be handled gratefuly.
++	    Forced labels however can be used directly by statements and
++	    need to stay in one partition along with their uses.  */
++      || (TREE_CODE (t) == LABEL_DECL
++	  && FORCED_LABEL (t)))
+     return bitmap_bit_p ((bitmap)data, DECL_UID (t));
+ 
+   /* For DECL_BY_REFERENCE, the return value is actually a pointer.  We want
+@@ -213,6 +217,7 @@ verify_non_ssa_vars (struct split_point
+   edge e;
+   edge_iterator ei;
+   bool ok = true;
++  basic_block bb;
+ 
+   FOR_EACH_EDGE (e, ei, current->entry_bb->preds)
+     if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+@@ -225,8 +230,8 @@ verify_non_ssa_vars (struct split_point
+   while (!worklist.is_empty ())
+     {
+       gimple_stmt_iterator bsi;
+-      basic_block bb = worklist.pop ();
+ 
++      bb = worklist.pop ();
+       FOR_EACH_EDGE (e, ei, bb->preds)
+ 	if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 	    && bitmap_set_bit (seen, e->src->index))
+@@ -250,10 +255,10 @@ verify_non_ssa_vars (struct split_point
+ 	  if (gimple_code (stmt) == GIMPLE_LABEL
+ 	      && test_nonssa_use (stmt, gimple_label_label (stmt),
+ 				  NULL_TREE, non_ssa_vars))
+-	  {
+-	    ok = false;
+-	    goto done;
+-	  }
++	    {
++	      ok = false;
++	      goto done;
++	    }
+ 	}
+       for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi))
+ 	{
+@@ -286,6 +291,27 @@ verify_non_ssa_vars (struct split_point
+ 	    }
+ 	}
+     }
++
++  /* Verify that the rest of function does not define any label
++     used by the split part.  */
++  FOR_EACH_BB_FN (bb, cfun)
++    if (!bitmap_bit_p (current->split_bbs, bb->index)
++	&& !bitmap_bit_p (seen, bb->index))
++      {
++        gimple_stmt_iterator bsi;
++        for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
++	  if (gimple_code (gsi_stmt (bsi)) == GIMPLE_LABEL
++	      && test_nonssa_use (gsi_stmt (bsi),
++				  gimple_label_label (gsi_stmt (bsi)),
++				  NULL_TREE, non_ssa_vars))
++	    {
++	      ok = false;
++	      goto done;
++	    }
++	  else if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL)
++	    break;
++      }
++    
+ done:
+   BITMAP_FREE (seen);
+   worklist.release ();
+@@ -735,7 +761,8 @@ mark_nonssa_use (gimple, tree t, tree, v
+   if ((TREE_CODE (t) == VAR_DECL
+        && auto_var_in_fn_p (t, current_function_decl))
+       || TREE_CODE (t) == RESULT_DECL
+-      || TREE_CODE (t) == LABEL_DECL)
++      || (TREE_CODE (t) == LABEL_DECL
++	  && FORCED_LABEL (t)))
+     bitmap_set_bit ((bitmap)data, DECL_UID (t));
+ 
+   /* For DECL_BY_REFERENCE, the return value is actually a pointer.  We want
+--- gcc/testsuite/gcc.dg/pr63186.c	(revision 0)
++++ gcc/testsuite/gcc.dg/pr63186.c	(revision 215149)
+@@ -0,0 +1,30 @@
++/* { dg-do link } */
++/* { dg-options "-O2" } */
++void *a;
++int b, c, d;
++
++void
++bar ()
++{
++  switch (c)
++    {
++    case 0:
++    lab:
++      __asm__ ("");
++      return;
++    default:
++      break;
++    }
++  b = 0;
++  d = 0;
++  a = &&lab;
++}
++
++void
++foo ()
++{
++  bar ();
++}
++main()
++{
++}
diff --git a/sources b/sources
index ecf1397..d059d61 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
 e34fca0540d840e5d0f6427e98c92252  cloog-0.18.1.tar.gz
-2293d26b82a5fef7f8beff816ee424c8  gcc-4.9.1-20140922.tar.bz2
+34bc914fdab7381cc4371b317880d1ed  gcc-4.9.1-20140930.tar.bz2
 e039bfcfb6c2ab039b8ee69bf883e824  isl-0.12.2.tar.bz2


More information about the scm-commits mailing list