packages: gcc/gcc-branch.diff, gcc/gcc.spec - rel 10; branch diff updated

arekm arekm at pld-linux.org
Sun Jul 4 21:21:31 CEST 2010


Author: arekm                        Date: Sun Jul  4 19:21:31 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- rel 10; branch diff updated

---- Files affected:
packages/gcc:
   gcc-branch.diff (1.33 -> 1.34) , gcc.spec (1.621 -> 1.622) 

---- Diffs:

================================================================
Index: packages/gcc/gcc-branch.diff
diff -u packages/gcc/gcc-branch.diff:1.33 packages/gcc/gcc-branch.diff:1.34
--- packages/gcc/gcc-branch.diff:1.33	Tue Jun 15 20:24:02 2010
+++ packages/gcc/gcc-branch.diff	Sun Jul  4 21:21:19 2010
@@ -1,7 +1,7 @@
 Index: configure
 ===================================================================
---- configure	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ configure	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- configure	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ configure	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -5996,95 +5996,7 @@
  
  
@@ -254,7 +254,7 @@
      # If we couldn't enable LTO and the user forced it, emit an error.
      if test x"$enable_lto" = x"no" \
         && test x"$default_enable_lto" != x"yes" ; then
-@@ -6613,8 +6655,29 @@
+@@ -6613,8 +6655,30 @@
  
  
  fi
@@ -270,6 +270,7 @@
 +  # -flto it won't be needed until after installation anyway.
 +    case $target in
 +      *-cygwin*|*-mingw*) ;;
++      x86_64-apple-darwin*) ;;
 +      *) if test x"$enable_lto" = x"yes"; then
 +	as_fn_error "LTO support is not enabled for this target." "$LINENO" 5
 +        fi
@@ -284,7 +285,7 @@
  # By default, C is the only stage 1 language.
  stage1_languages=,c,
  
-@@ -7610,7 +7673,7 @@
+@@ -7610,7 +7674,7 @@
         mv conftest.o conftest.o.g0 &&
         ${CC} -c -g conftest.c &&
         mv conftest.o conftest.o.g &&
@@ -295,8 +296,8 @@
        BUILD_CONFIG=
 Index: Makefile.in
 ===================================================================
---- Makefile.in	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ Makefile.in	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- Makefile.in	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ Makefile.in	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -57763,6 +57763,14 @@
  configure-stage4-gcc: maybe-all-stage4-gold
  configure-stageprofile-gcc: maybe-all-stageprofile-gold
@@ -329,8 +330,8 @@
  all-stage1-gcc: maybe-all-build-texinfo
 Index: libgcc/config.host
 ===================================================================
---- libgcc/config.host	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgcc/config.host	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgcc/config.host	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgcc/config.host	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -600,6 +600,7 @@
  i[34567]86-*-darwin* | x86_64-*-darwin* | \
    i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
@@ -341,8 +342,8 @@
  	if test "${host_address}" = 32; then
 Index: libgcc/config/i386/32/sfp-machine.h
 ===================================================================
---- libgcc/config/i386/32/sfp-machine.h	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgcc/config/i386/32/sfp-machine.h	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgcc/config/i386/32/sfp-machine.h	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgcc/config/i386/32/sfp-machine.h	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -142,8 +142,8 @@
      if (_fex & FP_EX_DIVZERO)						\
        {									\
@@ -356,8 +357,8 @@
        }									\
 Index: libgcc/ChangeLog
 ===================================================================
---- libgcc/ChangeLog	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgcc/ChangeLog	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgcc/ChangeLog	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgcc/ChangeLog	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1,3 +1,15 @@
 +2010-05-19  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
 +
@@ -376,8 +377,8 @@
  	* GCC 4.5.0 released.
 Index: libgomp/configure
 ===================================================================
---- libgomp/configure	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgomp/configure	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/configure	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgomp/configure	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -15379,7 +15379,7 @@
  /* end confdefs.h.  */
  #include <pthread.h>
@@ -403,8 +404,8 @@
  		return (a_in_other_thread == a_in_main_thread);
 Index: libgomp/sections.c
 ===================================================================
