4.4.0-0.27
This commit is contained in:
parent
706509ff52
commit
718ed1464b
@ -1,2 +1,2 @@
|
|||||||
fastjar-0.97.tar.gz
|
fastjar-0.97.tar.gz
|
||||||
gcc-4.4.0-20090313.tar.bz2
|
gcc-4.4.0-20090317.tar.bz2
|
||||||
|
23
gcc.spec
23
gcc.spec
@ -1,9 +1,9 @@
|
|||||||
%define DATE 20090313
|
%define DATE 20090317
|
||||||
%define SVNREV 144837
|
%define SVNREV 144916
|
||||||
%define gcc_version 4.4.0
|
%define gcc_version 4.4.0
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %{release}, append them after %{gcc_release} on Release: line.
|
# %{release}, append them after %{gcc_release} on Release: line.
|
||||||
%define gcc_release 0.26
|
%define gcc_release 0.27
|
||||||
%define _unpackaged_files_terminate_build 0
|
%define _unpackaged_files_terminate_build 0
|
||||||
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||||
%define include_gappletviewer 1
|
%define include_gappletviewer 1
|
||||||
@ -152,10 +152,7 @@ Patch22: gcc44-raw-string.patch
|
|||||||
Patch24: gcc44-atom.patch
|
Patch24: gcc44-atom.patch
|
||||||
Patch25: gcc44-pr39226.patch
|
Patch25: gcc44-pr39226.patch
|
||||||
Patch26: gcc44-power7.patch
|
Patch26: gcc44-power7.patch
|
||||||
Patch27: gcc44-pr39412.patch
|
Patch27: gcc44-power7-2.patch
|
||||||
Patch28: gcc44-pr39443.patch
|
|
||||||
Patch29: gcc44-pr39454.patch
|
|
||||||
Patch30: gcc44-power7-2.patch
|
|
||||||
|
|
||||||
Patch1000: fastjar-0.97-segfault.patch
|
Patch1000: fastjar-0.97-segfault.patch
|
||||||
|
|
||||||
@ -445,10 +442,7 @@ which are required to compile with the GNAT.
|
|||||||
%patch24 -p0 -b .atom~
|
%patch24 -p0 -b .atom~
|
||||||
%patch25 -p0 -b .pr39226~
|
%patch25 -p0 -b .pr39226~
|
||||||
%patch26 -p0 -b .power7~
|
%patch26 -p0 -b .power7~
|
||||||
%patch27 -p0 -b .pr39412~
|
%patch27 -p0 -b .power7-2~
|
||||||
%patch28 -p0 -b .pr39443~
|
|
||||||
%patch29 -p0 -b .pr39454~
|
|
||||||
%patch30 -p0 -b .power7-2~
|
|
||||||
|
|
||||||
# This testcase doesn't compile.
|
# This testcase doesn't compile.
|
||||||
rm libjava/testsuite/libjava.lang/PR35020*
|
rm libjava/testsuite/libjava.lang/PR35020*
|
||||||
@ -1759,6 +1753,13 @@ fi
|
|||||||
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 17 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-0.27
|
||||||
|
- update from trunk
|
||||||
|
- PRs debug/37890, debug/39471, debug/39474, libstdc++/39405, target/34299,
|
||||||
|
target/39473, target/39476, target/39477, target/39482,
|
||||||
|
testsuite/37628, testsuite/37630, testsuite/37960, testsuite/38526,
|
||||||
|
tree-optimization/39455
|
||||||
|
|
||||||
* Sat Mar 14 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-0.26
|
* Sat Mar 14 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-0.26
|
||||||
- fix ppc64 regression caused by the power7 backport (#490149,
|
- fix ppc64 regression caused by the power7 backport (#490149,
|
||||||
PR target/39457)
|
PR target/39457)
|
||||||
|
@ -1,170 +0,0 @@
|
|||||||
2009-03-11 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR debug/39412
|
|
||||||
* dwarf2out.c (gen_inlined_enumeration_type_die,
|
|
||||||
gen_inlined_structure_type_die, gen_inlined_union_type_die,
|
|
||||||
gen_tagged_type_instantiation_die): Removed.
|
|
||||||
(gen_decl_die): For TYPE_DECL_IS_STUB with non-NULL decl_origin
|
|
||||||
do nothing.
|
|
||||||
|
|
||||||
* gcc.dg/debug/pr39412.c: New test.
|
|
||||||
|
|
||||||
--- gcc/dwarf2out.c.jj 2009-03-09 11:38:55.000000000 +0100
|
|
||||||
+++ gcc/dwarf2out.c 2009-03-11 11:12:02.000000000 +0100
|
|
||||||
@@ -5149,9 +5149,6 @@ static void gen_descr_array_type_die (tr
|
|
||||||
#if 0
|
|
||||||
static void gen_entry_point_die (tree, dw_die_ref);
|
|
||||||
#endif
|
|
||||||
-static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
|
|
||||||
-static void gen_inlined_structure_type_die (tree, dw_die_ref);
|
|
||||||
-static void gen_inlined_union_type_die (tree, dw_die_ref);
|
|
||||||
static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
|
|
||||||
static dw_die_ref gen_formal_parameter_die (tree, tree, dw_die_ref);
|
|
||||||
static void gen_unspecified_parameters_die (tree, dw_die_ref);
|
|
||||||
@@ -5172,7 +5169,6 @@ static void gen_struct_or_union_type_die
|
|
||||||
static void gen_subroutine_type_die (tree, dw_die_ref);
|
|
||||||
static void gen_typedef_die (tree, dw_die_ref);
|
|
||||||
static void gen_type_die (tree, dw_die_ref);
|
|
||||||
-static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
|
|
||||||
static void gen_block_die (tree, dw_die_ref, int);
|
|
||||||
static void decls_for_scope (tree, dw_die_ref, int);
|
|
||||||
static int is_redundant_typedef (const_tree);
|
|
||||||
@@ -13149,18 +13145,6 @@ retry_incomplete_types (void)
|
|
||||||
gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Generate a DIE to represent an inlined instance of an enumeration type. */
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
|
|
||||||
-{
|
|
||||||
- dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
|
|
||||||
-
|
|
||||||
- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
|
|
||||||
- be incomplete and such types are not marked. */
|
|
||||||
- add_abstract_origin_attribute (type_die, type);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/* Determine what tag to use for a record type. */
|
|
||||||
|
|
||||||
static enum dwarf_tag
|
|
||||||
@@ -13185,30 +13169,6 @@ record_type_tag (tree type)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Generate a DIE to represent an inlined instance of a structure type. */
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
|
|
||||||
-{
|
|
||||||
- dw_die_ref type_die = new_die (record_type_tag (type), context_die, type);
|
|
||||||
-
|
|
||||||
- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
|
|
||||||
- be incomplete and such types are not marked. */
|
|
||||||
- add_abstract_origin_attribute (type_die, type);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-/* Generate a DIE to represent an inlined instance of a union type. */
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-gen_inlined_union_type_die (tree type, dw_die_ref context_die)
|
|
||||||
-{
|
|
||||||
- dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
|
|
||||||
-
|
|
||||||
- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
|
|
||||||
- be incomplete and such types are not marked. */
|
|
||||||
- add_abstract_origin_attribute (type_die, type);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/* Generate a DIE to represent an enumeration type. Note that these DIEs
|
|
||||||
include all of the information about the enumeration values also. Each
|
|
||||||
enumerated type name/value is listed as a child of the enumerated type
|
|
||||||
@@ -14835,46 +14795,6 @@ gen_type_die (tree type, dw_die_ref cont
|
|
||||||
gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Generate a DIE for a tagged type instantiation. */
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
|
|
||||||
-{
|
|
||||||
- if (type == NULL_TREE || type == error_mark_node)
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
- /* We are going to output a DIE to represent the unqualified version of
|
|
||||||
- this type (i.e. without any const or volatile qualifiers) so make sure
|
|
||||||
- that we have the main variant (i.e. the unqualified version) of this
|
|
||||||
- type now. */
|
|
||||||
- gcc_assert (type == type_main_variant (type));
|
|
||||||
-
|
|
||||||
- /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
|
|
||||||
- an instance of an unresolved type. */
|
|
||||||
-
|
|
||||||
- switch (TREE_CODE (type))
|
|
||||||
- {
|
|
||||||
- case ERROR_MARK:
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case ENUMERAL_TYPE:
|
|
||||||
- gen_inlined_enumeration_type_die (type, context_die);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case RECORD_TYPE:
|
|
||||||
- gen_inlined_structure_type_die (type, context_die);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case UNION_TYPE:
|
|
||||||
- case QUAL_UNION_TYPE:
|
|
||||||
- gen_inlined_union_type_die (type, context_die);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- default:
|
|
||||||
- gcc_unreachable ();
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
|
|
||||||
things which are local to the given block. */
|
|
||||||
|
|
||||||
@@ -15315,14 +15235,14 @@ gen_decl_die (tree decl, tree origin, dw
|
|
||||||
of some type tag, if the given TYPE_DECL is marked as having been
|
|
||||||
instantiated from some other (original) TYPE_DECL node (e.g. one which
|
|
||||||
was generated within the original definition of an inline function) we
|
|
||||||
- have to generate a special (abbreviated) DW_TAG_structure_type,
|
|
||||||
- DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
|
|
||||||
- if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE
|
|
||||||
- && is_tagged_type (TREE_TYPE (decl)))
|
|
||||||
- {
|
|
||||||
- gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ used to generate a special (abbreviated) DW_TAG_structure_type,
|
|
||||||
+ DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
|
|
||||||
+ should be actually referencing those DIEs, as variable DIEs with that
|
|
||||||
+ type would be emitted already in the abstract origin, so it was always
|
|
||||||
+ removed during unused type prunning. Don't add anything in this
|
|
||||||
+ case. */
|
|
||||||
+ if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
if (is_redundant_typedef (decl))
|
|
||||||
gen_type_die (TREE_TYPE (decl), context_die);
|
|
||||||
--- gcc/testsuite/gcc.dg/debug/pr39412.c.jj 2009-03-11 11:14:32.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/debug/pr39412.c 2009-03-11 11:14:39.000000000 +0100
|
|
||||||
@@ -0,0 +1,16 @@
|
|
||||||
+/* PR debug/39412 */
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+
|
|
||||||
+struct S { int i; };
|
|
||||||
+
|
|
||||||
+inline void
|
|
||||||
+bar (const void *x, unsigned long y)
|
|
||||||
+{
|
|
||||||
+ const union { struct S a[y]; } *u = x;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+foo (const void *x, unsigned long y)
|
|
||||||
+{
|
|
||||||
+ bar (x, y);
|
|
||||||
+}
|
|
@ -1,131 +0,0 @@
|
|||||||
2009-03-12 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR middle-end/39443
|
|
||||||
* optabs.c (set_user_assembler_libfunc): New function.
|
|
||||||
* expr.h (set_user_assembler_libfunc): New prototype.
|
|
||||||
* c-common.c: Include libfuncs.h.
|
|
||||||
(set_builtin_user_assembler_name): Call set_user_assembler_libfunc
|
|
||||||
for memcmp, memset, memcpy, memmove and abort.
|
|
||||||
|
|
||||||
* gcc.dg/pr39443.c: New test.
|
|
||||||
|
|
||||||
--- gcc/optabs.c.jj 2008-11-18 19:24:09.000000000 +0100
|
|
||||||
+++ gcc/optabs.c 2009-03-12 16:16:56.000000000 +0100
|
|
||||||
@@ -6072,6 +6072,24 @@ init_one_libfunc (const char *name)
|
|
||||||
return XEXP (DECL_RTL (decl), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Adjust the assembler name of libfunc NAME to ASMSPEC. */
|
|
||||||
+
|
|
||||||
+rtx
|
|
||||||
+set_user_assembler_libfunc (const char *name, const char *asmspec)
|
|
||||||
+{
|
|
||||||
+ tree id, decl;
|
|
||||||
+ void **slot;
|
|
||||||
+ hashval_t hash;
|
|
||||||
+
|
|
||||||
+ id = get_identifier (name);
|
|
||||||
+ hash = htab_hash_string (name);
|
|
||||||
+ slot = htab_find_slot_with_hash (libfunc_decls, id, hash, INSERT);
|
|
||||||
+ decl = (tree) *slot;
|
|
||||||
+ gcc_assert (decl);
|
|
||||||
+ set_user_assembler_name (decl, asmspec);
|
|
||||||
+ return XEXP (DECL_RTL (decl), 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Call this to reset the function entry for one optab (OPTABLE) in mode
|
|
||||||
MODE to NAME, which should be either 0 or a string constant. */
|
|
||||||
void
|
|
||||||
--- gcc/expr.h.jj 2009-02-20 15:33:46.000000000 +0100
|
|
||||||
+++ gcc/expr.h 2009-03-12 16:17:41.000000000 +0100
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
/* Definitions for code generation pass of GNU compiler.
|
|
||||||
Copyright (C) 1987, 1991, 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.
|
|
||||||
@@ -786,6 +786,7 @@ extern void init_all_optabs (void);
|
|
||||||
|
|
||||||
/* Call this to initialize an optab function entry. */
|
|
||||||
extern rtx init_one_libfunc (const char *);
|
|
||||||
+extern rtx set_user_assembler_libfunc (const char *, const char *);
|
|
||||||
|
|
||||||
extern int vector_mode_valid_p (enum machine_mode);
|
|
||||||
|
|
||||||
--- gcc/c-common.c.jj 2009-03-02 09:45:47.000000000 +0100
|
|
||||||
+++ gcc/c-common.c 2009-03-12 16:20:37.000000000 +0100
|
|
||||||
@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3.
|
|
||||||
#include "target-def.h"
|
|
||||||
#include "gimple.h"
|
|
||||||
#include "fixed-value.h"
|
|
||||||
+#include "libfuncs.h"
|
|
||||||
|
|
||||||
cpp_reader *parse_in; /* Declared in c-pragma.h. */
|
|
||||||
|
|
||||||
@@ -4401,10 +4402,28 @@ set_builtin_user_assembler_name (tree de
|
|
||||||
|
|
||||||
builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
|
|
||||||
set_user_assembler_name (builtin, asmspec);
|
|
||||||
- if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
|
|
||||||
- init_block_move_fn (asmspec);
|
|
||||||
- else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
|
|
||||||
- init_block_clear_fn (asmspec);
|
|
||||||
+ switch (DECL_FUNCTION_CODE (decl))
|
|
||||||
+ {
|
|
||||||
+ case BUILT_IN_MEMCPY:
|
|
||||||
+ init_block_move_fn (asmspec);
|
|
||||||
+ memcpy_libfunc = set_user_assembler_libfunc ("memcpy", asmspec);
|
|
||||||
+ break;
|
|
||||||
+ case BUILT_IN_MEMSET:
|
|
||||||
+ init_block_clear_fn (asmspec);
|
|
||||||
+ memset_libfunc = set_user_assembler_libfunc ("memset", asmspec);
|
|
||||||
+ break;
|
|
||||||
+ case BUILT_IN_MEMMOVE:
|
|
||||||
+ memmove_libfunc = set_user_assembler_libfunc ("memmove", asmspec);
|
|
||||||
+ break;
|
|
||||||
+ case BUILT_IN_MEMCMP:
|
|
||||||
+ memcmp_libfunc = set_user_assembler_libfunc ("memcmp", asmspec);
|
|
||||||
+ break;
|
|
||||||
+ case BUILT_IN_ABORT:
|
|
||||||
+ abort_libfunc = set_user_assembler_libfunc ("abort", asmspec);
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The number of named compound-literals generated thus far. */
|
|
||||||
--- gcc/Makefile.in.jj 2009-02-20 15:49:01.000000000 +0100
|
|
||||||
+++ gcc/Makefile.in 2009-03-12 16:42:47.000000000 +0100
|
|
||||||
@@ -1890,7 +1890,7 @@ c-common.o : c-common.c $(CONFIG_H) $(SY
|
|
||||||
$(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h tree-mudflap.h \
|
|
||||||
intl.h opts.h $(REAL_H) $(CPPLIB_H) $(TREE_INLINE_H) $(HASHTAB_H) \
|
|
||||||
$(BUILTINS_DEF) $(CGRAPH_H) $(BASIC_BLOCK_H) $(TARGET_DEF_H) \
|
|
||||||
- $(GIMPLE_H)
|
|
||||||
+ $(GIMPLE_H) libfuncs.h
|
|
||||||
|
|
||||||
c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
|
|
||||||
$(C_TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(REAL_H) \
|
|
||||||
--- gcc/testsuite/gcc.dg/pr39443.c.jj 2009-03-12 16:33:41.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/pr39443.c 2009-03-12 16:33:22.000000000 +0100
|
|
||||||
@@ -0,0 +1,18 @@
|
|
||||||
+/* PR middle-end/39443 */
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O2" } */
|
|
||||||
+/* { dg-final { scan-assembler-not "memcmp" } } */
|
|
||||||
+
|
|
||||||
+typedef __SIZE_TYPE__ size_t;
|
|
||||||
+
|
|
||||||
+extern int memcmp (const void *s1, const void *s2, size_t n)
|
|
||||||
+ __attribute__ ((__nothrow__, __pure__));
|
|
||||||
+extern __typeof (memcmp) memcmp __asm__ ("memory_compare");
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+test (char *s, char *t, int cnt)
|
|
||||||
+{
|
|
||||||
+ if (__builtin_expect (cnt, 0))
|
|
||||||
+ return memcmp (s, t, cnt);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
@ -1,74 +0,0 @@
|
|||||||
2009-03-13 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR bootstrap/39454
|
|
||||||
* cse.c (fold_rtx): Don't modify original const_arg1 when
|
|
||||||
canonicalizing SHIFT_COUNT_TRUNCATED shift count, do it on a
|
|
||||||
separate variable instead.
|
|
||||||
* rtlanal.c (nonzero_bits1) <case ASHIFTRT>: Don't assume anything
|
|
||||||
from out of range shift counts.
|
|
||||||
(num_sign_bit_copies1) <case ASHIFTRT, case ASHIFT>: Similarly.
|
|
||||||
|
|
||||||
--- gcc/cse.c.jj 2009-03-06 20:29:07.000000000 +0100
|
|
||||||
+++ gcc/cse.c 2009-03-13 11:44:11.000000000 +0100
|
|
||||||
@@ -3464,6 +3464,7 @@ fold_rtx (rtx x, rtx insn)
|
|
||||||
int is_shift
|
|
||||||
= (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT);
|
|
||||||
rtx y, inner_const, new_const;
|
|
||||||
+ rtx canon_const_arg1 = const_arg1;
|
|
||||||
enum rtx_code associate_code;
|
|
||||||
|
|
||||||
if (is_shift
|
|
||||||
@@ -3471,8 +3472,9 @@ fold_rtx (rtx x, rtx insn)
|
|
||||||
|| INTVAL (const_arg1) < 0))
|
|
||||||
{
|
|
||||||
if (SHIFT_COUNT_TRUNCATED)
|
|
||||||
- const_arg1 = GEN_INT (INTVAL (const_arg1)
|
|
||||||
- & (GET_MODE_BITSIZE (mode) - 1));
|
|
||||||
+ canon_const_arg1 = GEN_INT (INTVAL (const_arg1)
|
|
||||||
+ & (GET_MODE_BITSIZE (mode)
|
|
||||||
+ - 1));
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -3531,7 +3533,8 @@ fold_rtx (rtx x, rtx insn)
|
|
||||||
associate_code = (is_shift || code == MINUS ? PLUS : code);
|
|
||||||
|
|
||||||
new_const = simplify_binary_operation (associate_code, mode,
|
|
||||||
- const_arg1, inner_const);
|
|
||||||
+ canon_const_arg1,
|
|
||||||
+ inner_const);
|
|
||||||
|
|
||||||
if (new_const == 0)
|
|
||||||
break;
|
|
||||||
--- gcc/rtlanal.c.jj 2009-02-20 15:55:28.000000000 +0100
|
|
||||||
+++ gcc/rtlanal.c 2009-03-13 13:30:55.000000000 +0100
|
|
||||||
@@ -4061,7 +4061,8 @@ nonzero_bits1 (const_rtx x, enum machine
|
|
||||||
low-order bits by left shifts. */
|
|
||||||
if (GET_CODE (XEXP (x, 1)) == CONST_INT
|
|
||||||
&& INTVAL (XEXP (x, 1)) >= 0
|
|
||||||
- && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT)
|
|
||||||
+ && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT
|
|
||||||
+ && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x)))
|
|
||||||
{
|
|
||||||
enum machine_mode inner_mode = GET_MODE (x);
|
|
||||||
unsigned int width = GET_MODE_BITSIZE (inner_mode);
|
|
||||||
@@ -4542,7 +4543,8 @@ num_sign_bit_copies1 (const_rtx x, enum
|
|
||||||
num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode,
|
|
||||||
known_x, known_mode, known_ret);
|
|
||||||
if (GET_CODE (XEXP (x, 1)) == CONST_INT
|
|
||||||
- && INTVAL (XEXP (x, 1)) > 0)
|
|
||||||
+ && INTVAL (XEXP (x, 1)) > 0
|
|
||||||
+ && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x)))
|
|
||||||
num0 = MIN ((int) bitwidth, num0 + INTVAL (XEXP (x, 1)));
|
|
||||||
|
|
||||||
return num0;
|
|
||||||
@@ -4551,7 +4553,8 @@ num_sign_bit_copies1 (const_rtx x, enum
|
|
||||||
/* Left shifts destroy copies. */
|
|
||||||
if (GET_CODE (XEXP (x, 1)) != CONST_INT
|
|
||||||
|| INTVAL (XEXP (x, 1)) < 0
|
|
||||||
- || INTVAL (XEXP (x, 1)) >= (int) bitwidth)
|
|
||||||
+ || INTVAL (XEXP (x, 1)) >= (int) bitwidth
|
|
||||||
+ || INTVAL (XEXP (x, 1)) >= GET_MODE_BITSIZE (GET_MODE (x)))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode,
|
|
Loading…
Reference in New Issue
Block a user