rpms/gcc/F-11 gcc44-pr39867.patch, NONE, 1.1 .cvsignore, 1.271, 1.272 gcc.spec, 1.45, 1.46 gcc44-pr39794.patch, 1.1, 1.2 sources, 1.274, 1.275

Jakub Jelinek jakub at fedoraproject.org
Fri Apr 24 08:04:58 UTC 2009


Author: jakub

Update of /cvs/pkgs/rpms/gcc/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv26284

Modified Files:
	.cvsignore gcc.spec gcc44-pr39794.patch sources 
Added Files:
	gcc44-pr39867.patch 
Log Message:
4.4.0-2

gcc44-pr39867.patch:

--- NEW FILE gcc44-pr39867.patch ---
2009-04-24  Paolo Bonzini  <bonzini at gnu.org>

	PR middle-end/39867
	* fold-const.c (fold_cond_expr_with_comparison): When folding
	> and >= to MAX, make sure the MAX uses the same type as the
	comparison's operands.

	* gcc.dg/pr39867.c: New.

--- gcc/fold-const.c	(revision 146581)
+++ gcc/fold-const.c	(working copy)
@@ -5337,31 +5337,34 @@ fold_cond_expr_with_comparison (tree typ
 	break;
 
       case GT_EXPR:
-	/* If C1 is C2 - 1, this is max(A, C2).  */
+	/* If C1 is C2 - 1, this is max(A, C2), but use ARG00's type for
+	   MAX_EXPR, to preserve the signedness of the comparison.  */
 	if (! operand_equal_p (arg2, TYPE_MIN_VALUE (type),
 			       OEP_ONLY_CONST)
 	    && operand_equal_p (arg01,
 				const_binop (MINUS_EXPR, arg2,
 					     build_int_cst (type, 1), 0),
 				OEP_ONLY_CONST))
-	  return pedantic_non_lvalue (fold_build2 (MAX_EXPR,
-						   type,
-						   fold_convert (type, arg1),
-						   arg2));
+	  return pedantic_non_lvalue (fold_convert (type,
+				      fold_build2 (MAX_EXPR, TREE_TYPE (arg00),
+						   arg00,
+						   fold_convert (TREE_TYPE (arg00),
+							         arg2))));
 	break;
 
       case GE_EXPR:
-	/* If C1 is C2 + 1, this is max(A, C2).  */
+	/* If C1 is C2 + 1, this is max(A, C2), with the same care as above.  */
 	if (! operand_equal_p (arg2, TYPE_MAX_VALUE (type),
 			       OEP_ONLY_CONST)
 	    && operand_equal_p (arg01,
 				const_binop (PLUS_EXPR, arg2,
 					     build_int_cst (type, 1), 0),
 				OEP_ONLY_CONST))
-	  return pedantic_non_lvalue (fold_build2 (MAX_EXPR,
-						   type,
-						   fold_convert (type, arg1),
-						   arg2));
+	  return pedantic_non_lvalue (fold_convert (type,
+				      fold_build2 (MAX_EXPR, TREE_TYPE (arg00),
+						   arg00,
+						   fold_convert (TREE_TYPE (arg00),
+							         arg2))));
 	break;
       case NE_EXPR:
 	break;
--- gcc/testsuite/gcc.dg/pr39867.c	2009-04-21 23:33:56.143009234 +0200
+++ gcc/testsuite/gcc.dg/pr39867.c	2009-04-24 09:20:07.000000000 +0200
@@ -0,0 +1,11 @@
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+
+int main (void)
+{
+  int exp = -1;
+  /* Wrong folding of the LHS to an unsigned MAX leads to 4294967295 > 2.  */
+  if ((exp < 2 ? 2U : (unsigned int) exp) != 2)
+    link_error ();
+  return 0;
+}


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/gcc/F-11/.cvsignore,v
retrieving revision 1.271
retrieving revision 1.272
diff -u -r1.271 -r1.272
--- .cvsignore	23 Apr 2009 07:34:34 -0000	1.271
+++ .cvsignore	24 Apr 2009 08:04:27 -0000	1.272
@@ -1,2 +1,2 @@
 fastjar-0.97.tar.gz
-gcc-4.4.0-20090423.tar.bz2
+gcc-4.4.0-20090424.tar.bz2


Index: gcc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gcc/F-11/gcc.spec,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- gcc.spec	23 Apr 2009 07:34:34 -0000	1.45
+++ gcc.spec	24 Apr 2009 08:04:27 -0000	1.46
@@ -1,9 +1,9 @@
-%define DATE 20090423
-%define SVNREV 146636
+%define DATE 20090424
+%define SVNREV 146674
 %define gcc_version 4.4.0
 # Note, gcc_release must be integer, if you want to add suffixes to
 # %{release}, append them after %{gcc_release} on Release: line.
-%define gcc_release 1
+%define gcc_release 2
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %define include_gappletviewer 1
@@ -155,6 +155,7 @@
 Patch33: gcc44-rh459374-2.patch
 Patch34: gcc44-rh459374-3.patch
 Patch35: gcc44-cswtch.patch
+Patch36: gcc44-pr39867.patch
 
 Patch1000: fastjar-0.97-segfault.patch
 
@@ -448,6 +449,7 @@
 %patch33 -p0 -b .rh459374-2~
 %patch34 -p0 -b .rh459374-3~
 %patch35 -p0 -b .cswtch~
+%patch36 -p0 -b .pr39867~
 
 # This testcase doesn't compile.
 rm libjava/testsuite/libjava.lang/PR35020*
@@ -1172,7 +1174,7 @@
 /sbin/install-info \
   --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || :
 /sbin/install-info \
-  --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || :
+  --info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || :
 /sbin/install-info \
   --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || :
 
@@ -1181,7 +1183,7 @@
   /sbin/install-info --delete \
     --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || :
   /sbin/install-info --delete \
-    --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || :
+    --info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || :
   /sbin/install-info --delete \
     --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || :
 fi
@@ -1758,12 +1760,18 @@
 %doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Fri Apr 24 2009 Jakub Jelinek <jakub at redhat.com> 4.4.0-2
+- update from gcc-4_4-branch
+  - PR c++/38228
+- fix folding of cond expr with comparison to MAX/MIN (PR middle-end/39867)
+- fix up gcc-gnat install-info arguments (#452783)
+
 * Thu Apr 23 2009 Jakub Jelinek <jakub at redhat.com> 4.4.0-1
 - update from gcc-4_4-branch
   - GCC 4.4.0 release
   - PRs libstdc++/39802, c++/39639, c/39855, rtl-optimization/39762,
 	testsuite/39781, tree-optimization/39824
-- fix up DSE (PR middle-end/39794)
+- fix up DSE (PR rtl-optimization/39794)
 - debuginfo fixes for VLA and nested/contained functions (#459374)
 - improve -ftree-switch-conversion optimization if the constant is the
   same in all cases

gcc44-pr39794.patch:

Index: gcc44-pr39794.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gcc/F-11/gcc44-pr39794.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc44-pr39794.patch	22 Apr 2009 19:01:26 -0000	1.1
+++ gcc44-pr39794.patch	24 Apr 2009 08:04:27 -0000	1.2
@@ -1,22 +1,25 @@
-2009-04-21  Jakub Jelinek  <jakub at redhat.com>
+2009-04-24  Jakub Jelinek  <jakub at redhat.com>
 
-	PR middle-end/39794
+	PR rtl-optimization/39794
 	* alias.c (canon_true_dependence): Add x_addr argument.
 	* rtl.h (canon_true_dependence): Adjust prototype.
 	* cse.c (check_dependence): Adjust canon_true_dependence callers.
 	* cselib.c (cselib_invalidate_mem): Likewise.
 	* gcse.c (compute_transp): Likewise.
 	* dse.c (scan_reads_nospill): Likewise.
-	(record_store, check_mem_read_rtx): Likewise.  For non-const or
-	frame addresses pass cselib_subst_to_values as mem_addr, for
-	const or frame addresses canon_base_mem of the group plus
-	optionally offset.
+	(record_store, check_mem_read_rtx): Likewise.  For non-const-or-frame
+	addresses pass base->val_rtx as mem_addr, for const-or-frame addresses
+	canon_base_addr of the group, plus optional offset.
+	(struct group_info): Rename canon_base_mem to
+	canon_base_addr.
+	(get_group_info): Set canon_base_addr to canon_rtx of base, not
+	canon_rtx of base_mem.
 
 	* gcc.dg/pr39794.c: New test.
 
---- gcc/alias.c.jj	2009-03-28 18:11:42.000000000 +0100
-+++ gcc/alias.c	2009-04-21 12:44:18.000000000 +0200
-@@ -2250,14 +2251,13 @@ true_dependence (const_rtx mem, enum mac
+--- gcc/alias.c.jj	2009-04-22 23:54:25.000000000 +0200
++++ gcc/alias.c	2009-04-23 18:09:28.000000000 +0200
+@@ -2287,14 +2287,13 @@ true_dependence (const_rtx mem, enum mac
     Variant of true_dependence which assumes MEM has already been
     canonicalized (hence we no longer do that here).
     The mem_addr argument has been added, since true_dependence computed
@@ -34,7 +37,7 @@
    if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
      return 1;
  
-@@ -2283,7 +2283,8 @@ canon_true_dependence (const_rtx mem, en
+@@ -2320,7 +2319,8 @@ canon_true_dependence (const_rtx mem, en
    if (nonoverlapping_memrefs_p (x, mem))
      return 0;
  
@@ -44,8 +47,37 @@
  
    if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
      return 0;
---- gcc/dse.c.jj	2009-03-28 18:11:42.000000000 +0100
-+++ gcc/dse.c	2009-04-21 18:11:19.000000000 +0200
+--- gcc/dse.c.jj	2009-04-22 22:20:23.000000000 +0200
++++ gcc/dse.c	2009-04-23 18:20:44.000000000 +0200
+@@ -223,7 +223,7 @@ struct store_info 
+   /* This canonized mem.  */
+   rtx mem;
+ 
+-  /* The result of get_addr on mem.  */
++  /* Canonized MEM address for use by canon_true_dependence.  */
+   rtx mem_addr;
+ 
+   /* If this is non-zero, it is the alias set of a spill location.  */
+@@ -476,8 +476,8 @@ struct group_info 
+      do read dependency.  */
+   rtx base_mem;
+   
+-  /* Canonized version of base_mem, most likely the same thing.  */
+-  rtx canon_base_mem;
++  /* Canonized version of base_mem's address.  */
++  rtx canon_base_addr;
+ 
+   /* These two sets of two bitmaps are used to keep track of how many
+      stores are actually referencing that position from this base.  We
+@@ -705,7 +705,7 @@ get_group_info (rtx base)
+       gi->rtx_base = base;
+       gi->id = rtx_group_next_id++;
+       gi->base_mem = gen_rtx_MEM (QImode, base);
+-      gi->canon_base_mem = canon_rtx (gi->base_mem);
++      gi->canon_base_addr = canon_rtx (base);
+       gi->store1_n = BITMAP_ALLOC (NULL);
+       gi->store1_p = BITMAP_ALLOC (NULL);
+       gi->store2_n = BITMAP_ALLOC (NULL);
 @@ -1286,7 +1286,7 @@ static rtx get_stored_val (store_info_t,
  static int
  record_store (rtx body, bb_info_t bb_info)
@@ -55,28 +87,31 @@
    HOST_WIDE_INT offset = 0;
    HOST_WIDE_INT width = 0;
    alias_set_type spill_alias_set;
-@@ -1456,6 +1456,20 @@ record_store (rtx body, bb_info_t bb_inf
+@@ -1456,6 +1456,23 @@ record_store (rtx body, bb_info_t bb_inf
    ptr = active_local_stores;
    last = NULL;
    redundant_reason = NULL;
 +  mem = canon_rtx (mem);
-+  if (spill_alias_set || group_id < 0)
-+    {
-+      cselib_lookup (XEXP (mem, 0), Pmode, 1);
-+      mem_addr = cselib_subst_to_values (XEXP (mem, 0));
-+    }
++  /* For alias_set != 0 canon_true_dependence should be never called.  */
++  if (spill_alias_set)
++    mem_addr = NULL_RTX;
 +  else
 +    {
-+      group_info_t group
-+	= VEC_index (group_info_t, rtx_group_vec, group_id);
-+      mem_addr = group->canon_base_mem;
++      if (group_id < 0)
++	mem_addr = base->val_rtx;
++      else
++	{
++	  group_info_t group
++	    = VEC_index (group_info_t, rtx_group_vec, group_id);
++	  mem_addr = group->canon_base_addr;
++	}
 +      if (offset)
-+	mem_addr = gen_rtx_PLUS (GET_MODE (mem_addr), mem_addr, GEN_INT (offset));
++	mem_addr = plus_constant (mem_addr, offset);
 +    }
  
    while (ptr)
      {
-@@ -1547,13 +1561,13 @@ record_store (rtx body, bb_info_t bb_inf
+@@ -1547,13 +1564,13 @@ record_store (rtx body, bb_info_t bb_inf
  	  if (canon_true_dependence (s_info->mem, 
  				     GET_MODE (s_info->mem),
  				     s_info->mem_addr,
@@ -92,7 +127,7 @@
        /* An insn can be deleted if every position of every one of
  	 its s_infos is zero.  */
        if (any_positions_needed_p (s_info)
-@@ -1580,9 +1594,9 @@ record_store (rtx body, bb_info_t bb_inf
+@@ -1580,9 +1597,9 @@ record_store (rtx body, bb_info_t bb_inf
    /* Finish filling in the store_info.  */
    store_info->next = insn_info->store_rec;
    insn_info->store_rec = store_info;
@@ -104,7 +139,7 @@
    store_info->cse_base = base;
    if (width > HOST_BITS_PER_WIDE_INT)
      {
-@@ -2006,7 +2020,7 @@ replace_read (store_info_t store_info, i
+@@ -2006,7 +2023,7 @@ replace_read (store_info_t store_info, i
  static int
  check_mem_read_rtx (rtx *loc, void *data)
  {
@@ -113,27 +148,30 @@
    bb_info_t bb_info;
    insn_info_t insn_info;
    HOST_WIDE_INT offset = 0;
-@@ -2058,6 +2072,19 @@ check_mem_read_rtx (rtx *loc, void *data
+@@ -2058,6 +2075,22 @@ check_mem_read_rtx (rtx *loc, void *data
    read_info->end = offset + width;
    read_info->next = insn_info->read_rec;
    insn_info->read_rec = read_info;
-+  if (spill_alias_set || group_id < 0)
-+    {
-+      cselib_lookup (XEXP (mem, 0), Pmode, 1);
-+      mem_addr = cselib_subst_to_values (XEXP (mem, 0));
-+    }
++  /* For alias_set != 0 canon_true_dependence should be never called.  */
++  if (spill_alias_set)
++    mem_addr = NULL_RTX;
 +  else
 +    {
-+      group_info_t group
-+	= VEC_index (group_info_t, rtx_group_vec, group_id);
-+      mem_addr = group->canon_base_mem;
++      if (group_id < 0)
++	mem_addr = base->val_rtx;
++      else
++	{
++	  group_info_t group
++	    = VEC_index (group_info_t, rtx_group_vec, group_id);
++	  mem_addr = group->canon_base_addr;
++	}
 +      if (offset)
-+	mem_addr = gen_rtx_PLUS (GET_MODE (mem_addr), mem_addr, GEN_INT (offset));
++	mem_addr = plus_constant (mem_addr, offset);
 +    }
  
    /* We ignore the clobbers in store_info.  The is mildly aggressive,
       but there really should not be a clobber followed by a read.  */
-@@ -2128,7 +2155,7 @@ check_mem_read_rtx (rtx *loc, void *data
+@@ -2128,7 +2161,7 @@ check_mem_read_rtx (rtx *loc, void *data
  	      = canon_true_dependence (store_info->mem, 
  				       GET_MODE (store_info->mem),
  				       store_info->mem_addr,
@@ -142,7 +180,7 @@
  	  
  	  else if (group_id == store_info->group_id)
  	    {
-@@ -2139,7 +2166,7 @@ check_mem_read_rtx (rtx *loc, void *data
+@@ -2139,7 +2172,7 @@ check_mem_read_rtx (rtx *loc, void *data
  		  = canon_true_dependence (store_info->mem, 
  					   GET_MODE (store_info->mem),
  					   store_info->mem_addr,
@@ -151,7 +189,7 @@
  	      
  	      /* If this read is just reading back something that we just
  		 stored, rewrite the read.  */
-@@ -2224,7 +2251,7 @@ check_mem_read_rtx (rtx *loc, void *data
+@@ -2224,7 +2257,7 @@ check_mem_read_rtx (rtx *loc, void *data
  	    remove = canon_true_dependence (store_info->mem, 
  					    GET_MODE (store_info->mem),
  					    store_info->mem_addr,
@@ -160,26 +198,20 @@
  	  
  	  if (remove)
  	    {
-@@ -3067,7 +3094,8 @@ scan_reads_nospill (insn_info_t insn_inf
+@@ -3066,8 +3099,9 @@ scan_reads_nospill (insn_info_t insn_inf
+ 		  if ((read_info->group_id < 0)
  		      && canon_true_dependence (group->base_mem, 
  						QImode,
- 						group->canon_base_mem,
+-						group->canon_base_mem,
 -						read_info->mem, rtx_varies_p))
++						group->canon_base_addr,
 +						read_info->mem, NULL_RTX,
 +						rtx_varies_p))
  		    {
  		      if (kill)
  			bitmap_ior_into (kill, group->group_kill);
---- gcc/cse.c.jj	2009-03-28 18:11:42.000000000 +0100
-+++ gcc/cse.c	2009-04-21 11:18:02.000000000 +0200
-@@ -1,6 +1,6 @@
- /* Common subexpression elimination for GNU compiler.
-    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
--   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-    Free Software Foundation, Inc.
- 
- This file is part of GCC.
+--- gcc/cse.c.jj	2009-04-22 22:20:23.000000000 +0200
++++ gcc/cse.c	2009-04-23 18:09:35.000000000 +0200
 @@ -1658,7 +1658,7 @@ check_dependence (rtx *x, void *data)
  {
    struct check_dependence_data *d = (struct check_dependence_data *) data;
@@ -189,9 +221,9 @@
  		    		  cse_rtx_varies_p);
    else
      return 0;
---- gcc/rtl.h.jj	2009-03-28 18:11:43.000000000 +0100
-+++ gcc/rtl.h	2009-04-21 11:17:04.000000000 +0200
-@@ -2282,7 +2282,7 @@ extern rtx canon_rtx (rtx);
+--- gcc/rtl.h.jj	2009-04-22 22:20:37.000000000 +0200
++++ gcc/rtl.h	2009-04-23 18:09:35.000000000 +0200
+@@ -2290,7 +2290,7 @@ extern rtx canon_rtx (rtx);
  extern int true_dependence (const_rtx, enum machine_mode, const_rtx, bool (*)(const_rtx, bool));
  extern rtx get_addr (rtx);
  extern int canon_true_dependence (const_rtx, enum machine_mode, rtx, const_rtx,
@@ -200,8 +232,8 @@
  extern int read_dependence (const_rtx, const_rtx);
  extern int anti_dependence (const_rtx, const_rtx);
  extern int output_dependence (const_rtx, const_rtx);
---- gcc/cselib.c.jj	2009-03-28 18:11:43.000000000 +0100
-+++ gcc/cselib.c	2009-04-21 11:18:25.000000000 +0200
+--- gcc/cselib.c.jj	2009-04-22 22:20:23.000000000 +0200
++++ gcc/cselib.c	2009-04-23 18:09:35.000000000 +0200
 @@ -1,6 +1,6 @@
  /* Common subexpression elimination library for GNU compiler.
     Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
@@ -219,8 +251,8 @@
  	    {
  	      has_mem = true;
  	      num_mems++;
---- gcc/gcse.c.jj	2009-03-28 18:11:42.000000000 +0100
-+++ gcc/gcse.c	2009-04-21 11:19:20.000000000 +0200
+--- gcc/gcse.c.jj	2009-04-22 22:20:23.000000000 +0200
++++ gcc/gcse.c	2009-04-23 18:09:35.000000000 +0200
 @@ -1,7 +1,7 @@
  /* Global common subexpression elimination/Partial redundancy elimination
     and global constant/copy propagation for GNU compiler.
@@ -230,7 +262,7 @@
  
  This file is part of GCC.
  
-@@ -2516,7 +2516,7 @@ compute_transp (const_rtx x, int indx, s
+@@ -2512,7 +2512,7 @@ compute_transp (const_rtx x, int indx, s
  		    dest_addr = XEXP (list_entry, 0);
  
  		    if (canon_true_dependence (dest, GET_MODE (dest), dest_addr,
@@ -239,10 +271,10 @@
  		      {
  			if (set_p)
  			  SET_BIT (bmap[bb_index], indx);
---- gcc/testsuite/gcc.dg/pr39794.c.jj	2009-04-21 13:08:45.000000000 +0200
-+++ gcc/testsuite/gcc.dg/pr39794.c	2009-04-21 13:07:29.000000000 +0200
+--- gcc/testsuite/gcc.dg/pr39794.c.jj	2009-04-23 18:09:35.000000000 +0200
++++ gcc/testsuite/gcc.dg/pr39794.c	2009-04-23 18:21:13.000000000 +0200
 @@ -0,0 +1,33 @@
-+/* PR middle-end/39794 */
++/* PR rtl-optimization/39794 */
 +/* { dg-do run } */
 +/* { dg-options "-O2 -funroll-loops" } */
 +


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/gcc/F-11/sources,v
retrieving revision 1.274
retrieving revision 1.275
diff -u -r1.274 -r1.275
--- sources	23 Apr 2009 07:34:34 -0000	1.274
+++ sources	24 Apr 2009 08:04:27 -0000	1.275
@@ -1,2 +1,2 @@
 2659f09c2e43ef8b7d4406321753f1b2  fastjar-0.97.tar.gz
-24abd4fb970849bf27e069a18e4d9e7e  gcc-4.4.0-20090423.tar.bz2
+441af0d1283e61c52f241a06710f56a3  gcc-4.4.0-20090424.tar.bz2




More information about the fedora-extras-commits mailing list