---- libgomp/sections.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgomp/sections.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/sections.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgomp/sections.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1,4 +1,4 @@
 -/* Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
 +/* Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
@@ -440,8 +441,8 @@
  /* This routine is called when first encountering a sections construct
 Index: libgomp/ChangeLog
 ===================================================================
---- libgomp/ChangeLog	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgomp/ChangeLog	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/ChangeLog	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgomp/ChangeLog	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1,3 +1,29 @@
 +2010-06-10  Iain Sandoe  <iains at gcc.gnu.org>
 +
@@ -474,8 +475,8 @@
  	* GCC 4.5.0 released.
 Index: libgomp/testsuite/libgomp.c++/pr43893.C
 ===================================================================
---- libgomp/testsuite/libgomp.c++/pr43893.C	(.../tags/gcc_4_5_0_release)	(revision 0)
-+++ libgomp/testsuite/libgomp.c++/pr43893.C	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/testsuite/libgomp.c++/pr43893.C	(.../tags/gcc_4_5_0_release)	(wersja 0)
++++ libgomp/testsuite/libgomp.c++/pr43893.C	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -0,0 +1,125 @@
 +// PR c/43893
 +// { dg-do run }
@@ -604,8 +605,8 @@
 +}
 Index: libgomp/testsuite/libgomp.fortran/vla8.f90
 ===================================================================
---- libgomp/testsuite/libgomp.fortran/vla8.f90	(.../tags/gcc_4_5_0_release)	(revision 0)
-+++ libgomp/testsuite/libgomp.fortran/vla8.f90	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/testsuite/libgomp.fortran/vla8.f90	(.../tags/gcc_4_5_0_release)	(wersja 0)
++++ libgomp/testsuite/libgomp.fortran/vla8.f90	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -0,0 +1,254 @@
 +! { dg-do run }
 +
@@ -863,8 +864,8 @@
 +end
 Index: libgomp/testsuite/libgomp.c/pr43893.c
 ===================================================================
---- libgomp/testsuite/libgomp.c/pr43893.c	(.../tags/gcc_4_5_0_release)	(revision 0)
-+++ libgomp/testsuite/libgomp.c/pr43893.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/testsuite/libgomp.c/pr43893.c	(.../tags/gcc_4_5_0_release)	(wersja 0)
++++ libgomp/testsuite/libgomp.c/pr43893.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -0,0 +1,61 @@
 +/* PR c/43893 */
 +/* { dg-do run } */
@@ -929,8 +930,8 @@
 +}
 Index: libgomp/config/linux/proc.c
 ===================================================================
---- libgomp/config/linux/proc.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgomp/config/linux/proc.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/config/linux/proc.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgomp/config/linux/proc.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1,4 +1,5 @@
 -/* Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 +/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
@@ -971,8 +972,8 @@
  #ifdef _SC_NPROCESSORS_ONLN
 Index: libgomp/config/linux/affinity.c
 ===================================================================
---- libgomp/config/linux/affinity.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ libgomp/config/linux/affinity.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- libgomp/config/linux/affinity.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ libgomp/config/linux/affinity.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1,4 +1,4 @@
 -/* Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 +/* Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
@@ -1021,8 +1022,8 @@
    pthread_setaffinity_np (pthread_self (), sizeof (cpuset), &cpuset);
 Index: gcc/tree-vrp.c
 ===================================================================
---- gcc/tree-vrp.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/tree-vrp.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/tree-vrp.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/tree-vrp.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -764,7 +764,28 @@
  	 && integer_zerop (vr->max);
  }
@@ -1241,8 +1242,8 @@
      check_all_array_refs ();
 Index: gcc/sched-ebb.c
 ===================================================================
---- gcc/sched-ebb.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/sched-ebb.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/sched-ebb.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/sched-ebb.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -463,7 +463,7 @@
  schedule_ebb (rtx head, rtx tail)
  {
@@ -1254,8 +1255,8 @@
    last_bb = BLOCK_FOR_INSN (tail);
 Index: gcc/doc/sourcebuild.texi
 ===================================================================
---- gcc/doc/sourcebuild.texi	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/doc/sourcebuild.texi	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/doc/sourcebuild.texi	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/doc/sourcebuild.texi	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -1094,9 +1094,12 @@
  /* @{ dg-skip-if "" @{ *-*-* @}  @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */
  @end smallexample
@@ -1312,8 +1313,8 @@
  
 Index: gcc/doc/standards.texi
 ===================================================================
