svn commit: r237678 - stable/9/contrib/gcc

Pedro F. Giffuni pfg at FreeBSD.org
Thu Jun 28 01:02:50 UTC 2012


Author: pfg
Date: Thu Jun 28 01:02:50 2012
New Revision: 237678
URL: http://svn.freebsd.org/changeset/base/237678

Log:
  MFC	r237406:
  
  Bring a couple of fixes for gcc optimizations.
  
  The GCC4.3 branch contains some optimization fixes
  that were not considered regressions and therefore
  were never backported. We are bringing a couple of
  them that are under GPLv2 since they were made
  before the license switch upstream.

Modified:
  stable/9/contrib/gcc/ChangeLog.gcc43
  stable/9/contrib/gcc/fold-const.c
  stable/9/contrib/gcc/gimplify.c
  stable/9/contrib/gcc/tree-ssa-ccp.c
  stable/9/contrib/gcc/tree-ssa-pre.c
Directory Properties:
  stable/9/contrib/gcc/   (props changed)

Modified: stable/9/contrib/gcc/ChangeLog.gcc43
==============================================================================
--- stable/9/contrib/gcc/ChangeLog.gcc43	Thu Jun 28 00:17:45 2012	(r237677)
+++ stable/9/contrib/gcc/ChangeLog.gcc43	Thu Jun 28 01:02:50 2012	(r237678)
@@ -5,6 +5,18 @@
 	with SSE3 instruction set support.
 	* doc/invoke.texi: Likewise.
 
+2007-04-12  Richard Guenther  <rguenther at suse.de> (r123736)
+
+	PR tree-optimization/24689
+	PR tree-optimization/31307
+	* fold-const.c (operand_equal_p): Compare INTEGER_CST array
+	indices by value.
+	* gimplify.c (canonicalize_addr_expr): To be consistent with
+	gimplify_compound_lval only set operands two and three of
+	ARRAY_REFs if they are not gimple_min_invariant.  This makes
+	it never at this place.
+	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Likewise.
+
 2007-04-07  H.J. Lu  <hongjiu.lu at intel.com> (r123639)
 
 	* config/i386/i386.c (ix86_handle_option): Handle SSSE3.
@@ -96,7 +108,7 @@
 
 	* doc/invoke.texi: Add entry about geode processor.
     
-2006-10-24  Richard Guenther  <rguenther at suse.de>
+2006-10-24  Richard Guenther  <rguenther at suse.de> (r118001)
 
 	PR middle-end/28796
 	* builtins.c (fold_builtin_classify): Use HONOR_INFINITIES
@@ -170,7 +182,13 @@
 
 	* doc/invoke.texi: Document -mssse3/-mno-ssse3 switches.
 
-2006-10-21  Richard Guenther  <rguenther at suse.de>
+2006-10-21  Richard Guenther  <rguenther at suse.de> (r117932)
+
+	PR tree-optimization/3511
+	* tree-ssa-pre.c (phi_translate): Fold CALL_EXPRs that
+	got new invariant arguments during PHI translation.
+
+2006-10-21  Richard Guenther  <rguenther at suse.de> (r117929)
 
 	* builtins.c (fold_builtin_classify): Fix typo.
 

