From 614bd41946a475d8ac1e1cef2daddadac4d5a1c3 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Apr 24 2009 08:04:27 +0000 Subject: 4.4.0-2 --- diff --git a/.cvsignore b/.cvsignore index 518a5ae..3b92ddd 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.0-20090423.tar.bz2 +gcc-4.4.0-20090424.tar.bz2 diff --git a/gcc.spec b/gcc.spec index ba6e053..0168752 100644 --- a/gcc.spec +++ b/gcc.spec @@ -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 @@ Patch32: gcc44-rh459374-1.patch 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 @@ which are required to compile with the GNAT. %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 @@ fi /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 @@ if [ $1 = 0 ]; then /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 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Fri Apr 24 2009 Jakub Jelinek 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 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 diff --git a/gcc44-pr39794.patch b/gcc44-pr39794.patch index 620343e..dfa7d85 100644 --- a/gcc44-pr39794.patch +++ b/gcc44-pr39794.patch @@ -1,22 +1,25 @@ -2009-04-21 Jakub Jelinek +2009-04-24 Jakub Jelinek - 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" } */ + diff --git a/gcc44-pr39867.patch b/gcc44-pr39867.patch new file mode 100644 index 0000000..3f971c6 --- /dev/null +++ b/gcc44-pr39867.patch @@ -0,0 +1,70 @@ +2009-04-24 Paolo Bonzini + + 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; ++} diff --git a/sources b/sources index 163ab96..9741493 100644 --- a/sources +++ b/sources @@ -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