---- gcc/doc/standards.texi	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/doc/standards.texi	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/doc/standards.texi	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/doc/standards.texi	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -183,7 +183,7 @@
  available on the ISO C++ committee's web site at
  @uref{http://www.open-std.org/jtc1/sc22/wg21/}. For information
@@ -1323,10 +1324,33 @@
  standard in GCC, use the option @option{-std=c++0x}; to obtain all the
  diagnostics required by the standard, you should also specify
  @option{-pedantic} (or @option{-pedantic-errors} if you want them to be
+Index: gcc/doc/tm.texi
+===================================================================
+--- gcc/doc/tm.texi	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/doc/tm.texi	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -7149,6 +7149,18 @@
+ this function.
+ @end deftypefun
+ 
++ at deftypefn {Target Hook} void TARGET_ASM_LTO_START (void)
++Output to @code{asm_out_file} any text which the assembler expects
++to find at the start of an LTO section.  The default is to output
++nothing.
++ at end deftypefn
++
++ at deftypefn {Target Hook} void TARGET_ASM_LTO_END (void)
++Output to @code{asm_out_file} any text which the assembler expects
++to find at the end of an LTO section.  The default is to output
++nothing.
++ at end deftypefn
++
+ @deftypefn {Target Hook} void TARGET_ASM_CODE_END (void)
+ Output to @code{asm_out_file} any text which is needed before emitting
+ unwind info and debug info at the end of a file.  Some targets emit
 Index: gcc/doc/install.texi
 ===================================================================
---- gcc/doc/install.texi	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/doc/install.texi	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/doc/install.texi	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/doc/install.texi	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -361,7 +361,7 @@
  downloaded from @uref{http://www.mr511.de/software/libelf-0.8.12.tar.gz},
  though it is commonly available in several systems.  The versions in
@@ -1347,10 +1371,29 @@
  @item --enable-initfini-array
  Force the use of sections @code{.init_array} and @code{.fini_array}
  (instead of @code{.init} and @code{.fini}) for constructors and
+Index: gcc/dwarf2asm.c
+===================================================================
+--- gcc/dwarf2asm.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/dwarf2asm.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -1,5 +1,5 @@
+ /* Dwarf2 assembler output helper routines.
+-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
++   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+    Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+@@ -877,6 +877,7 @@
+   DECL_ARTIFICIAL (decl) = 1;
+   DECL_IGNORED_P (decl) = 1;
+   DECL_INITIAL (decl) = decl;
++  TREE_READONLY (decl) = 1;
+ 
+   if (TREE_PUBLIC (id))
+     {
 Index: gcc/lto-symtab.c
 ===================================================================
---- gcc/lto-symtab.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/lto-symtab.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/lto-symtab.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/lto-symtab.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -94,9 +94,10 @@
    const struct lto_symtab_entry_def *base =
       (const struct lto_symtab_entry_def *) p;
@@ -1381,8 +1424,8 @@
    e = (lto_symtab_entry_t) *slot;
 Index: gcc/opts-common.c
 ===================================================================
---- gcc/opts-common.c	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/opts-common.c	(.../branches/gcc-4_5-branch)	(revision 160798)
+--- gcc/opts-common.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/opts-common.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
 @@ -132,6 +132,10 @@
  {
    int argc = *argcp;
@@ -1404,17 +1447,310 @@
      }
    else
      {
+Index: gcc/tree-loop-distribution.c
+===================================================================
+--- gcc/tree-loop-distribution.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/tree-loop-distribution.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -202,18 +202,28 @@
+ 
+       for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi);)
+ 	if (!bitmap_bit_p (partition, x++))
+-	  remove_phi_node (&bsi, true);
++	  {
++	    gimple phi = gsi_stmt (bsi);
++	    if (!is_gimple_reg (gimple_phi_result (phi)))
++	      mark_virtual_phi_result_for_renaming (phi);
++	    remove_phi_node (&bsi, true);
++	  }
+ 	else
+ 	  gsi_next (&bsi);
+ 
+       for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi);)
+-	if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL
+-	    && !bitmap_bit_p (partition, x++))
+-	  gsi_remove (&bsi, false);
+-	else
+-	  gsi_next (&bsi);
+-
+-	mark_virtual_ops_in_bb (bb);
++	{
++	  gimple stmt = gsi_stmt (bsi);
++	  if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL
++	      && !bitmap_bit_p (partition, x++))
++	    {
++	      unlink_stmt_vdef (stmt);
++	      gsi_remove (&bsi, true);
++	      release_defs (stmt);
++	    }
++	  else
++	    gsi_next (&bsi);
++	}
+     }
+ 
+   free (bbs);
+@@ -250,7 +260,6 @@
+   gimple_seq stmt_list = NULL, stmts;
+   gimple fn_call;
+   tree mem, fn;
+-  gimple_stmt_iterator i;
+   struct data_reference *dr = XCNEW (struct data_reference);
+   location_t loc = gimple_location (stmt);
+ 
+@@ -301,13 +310,6 @@
+   fn = build_fold_addr_expr (implicit_built_in_decls [BUILT_IN_MEMSET]);
+   fn_call = gimple_build_call (fn, 3, mem, integer_zero_node, nb_bytes);
+   gimple_seq_add_stmt (&stmt_list, fn_call);
+-
+-  for (i = gsi_start (stmt_list); !gsi_end_p (i); gsi_next (&i))
+-    {
+-      gimple s = gsi_stmt (i);
+-      update_stmt_if_modified (s);
+-    }
+-
+   gsi_insert_seq_after (&bsi, stmt_list, GSI_CONTINUE_LINKING);
+   res = true;
+ 
+Index: gcc/tree-ssa-loop-unswitch.c
+===================================================================
+--- gcc/tree-ssa-loop-unswitch.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/tree-ssa-loop-unswitch.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -1,5 +1,5 @@
+ /* Loop unswitching.
+-   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
++   Copyright (C) 2004, 2005, 2007, 2008, 2010 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+@@ -112,6 +112,12 @@
+   if (!stmt || gimple_code (stmt) != GIMPLE_COND)
+     return NULL_TREE;
+ 
++  /* To keep the things simple, we do not directly remove the conditions,
++     but just replace tests with 0 != 0 resp. 1 != 0.  Prevent the infinite
++     loop where we would unswitch again on such a condition.  */
++  if (gimple_cond_true_p (stmt) || gimple_cond_false_p (stmt))
++    return NULL_TREE;
++
+   /* Condition must be invariant.  */
+   FOR_EACH_SSA_TREE_OPERAND (use, stmt, iter, SSA_OP_USE)
+     {
+@@ -125,12 +131,6 @@
+   cond = build2 (gimple_cond_code (stmt), boolean_type_node,
+ 		 gimple_cond_lhs (stmt), gimple_cond_rhs (stmt));
+ 
+-  /* To keep the things simple, we do not directly remove the conditions,
+-     but just replace tests with 0/1.  Prevent the infinite loop where we
+-     would unswitch again on such a condition.  */
+-  if (integer_zerop (cond) || integer_nonzerop (cond))
+-    return NULL_TREE;
+-
+   return cond;
+ }
+ 
+@@ -176,19 +176,11 @@
+ {
+   basic_block *bbs;
+   struct loop *nloop;
+-  unsigned i;
++  unsigned i, found;
+   tree cond = NULL_TREE;
+   gimple stmt;
+   bool changed = false;
+ 
+-  /* Do not unswitch too much.  */
+-  if (num > PARAM_VALUE (PARAM_MAX_UNSWITCH_LEVEL))
+-    {
+-      if (dump_file && (dump_flags & TDF_DETAILS))
+-	fprintf (dump_file, ";; Not unswitching anymore, hit max level\n");
+-      return false;
+-    }
+-
+   /* Only unswitch innermost loops.  */
+   if (loop->inner)
+     {
+@@ -216,6 +208,7 @@
+ 
+   i = 0;
+   bbs = get_loop_body (loop);
++  found = loop->num_nodes;
+ 
+   while (1)
+     {
+@@ -226,8 +219,17 @@
+ 
+       if (i == loop->num_nodes)
+ 	{
+-	  free (bbs);
+-	  return changed;
++	  if (dump_file
++	      && num > PARAM_VALUE (PARAM_MAX_UNSWITCH_LEVEL)
++	      && (dump_flags & TDF_DETAILS))
++	    fprintf (dump_file, ";; Not unswitching anymore, hit max level\n");
++
++	  if (found == loop->num_nodes)
++	    {
++	      free (bbs);
++	      return changed;
++	    }
++	  break;
+ 	}
+ 
+       cond = simplify_using_entry_checks (loop, cond);
+@@ -244,19 +246,107 @@
+ 	  gimple_cond_set_condition_from_tree (stmt, boolean_false_node);
+ 	  changed = true;
+ 	}
++      /* Do not unswitch too much.  */
++      else if (num > PARAM_VALUE (PARAM_MAX_UNSWITCH_LEVEL))
++	{
++	  i++;
++	  continue;
++	}
++      /* In nested tree_unswitch_single_loop first optimize all conditions
++	 using entry checks, then discover still reachable blocks in the
++	 loop and find the condition only among those still reachable bbs.  */
++      else if (num != 0)
++	{
++	  if (found == loop->num_nodes)
++	    found = i;
++	  i++;
++	  continue;
++	}
+       else
+-	break;
++	{
++	  found = i;
++	  break;
++	}
+ 
+       update_stmt (stmt);
+       i++;
+     }
+ 
++  if (num != 0)
++    {
++      basic_block *tos, *worklist;
++
++      /* When called recursively, first do a quick discovery
++	 of reachable bbs after the above changes and only
++	 consider conditions in still reachable bbs.  */
++      tos = worklist = XNEWVEC (basic_block, loop->num_nodes);
++
++      for (i = 0; i < loop->num_nodes; i++)
++	bbs[i]->flags &= ~BB_REACHABLE;
++
++      /* Start with marking header.  */
++      *tos++ = bbs[0];
++      bbs[0]->flags |= BB_REACHABLE;
++
++      /* Iterate: find everything reachable from what we've already seen
++	 within the same innermost loop.  Don't look through false edges
++	 if condition is always true or true edges if condition is
++	 always false.  */
++      while (tos != worklist)
++	{
++	  basic_block b = *--tos;
++	  edge e;
++	  edge_iterator ei;
++	  int flags = 0;
++
++	  if (EDGE_COUNT (b->succs) == 2)
++	    {
++	      gimple stmt = last_stmt (b);
++	      if (stmt
++		  && gimple_code (stmt) == GIMPLE_COND)
++		{
++		  if (gimple_cond_true_p (stmt))
++		    flags = EDGE_FALSE_VALUE;
++		  else if (gimple_cond_false_p (stmt))
++		    flags = EDGE_TRUE_VALUE;
++		}
++	    }
++
++	  FOR_EACH_EDGE (e, ei, b->succs)
++	    {
++	      basic_block dest = e->dest;
++
++	      if (dest->loop_father == loop
++		  && !(dest->flags & BB_REACHABLE)
++		  && !(e->flags & flags))
++		{
++		  *tos++ = dest;
++		  dest->flags |= BB_REACHABLE;
++		}
++	    }
++	}
++
++      free (worklist);
++
++      /* Find a bb to unswitch on.  */
++      for (; found < loop->num_nodes; found++)
++	if ((bbs[found]->flags & BB_REACHABLE)
++	    && (cond = tree_may_unswitch_on (bbs[found], loop)))
++	  break;
++
++      if (found == loop->num_nodes)
++	{
++	  free (bbs);
++	  return changed;
++	}
++    }
++
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file, ";; Unswitching loop\n");
+ 
+   initialize_original_copy_tables ();
+   /* Unswitch the loop on this condition.  */
+-  nloop = tree_unswitch_loop (loop, bbs[i], cond);
++  nloop = tree_unswitch_loop (loop, bbs[found], cond);
+   if (!nloop)
+     {
+       free_original_copy_tables ();
+Index: gcc/cgraph.c
+===================================================================
+--- gcc/cgraph.c	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/cgraph.c	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -1934,7 +1934,7 @@
+ 
+ static GTY(()) unsigned int clone_fn_id_num;
+ 
+-static tree
++tree
+ clone_function_name (tree decl)
+ {
+   tree name = DECL_ASSEMBLER_NAME (decl);
+@@ -1994,6 +1994,8 @@
+      ??? We cannot use COMDAT linkage because there is no
+      ABI support for this.  */
+   DECL_EXTERNAL (new_node->decl) = 0;
++  if (DECL_ONE_ONLY (old_decl))
++    DECL_SECTION_NAME (new_node->decl) = NULL;
+   DECL_COMDAT_GROUP (new_node->decl) = 0;
+   TREE_PUBLIC (new_node->decl) = 0;
+   DECL_COMDAT (new_node->decl) = 0;
+Index: gcc/cgraph.h
+===================================================================
+--- gcc/cgraph.h	(.../tags/gcc_4_5_0_release)	(wersja 161805)
++++ gcc/cgraph.h	(.../branches/gcc-4_5-branch)	(wersja 161805)
+@@ -483,6 +483,7 @@
+ void cgraph_set_readonly_flag (struct cgraph_node *, bool);
+ void cgraph_set_pure_flag (struct cgraph_node *, bool);
+ void cgraph_set_looping_const_or_pure_flag (struct cgraph_node *, bool);
++tree clone_function_name (tree);
+ 
+ /* In cgraphunit.c  */
+ void cgraph_finalize_function (tree, bool);
 Index: gcc/DATESTAMP
 ===================================================================
---- gcc/DATESTAMP	(.../tags/gcc_4_5_0_release)	(revision 160798)
-+++ gcc/DATESTAMP	(.../branches/gcc-4_5-branch)	(revision 160798)
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gcc/gcc-branch.diff?r1=1.33&r2=1.34&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gcc/gcc.spec?r1=1.621&r2=1.622&f=u



More information about the pld-cvs-commit mailing list