Modified: stable/9/contrib/gcc/fold-const.c
==============================================================================
--- stable/9/contrib/gcc/fold-const.c	Thu Jun 28 00:17:45 2012	(r237677)
+++ stable/9/contrib/gcc/fold-const.c	Thu Jun 28 01:02:50 2012	(r237678)
@@ -2802,9 +2802,13 @@ operand_equal_p (tree arg0, tree arg1, u
 
 	case ARRAY_REF:
 	case ARRAY_RANGE_REF:
-	  /* Operands 2 and 3 may be null.  */
+	  /* Operands 2 and 3 may be null.
+	     Compare the array index by value if it is constant first as we
+	     may have different types but same value here.  */
 	  return (OP_SAME (0)
-		  && OP_SAME (1)
+		  && (tree_int_cst_equal (TREE_OPERAND (arg0, 1),
+					  TREE_OPERAND (arg1, 1))
+		      || OP_SAME (1))
 		  && OP_SAME_WITH_NULL (2)
 		  && OP_SAME_WITH_NULL (3));
 

Modified: stable/9/contrib/gcc/gimplify.c
==============================================================================
--- stable/9/contrib/gcc/gimplify.c	Thu Jun 28 00:17:45 2012	(r237677)
+++ stable/9/contrib/gcc/gimplify.c	Thu Jun 28 01:02:50 2012	(r237678)
@@ -1600,9 +1600,7 @@ canonicalize_addr_expr (tree *expr_p)
   /* All checks succeeded.  Build a new node to merge the cast.  */
   *expr_p = build4 (ARRAY_REF, dctype, obj_expr,
 		    TYPE_MIN_VALUE (TYPE_DOMAIN (datype)),
-		    TYPE_MIN_VALUE (TYPE_DOMAIN (datype)),
-		    size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (dctype),
-				size_int (TYPE_ALIGN_UNIT (dctype))));
+		    NULL_TREE, NULL_TREE);
   *expr_p = build1 (ADDR_EXPR, ctype, *expr_p);
 }
 

Modified: stable/9/contrib/gcc/tree-ssa-ccp.c
==============================================================================
--- stable/9/contrib/gcc/tree-ssa-ccp.c	Thu Jun 28 00:17:45 2012	(r237677)
+++ stable/9/contrib/gcc/tree-ssa-ccp.c	Thu Jun 28 01:02:50 2012	(r237678)
@@ -1621,9 +1621,7 @@ maybe_fold_offset_to_array_ref (tree bas
   if (!integer_zerop (elt_offset))
     idx = int_const_binop (PLUS_EXPR, idx, elt_offset, 0);
 
-  return build4 (ARRAY_REF, orig_type, base, idx, min_idx,
-		 size_int (tree_low_cst (elt_size, 1)
-			   / (TYPE_ALIGN_UNIT (elt_type))));
+  return build4 (ARRAY_REF, orig_type, base, idx, NULL_TREE, NULL_TREE);
 }
 
 

Modified: stable/9/contrib/gcc/tree-ssa-pre.c
==============================================================================
--- stable/9/contrib/gcc/tree-ssa-pre.c	Thu Jun 28 00:17:45 2012	(r237677)
+++ stable/9/contrib/gcc/tree-ssa-pre.c	Thu Jun 28 01:02:50 2012	(r237678)
@@ -1076,6 +1076,7 @@ phi_translate (tree expr, value_set_t se
 	    tree newexpr;
 	    tree vh = get_value_handle (expr);
 	    bool listchanged = false;
+	    bool invariantarg = false;
 	    VEC (tree, gc) *vuses = VALUE_HANDLE_VUSES (vh);
 	    VEC (tree, gc) *tvuses;
 
@@ -1134,10 +1135,26 @@ phi_translate (tree expr, value_set_t se
 		    if (newval != oldval)
 		      {
 			listchanged = true;
+			invariantarg |= is_gimple_min_invariant (newval);
 			TREE_VALUE (newwalker) = get_value_handle (newval);
 		      }
 		  }
 	      }
+
+	    /* In case of new invariant args we might try to fold the call
+	       again.  */
+	    if (invariantarg)
+	      {
+		tree tmp = fold_ternary (CALL_EXPR, TREE_TYPE (expr),
+					 newop0, newarglist, newop2);
+		if (tmp)
+		  {
+		    STRIP_TYPE_NOPS (tmp);
+		    if (is_gimple_min_invariant (tmp))
+		      return tmp;
+		  }
+	      }
+
 	    if (listchanged)
 	      vn_lookup_or_add (newarglist, NULL);
 


More information about the svn-src-stable-9 mailing list