Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Jun 2012 19:30:18 +0200
From:      Niclas Zeising <zeising@daemonic.se>
To:        "Pedro F. Giffuni" <pfg@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r237406 - head/contrib/gcc
Message-ID:  <4FE35A2A.3030408@daemonic.se>
In-Reply-To: <201206211649.q5LGnKrn024904@svn.freebsd.org>
References:  <201206211649.q5LGnKrn024904@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 06/21/12 18:49, Pedro F. Giffuni wrote:
> Author: pfg
> Date: Thu Jun 21 16:49:20 2012
> New Revision: 237406
> URL: http://svn.freebsd.org/changeset/base/237406
>
> Log:
>    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.
>
>    While here, add the GCC revision numbers in the
>    log.
>
>    Discussed with: jkim
>    MFC after:	1 week
>
> Modified:
>    head/contrib/gcc/ChangeLog.gcc43
>    head/contrib/gcc/fold-const.c
>    head/contrib/gcc/gimplify.c
>    head/contrib/gcc/tree-ssa-ccp.c
>    head/contrib/gcc/tree-ssa-pre.c
>
> Modified: head/contrib/gcc/ChangeLog.gcc43
> ==============================================================================
> --- head/contrib/gcc/ChangeLog.gcc43	Thu Jun 21 16:48:56 2012	(r237405)
> +++ head/contrib/gcc/ChangeLog.gcc43	Thu Jun 21 16:49:20 2012	(r237406)
> @@ -5,6 +5,18 @@
>   	with SSE3 instruction set support.
>   	* doc/invoke.texi: Likewise.
>
> +2007-04-12  Richard Guenther<rguenther@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@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@suse.de>
> +2006-10-24  Richard Guenther<rguenther@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@suse.de>
> +2006-10-21  Richard Guenther<rguenther@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@suse.de>  (r117929)
>
>   	* builtins.c (fold_builtin_classify): Fix typo.
>
>
> Modified: head/contrib/gcc/fold-const.c
> ==============================================================================
> --- head/contrib/gcc/fold-const.c	Thu Jun 21 16:48:56 2012	(r237405)
> +++ head/contrib/gcc/fold-const.c	Thu Jun 21 16:49:20 2012	(r237406)
> @@ -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: head/contrib/gcc/gimplify.c
> ==============================================================================
> --- head/contrib/gcc/gimplify.c	Thu Jun 21 16:48:56 2012	(r237405)
> +++ head/contrib/gcc/gimplify.c	Thu Jun 21 16:49:20 2012	(r237406)
> @@ -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: head/contrib/gcc/tree-ssa-ccp.c
> ==============================================================================
> --- head/contrib/gcc/tree-ssa-ccp.c	Thu Jun 21 16:48:56 2012	(r237405)
> +++ head/contrib/gcc/tree-ssa-ccp.c	Thu Jun 21 16:49:20 2012	(r237406)
> @@ -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: head/contrib/gcc/tree-ssa-pre.c
> ==============================================================================
> --- head/contrib/gcc/tree-ssa-pre.c	Thu Jun 21 16:48:56 2012	(r237405)
> +++ head/contrib/gcc/tree-ssa-pre.c	Thu Jun 21 16:49:20 2012	(r237406)
> @@ -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);
>

Could this fix the issues with mozilla ports not compiling on -O2?
I will test later, but I'm just checking if you have any insight...
Regards!
-- 
Niclas Zeising



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FE35A2A.3030408>