4.5.0-4
This commit is contained in:
parent
034cab8256
commit
e409bbf1b0
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
fastjar-0.97.tar.gz
|
fastjar-0.97.tar.gz
|
||||||
gcc-4.5.0-20100716.tar.bz2
|
gcc-4.5.0-20100716.tar.bz2
|
||||||
|
gcc-4.5.0-20100730.tar.bz2
|
||||||
|
30
gcc.spec
30
gcc.spec
@ -1,9 +1,9 @@
|
|||||||
%global DATE 20100716
|
%global DATE 20100730
|
||||||
%global SVNREV 162258
|
%global SVNREV 162712
|
||||||
%global gcc_version 4.5.0
|
%global gcc_version 4.5.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.
|
||||||
%global gcc_release 3
|
%global gcc_release 4
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||||
%ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
|
%ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
|
||||||
@ -143,7 +143,6 @@ Requires(preun): /sbin/install-info
|
|||||||
AutoReq: true
|
AutoReq: true
|
||||||
|
|
||||||
Patch0: gcc45-hack.patch
|
Patch0: gcc45-hack.patch
|
||||||
Patch1: gcc45-build-id.patch
|
|
||||||
Patch2: gcc45-c++-builtin-redecl.patch
|
Patch2: gcc45-c++-builtin-redecl.patch
|
||||||
Patch4: gcc45-java-nomulti.patch
|
Patch4: gcc45-java-nomulti.patch
|
||||||
Patch5: gcc45-ppc32-retaddr.patch
|
Patch5: gcc45-ppc32-retaddr.patch
|
||||||
@ -157,8 +156,7 @@ Patch12: gcc45-cloog-dl.patch
|
|||||||
Patch14: gcc45-pr38757.patch
|
Patch14: gcc45-pr38757.patch
|
||||||
Patch15: gcc45-libstdc++-docs.patch
|
Patch15: gcc45-libstdc++-docs.patch
|
||||||
Patch17: gcc45-no-add-needed.patch
|
Patch17: gcc45-no-add-needed.patch
|
||||||
Patch18: gcc45-pr44542.patch
|
Patch18: gcc45-pr45055.patch
|
||||||
Patch19: gcc45-pr44942.patch
|
|
||||||
|
|
||||||
Patch1000: fastjar-0.97-segfault.patch
|
Patch1000: fastjar-0.97-segfault.patch
|
||||||
Patch1001: fastjar-0.97-len1.patch
|
Patch1001: fastjar-0.97-len1.patch
|
||||||
@ -471,7 +469,6 @@ GNAT is a GNU Ada 95 front-end to GCC. This package includes static libraries.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n gcc-%{version}-%{DATE}
|
%setup -q -n gcc-%{version}-%{DATE}
|
||||||
%patch0 -p0 -b .hack~
|
%patch0 -p0 -b .hack~
|
||||||
%patch1 -p0 -b .build-id~
|
|
||||||
%patch2 -p0 -b .c++-builtin-redecl~
|
%patch2 -p0 -b .c++-builtin-redecl~
|
||||||
%patch4 -p0 -b .java-nomulti~
|
%patch4 -p0 -b .java-nomulti~
|
||||||
%patch5 -p0 -b .ppc32-retaddr~
|
%patch5 -p0 -b .ppc32-retaddr~
|
||||||
@ -489,8 +486,7 @@ GNAT is a GNU Ada 95 front-end to GCC. This package includes static libraries.
|
|||||||
%patch15 -p0 -b .libstdc++-docs~
|
%patch15 -p0 -b .libstdc++-docs~
|
||||||
%endif
|
%endif
|
||||||
%patch17 -p0 -b .no-add-needed~
|
%patch17 -p0 -b .no-add-needed~
|
||||||
%patch18 -p0 -b .pr44542~
|
%patch18 -p0 -b .pr45055~
|
||||||
%patch19 -p0 -b .pr44942~
|
|
||||||
|
|
||||||
# This testcase doesn't compile.
|
# This testcase doesn't compile.
|
||||||
rm libjava/testsuite/libjava.lang/PR35020*
|
rm libjava/testsuite/libjava.lang/PR35020*
|
||||||
@ -512,7 +508,7 @@ echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
|
|||||||
|
|
||||||
# Default to -gdwarf-3 rather than -gdwarf-2
|
# Default to -gdwarf-3 rather than -gdwarf-2
|
||||||
sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(3)/' gcc/common.opt
|
sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(3)/' gcc/common.opt
|
||||||
sed -i 's/\(may be either 2 or 3; the default version is \)2\./\13./' gcc/doc/invoke.texi
|
sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\13./' gcc/doc/invoke.texi
|
||||||
|
|
||||||
cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
|
cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
|
||||||
|
|
||||||
@ -632,7 +628,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`"
|
|||||||
--with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \
|
--with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \
|
||||||
--enable-shared --enable-threads=posix --enable-checking=release \
|
--enable-shared --enable-threads=posix --enable-checking=release \
|
||||||
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
|
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
|
||||||
--enable-gnu-unique-object \
|
--enable-gnu-unique-object --enable-linker-build-id \
|
||||||
%if !%{build_ada}
|
%if !%{build_ada}
|
||||||
--enable-languages=c,c++,objc,obj-c++,java,fortran,lto \
|
--enable-languages=c,c++,objc,obj-c++,java,fortran,lto \
|
||||||
%else
|
%else
|
||||||
@ -1962,6 +1958,18 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 30 2010 Jakub Jelinek <jakub@redhat.com> 4.5.0-4
|
||||||
|
- update from gcc-4_5-branch
|
||||||
|
- PRs c++/43016, c++/44996, c++/45008, c/45079, debug/45015, fortran/30668,
|
||||||
|
fortran/31346, fortran/34260, fortran/40011, testsuite/38946,
|
||||||
|
tree-optimization/44900, tree-optimization/44977
|
||||||
|
- fix vectorizer ICE (#6617492, PR tree-optimization/45047)
|
||||||
|
- use --enable-linker-build-id in configury instead of patching
|
||||||
|
--build-id support in
|
||||||
|
- VTA backports
|
||||||
|
- PRs debug/45055, rtl-optimization/45137, debug/45003,
|
||||||
|
debug/45006, bootstrap/45028
|
||||||
|
|
||||||
* Fri Jul 16 2010 Jakub Jelinek <jakub@redhat.com> 4.5.0-3
|
* Fri Jul 16 2010 Jakub Jelinek <jakub@redhat.com> 4.5.0-3
|
||||||
- update from gcc-4_5-branch
|
- update from gcc-4_5-branch
|
||||||
- PRs ada/43731, fortran/44773, pch/14940, testsuite/44325
|
- PRs ada/43731, fortran/44773, pch/14940, testsuite/44325
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
2007-07-22 Roland McGrath <roland@redhat.com>
|
|
||||||
|
|
||||||
* config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for
|
|
||||||
non-relocatable link.
|
|
||||||
* config/linux.h (LINK_EH_SPEC): Likewise.
|
|
||||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
|
||||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
|
||||||
|
|
||||||
--- gcc/config/rs6000/sysv4.h.~1~
|
|
||||||
+++ gcc/config/rs6000/sysv4.h
|
|
||||||
@@ -906,7 +906,7 @@ extern int fixuplabelno;
|
|
||||||
%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
|
|
||||||
|
|
||||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
|
||||||
-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
|
||||||
+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
|
|
||||||
--- gcc/config/linux.h.~1~
|
|
||||||
+++ gcc/config/linux.h
|
|
||||||
@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA. */
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
|
||||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
|
||||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define this so we can compile MS code for use with WINE. */
|
|
||||||
--- gcc/config/alpha/elf.h.~1~
|
|
||||||
+++ gcc/config/alpha/elf.h
|
|
||||||
@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu
|
|
||||||
I imagine that other systems will catch up. In the meantime, it
|
|
||||||
doesn't harm to make sure that the data exists to be used later. */
|
|
||||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
|
||||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
|
||||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* A C statement (sans semicolon) to output to the stdio stream STREAM
|
|
||||||
--- gcc/config/ia64/linux.h.~1~
|
|
||||||
+++ gcc/config/ia64/linux.h
|
|
||||||
@@ -56,7 +56,7 @@ do { \
|
|
||||||
Signalize that because we have fde-glibc, we don't need all C shared libs
|
|
||||||
linked against -lgcc_s. */
|
|
||||||
#undef LINK_EH_SPEC
|
|
||||||
-#define LINK_EH_SPEC ""
|
|
||||||
+#define LINK_EH_SPEC "%{!r:--build-id} "
|
|
||||||
|
|
||||||
#define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
2010-06-17 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR target/44542
|
|
||||||
* cfgexpand.c (expand_one_stack_var_at): Limit align to maximum
|
|
||||||
of max_used_stack_slot_alignment and PREFERRED_STACK_BOUNDARY
|
|
||||||
instead of MAX_SUPPORTED_STACK_ALIGNMENT.
|
|
||||||
(expand_one_var): Don't consider DECL_ALIGN for variables for
|
|
||||||
which expand_one_stack_var_at has been already called.
|
|
||||||
|
|
||||||
--- gcc/cfgexpand.c.jj 2010-06-17 17:01:11.964198458 +0200
|
|
||||||
+++ gcc/cfgexpand.c 2010-06-17 18:25:18.940335757 +0200
|
|
||||||
@@ -705,7 +705,7 @@ static void
|
|
||||||
expand_one_stack_var_at (tree decl, HOST_WIDE_INT offset)
|
|
||||||
{
|
|
||||||
/* Alignment is unsigned. */
|
|
||||||
- unsigned HOST_WIDE_INT align;
|
|
||||||
+ unsigned HOST_WIDE_INT align, max_align;
|
|
||||||
rtx x;
|
|
||||||
|
|
||||||
/* If this fails, we've overflowed the stack frame. Error nicely? */
|
|
||||||
@@ -722,10 +722,10 @@ expand_one_stack_var_at (tree decl, HOST
|
|
||||||
offset -= frame_phase;
|
|
||||||
align = offset & -offset;
|
|
||||||
align *= BITS_PER_UNIT;
|
|
||||||
- if (align == 0)
|
|
||||||
- align = STACK_BOUNDARY;
|
|
||||||
- else if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
|
|
||||||
- align = MAX_SUPPORTED_STACK_ALIGNMENT;
|
|
||||||
+ max_align = MAX (crtl->max_used_stack_slot_alignment,
|
|
||||||
+ PREFERRED_STACK_BOUNDARY);
|
|
||||||
+ if (align == 0 || align > max_align)
|
|
||||||
+ align = max_align;
|
|
||||||
|
|
||||||
DECL_ALIGN (decl) = align;
|
|
||||||
DECL_USER_ALIGN (decl) = 0;
|
|
||||||
@@ -930,6 +930,13 @@ expand_one_var (tree var, bool toplevel,
|
|
||||||
align = MINIMUM_ALIGNMENT (TREE_TYPE (var),
|
|
||||||
TYPE_MODE (TREE_TYPE (var)),
|
|
||||||
TYPE_ALIGN (TREE_TYPE (var)));
|
|
||||||
+ else if (DECL_HAS_VALUE_EXPR_P (var)
|
|
||||||
+ || (DECL_RTL_SET_P (var) && MEM_P (DECL_RTL (var))))
|
|
||||||
+ /* Don't consider debug only variables with DECL_HAS_VALUE_EXPR_P set
|
|
||||||
+ or variables which were assigned a stack slot already by
|
|
||||||
+ expand_one_stack_var_at - in the latter case DECL_ALIGN has been
|
|
||||||
+ changed from the offset chosen to it. */
|
|
||||||
+ align = crtl->stack_alignment_estimated;
|
|
||||||
else
|
|
||||||
align = MINIMUM_ALIGNMENT (var, DECL_MODE (var), DECL_ALIGN (var));
|
|
||||||
|
|
@ -1,192 +0,0 @@
|
|||||||
2010-07-16 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR target/44942
|
|
||||||
* config/i386/i386-protos.h (ix86_function_arg_boundary): Change second
|
|
||||||
argument to const_tree.
|
|
||||||
* config/i386/i386.c (function_arg_advance): If padding needs to be
|
|
||||||
inserted before argument, increment cum->words by number of padding
|
|
||||||
words as well.
|
|
||||||
(contains_aligned_value_p): Change argument to const_tree.
|
|
||||||
(ix86_function_arg_boundary): Change second argument to const_tree.
|
|
||||||
|
|
||||||
* gcc.c-torture/execute/pr44942.c: New test.
|
|
||||||
* gcc.target/i386/pr44942.c: New test.
|
|
||||||
|
|
||||||
--- gcc/config/i386/i386-protos.h.jj 2010-07-13 15:56:31.000000000 +0200
|
|
||||||
+++ gcc/config/i386/i386-protos.h 2010-07-15 12:45:01.000000000 +0200
|
|
||||||
@@ -137,8 +137,8 @@ extern enum machine_mode ix86_fp_compare
|
|
||||||
extern rtx ix86_libcall_value (enum machine_mode);
|
|
||||||
extern bool ix86_function_value_regno_p (int);
|
|
||||||
extern bool ix86_function_arg_regno_p (int);
|
|
||||||
-extern int ix86_function_arg_boundary (enum machine_mode, tree);
|
|
||||||
-extern bool ix86_solaris_return_in_memory (const_tree,const_tree);
|
|
||||||
+extern int ix86_function_arg_boundary (enum machine_mode, const_tree);
|
|
||||||
+extern bool ix86_solaris_return_in_memory (const_tree, const_tree);
|
|
||||||
extern rtx ix86_force_to_memory (enum machine_mode, rtx);
|
|
||||||
extern void ix86_free_from_memory (enum machine_mode);
|
|
||||||
extern enum calling_abi ix86_cfun_abi (void);
|
|
||||||
--- gcc/config/i386/i386.c.jj 2010-07-13 15:56:31.000000000 +0200
|
|
||||||
+++ gcc/config/i386/i386.c 2010-07-15 12:44:31.000000000 +0200
|
|
||||||
@@ -6157,9 +6157,8 @@ function_arg_advance_64 (CUMULATIVE_ARGS
|
|
||||||
if (!named && VALID_AVX256_REG_MODE (mode))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (!examine_argument (mode, type, 0, &int_nregs, &sse_nregs))
|
|
||||||
- cum->words += words;
|
|
||||||
- else if (sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs)
|
|
||||||
+ if (examine_argument (mode, type, 0, &int_nregs, &sse_nregs)
|
|
||||||
+ && sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs)
|
|
||||||
{
|
|
||||||
cum->nregs -= int_nregs;
|
|
||||||
cum->sse_nregs -= sse_nregs;
|
|
||||||
@@ -6167,7 +6166,11 @@ function_arg_advance_64 (CUMULATIVE_ARGS
|
|
||||||
cum->sse_regno += sse_nregs;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- cum->words += words;
|
|
||||||
+ {
|
|
||||||
+ int align = ix86_function_arg_boundary (mode, type) / BITS_PER_WORD;
|
|
||||||
+ cum->words = (cum->words + align - 1) & ~(align - 1);
|
|
||||||
+ cum->words += words;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -6508,7 +6511,7 @@ ix86_pass_by_reference (CUMULATIVE_ARGS
|
|
||||||
/* Return true when TYPE should be 128bit aligned for 32bit argument passing
|
|
||||||
ABI. */
|
|
||||||
static bool
|
|
||||||
-contains_aligned_value_p (tree type)
|
|
||||||
+contains_aligned_value_p (const_tree type)
|
|
||||||
{
|
|
||||||
enum machine_mode mode = TYPE_MODE (type);
|
|
||||||
if (((TARGET_SSE && SSE_REG_MODE_P (mode))
|
|
||||||
@@ -6558,7 +6561,7 @@ contains_aligned_value_p (tree type)
|
|
||||||
specified mode and type. */
|
|
||||||
|
|
||||||
int
|
|
||||||
-ix86_function_arg_boundary (enum machine_mode mode, tree type)
|
|
||||||
+ix86_function_arg_boundary (enum machine_mode mode, const_tree type)
|
|
||||||
{
|
|
||||||
int align;
|
|
||||||
if (type)
|
|
||||||
--- gcc/testsuite/gcc.c-torture/execute/pr44942.c.jj 2010-07-15 13:41:28.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.c-torture/execute/pr44942.c 2010-07-15 13:46:40.000000000 +0200
|
|
||||||
@@ -0,0 +1,70 @@
|
|
||||||
+/* PR target/44942 */
|
|
||||||
+
|
|
||||||
+#include <stdarg.h>
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test1 (int a, int b, int c, int d, int e, int f, int g, long double h, ...)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, h);
|
|
||||||
+ i = va_arg (ap, int);
|
|
||||||
+ if (i != 1234)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test2 (int a, int b, int c, int d, int e, int f, int g, long double h, int i,
|
|
||||||
+ long double j, int k, long double l, int m, long double n, ...)
|
|
||||||
+{
|
|
||||||
+ int o;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, n);
|
|
||||||
+ o = va_arg (ap, int);
|
|
||||||
+ if (o != 1234)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test3 (double a, double b, double c, double d, double e, double f,
|
|
||||||
+ double g, long double h, ...)
|
|
||||||
+{
|
|
||||||
+ double i;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, h);
|
|
||||||
+ i = va_arg (ap, double);
|
|
||||||
+ if (i != 1234.0)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test4 (double a, double b, double c, double d, double e, double f, double g,
|
|
||||||
+ long double h, double i, long double j, double k, long double l,
|
|
||||||
+ double m, long double n, ...)
|
|
||||||
+{
|
|
||||||
+ double o;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, n);
|
|
||||||
+ o = va_arg (ap, double);
|
|
||||||
+ if (o != 1234.0)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+ test1 (0, 0, 0, 0, 0, 0, 0, 0.0L, 1234);
|
|
||||||
+ test2 (0, 0, 0, 0, 0, 0, 0, 0.0L, 0, 0.0L, 0, 0.0L, 0, 0.0L, 1234);
|
|
||||||
+ test3 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 1234.0);
|
|
||||||
+ test4 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 0.0, 0.0L,
|
|
||||||
+ 0.0, 0.0L, 0.0, 0.0L, 1234.0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
--- gcc/testsuite/gcc.target/i386/pr44942.c.jj 2010-07-15 13:52:37.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.target/i386/pr44942.c 2010-07-15 13:53:24.000000000 +0200
|
|
||||||
@@ -0,0 +1,44 @@
|
|
||||||
+/* PR target/44942 */
|
|
||||||
+/* { dg-do run { target lp64 } } */
|
|
||||||
+
|
|
||||||
+#include <stdarg.h>
|
|
||||||
+#include <emmintrin.h>
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test1 (double a, double b, double c, double d, double e, double f,
|
|
||||||
+ double g, __m128d h, ...)
|
|
||||||
+{
|
|
||||||
+ double i;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, h);
|
|
||||||
+ i = va_arg (ap, double);
|
|
||||||
+ if (i != 1234.0)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+test2 (double a, double b, double c, double d, double e, double f, double g,
|
|
||||||
+ __m128d h, double i, __m128d j, double k, __m128d l,
|
|
||||||
+ double m, __m128d n, ...)
|
|
||||||
+{
|
|
||||||
+ double o;
|
|
||||||
+ va_list ap;
|
|
||||||
+
|
|
||||||
+ va_start (ap, n);
|
|
||||||
+ o = va_arg (ap, double);
|
|
||||||
+ if (o != 1234.0)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ va_end (ap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+ __m128d m = _mm_set1_pd (7.0);
|
|
||||||
+ test1 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 1234.0);
|
|
||||||
+ test2 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 0.0, m,
|
|
||||||
+ 0.0, m, 0.0, m, 1234.0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
248
gcc45-pr45055.patch
Normal file
248
gcc45-pr45055.patch
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
2010-07-30 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/45055
|
||||||
|
PR rtl-optimization/45137
|
||||||
|
* rtl.h (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn): New
|
||||||
|
prototypes.
|
||||||
|
* emit-rtl.c (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn):
|
||||||
|
New functions.
|
||||||
|
* combine.c (next_nonnote_nondebug_insn): Removed.
|
||||||
|
* ifcvt.c (noce_process_if_block): Use prev_nonnote_nondebug_insn.
|
||||||
|
* haifa-sched.c (queue_to_ready): Use next_nonnote_nondebug_insn.
|
||||||
|
* sched-deps.c (sched_analyze_insn): Likewise.
|
||||||
|
(fixup_sched_groups, deps_start_bb): Use prev_nonnote_nondebug_insn.
|
||||||
|
* rtlanal.c (canonicalize_condition): Likewise.
|
||||||
|
* postreload.c (reload_combine): Likewise.
|
||||||
|
(reload_cse_move2add): Use next_nonnote_nondebug_insn.
|
||||||
|
|
||||||
|
* gcc.dg/pr45055.c: New test.
|
||||||
|
|
||||||
|
--- gcc/rtl.h.jj 2010-06-11 11:06:01.167282688 +0200
|
||||||
|
+++ gcc/rtl.h 2010-07-30 16:33:28.722450824 +0200
|
||||||
|
@@ -1709,6 +1709,8 @@ extern rtx next_nonnote_insn (rtx);
|
||||||
|
extern rtx next_nonnote_insn_bb (rtx);
|
||||||
|
extern rtx prev_nondebug_insn (rtx);
|
||||||
|
extern rtx next_nondebug_insn (rtx);
|
||||||
|
+extern rtx prev_nonnote_nondebug_insn (rtx);
|
||||||
|
+extern rtx next_nonnote_nondebug_insn (rtx);
|
||||||
|
extern rtx prev_real_insn (rtx);
|
||||||
|
extern rtx next_real_insn (rtx);
|
||||||
|
extern rtx prev_active_insn (rtx);
|
||||||
|
--- gcc/emit-rtl.c.jj 2010-06-11 11:06:01.104409599 +0200
|
||||||
|
+++ gcc/emit-rtl.c 2010-07-30 16:33:28.733479816 +0200
|
||||||
|
@@ -3162,6 +3162,38 @@ prev_nondebug_insn (rtx insn)
|
||||||
|
return insn;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Return the next insn after INSN that is not a NOTE nor DEBUG_INSN.
|
||||||
|
+ This routine does not look inside SEQUENCEs. */
|
||||||
|
+
|
||||||
|
+rtx
|
||||||
|
+next_nonnote_nondebug_insn (rtx insn)
|
||||||
|
+{
|
||||||
|
+ while (insn)
|
||||||
|
+ {
|
||||||
|
+ insn = NEXT_INSN (insn);
|
||||||
|
+ if (insn == 0 || (!NOTE_P (insn) && !DEBUG_INSN_P (insn)))
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return insn;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Return the previous insn before INSN that is not a NOTE nor DEBUG_INSN.
|
||||||
|
+ This routine does not look inside SEQUENCEs. */
|
||||||
|
+
|
||||||
|
+rtx
|
||||||
|
+prev_nonnote_nondebug_insn (rtx insn)
|
||||||
|
+{
|
||||||
|
+ while (insn)
|
||||||
|
+ {
|
||||||
|
+ insn = PREV_INSN (insn);
|
||||||
|
+ if (insn == 0 || (!NOTE_P (insn) && !DEBUG_INSN_P (insn)))
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return insn;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Return the next INSN, CALL_INSN or JUMP_INSN after INSN;
|
||||||
|
or 0, if there is none. This routine does not look inside
|
||||||
|
SEQUENCEs. */
|
||||||
|
--- gcc/combine.c.jj 2010-06-11 11:06:01.175282562 +0200
|
||||||
|
+++ gcc/combine.c 2010-07-30 16:33:28.754479788 +0200
|
||||||
|
@@ -12680,29 +12680,6 @@ reg_bitfield_target_p (rtx x, rtx body)
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
-/* Return the next insn after INSN that is neither a NOTE nor a
|
||||||
|
- DEBUG_INSN. This routine does not look inside SEQUENCEs. */
|
||||||
|
-
|
||||||
|
-static rtx
|
||||||
|
-next_nonnote_nondebug_insn (rtx insn)
|
||||||
|
-{
|
||||||
|
- while (insn)
|
||||||
|
- {
|
||||||
|
- insn = NEXT_INSN (insn);
|
||||||
|
- if (insn == 0)
|
||||||
|
- break;
|
||||||
|
- if (NOTE_P (insn))
|
||||||
|
- continue;
|
||||||
|
- if (DEBUG_INSN_P (insn))
|
||||||
|
- continue;
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return insn;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
/* Given a chain of REG_NOTES originally from FROM_INSN, try to place them
|
||||||
|
as appropriate. I3 and I2 are the insns resulting from the combination
|
||||||
|
--- gcc/ifcvt.c.jj 2010-06-11 11:06:00.939658763 +0200
|
||||||
|
+++ gcc/ifcvt.c 2010-07-30 16:33:28.768458909 +0200
|
||||||
|
@@ -2285,9 +2285,7 @@ noce_process_if_block (struct noce_if_in
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- insn_b = prev_nonnote_insn (if_info->cond_earliest);
|
||||||
|
- while (insn_b && DEBUG_INSN_P (insn_b))
|
||||||
|
- insn_b = prev_nonnote_insn (insn_b);
|
||||||
|
+ insn_b = prev_nonnote_nondebug_insn (if_info->cond_earliest);
|
||||||
|
/* We're going to be moving the evaluation of B down from above
|
||||||
|
COND_EARLIEST to JUMP. Make sure the relevant data is still
|
||||||
|
intact. */
|
||||||
|
--- gcc/haifa-sched.c.jj 2010-06-30 16:53:00.807292319 +0200
|
||||||
|
+++ gcc/haifa-sched.c 2010-07-30 16:33:28.785485355 +0200
|
||||||
|
@@ -1997,13 +1997,9 @@ queue_to_ready (struct ready_list *ready
|
||||||
|
q_ptr = NEXT_Q (q_ptr);
|
||||||
|
|
||||||
|
if (dbg_cnt (sched_insn) == false)
|
||||||
|
- {
|
||||||
|
- /* If debug counter is activated do not requeue insn next after
|
||||||
|
- last_scheduled_insn. */
|
||||||
|
- skip_insn = next_nonnote_insn (last_scheduled_insn);
|
||||||
|
- while (skip_insn && DEBUG_INSN_P (skip_insn))
|
||||||
|
- skip_insn = next_nonnote_insn (skip_insn);
|
||||||
|
- }
|
||||||
|
+ /* If debug counter is activated do not requeue insn next after
|
||||||
|
+ last_scheduled_insn. */
|
||||||
|
+ skip_insn = next_nonnote_nondebug_insn (last_scheduled_insn);
|
||||||
|
else
|
||||||
|
skip_insn = NULL_RTX;
|
||||||
|
|
||||||
|
--- gcc/sched-deps.c.jj 2010-06-11 11:06:01.160283802 +0200
|
||||||
|
+++ gcc/sched-deps.c 2010-07-30 16:33:28.799486427 +0200
|
||||||
|
@@ -1517,9 +1517,7 @@ fixup_sched_groups (rtx insn)
|
||||||
|
|
||||||
|
delete_all_dependences (insn);
|
||||||
|
|
||||||
|
- prev_nonnote = prev_nonnote_insn (insn);
|
||||||
|
- while (DEBUG_INSN_P (prev_nonnote))
|
||||||
|
- prev_nonnote = prev_nonnote_insn (prev_nonnote);
|
||||||
|
+ prev_nonnote = prev_nonnote_nondebug_insn (insn);
|
||||||
|
if (BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (prev_nonnote)
|
||||||
|
&& ! sched_insns_conditions_mutex_p (insn, prev_nonnote))
|
||||||
|
add_dependence (insn, prev_nonnote, REG_DEP_ANTI);
|
||||||
|
@@ -2695,9 +2693,7 @@ sched_analyze_insn (struct deps_desc *de
|
||||||
|
if (JUMP_P (insn))
|
||||||
|
{
|
||||||
|
rtx next;
|
||||||
|
- next = next_nonnote_insn (insn);
|
||||||
|
- while (next && DEBUG_INSN_P (next))
|
||||||
|
- next = next_nonnote_insn (next);
|
||||||
|
+ next = next_nonnote_nondebug_insn (insn);
|
||||||
|
if (next && BARRIER_P (next))
|
||||||
|
reg_pending_barrier = MOVE_BARRIER;
|
||||||
|
else
|
||||||
|
@@ -3366,10 +3362,8 @@ deps_start_bb (struct deps_desc *deps, r
|
||||||
|
hard registers correct. */
|
||||||
|
if (! reload_completed && !LABEL_P (head))
|
||||||
|
{
|
||||||
|
- rtx insn = prev_nonnote_insn (head);
|
||||||
|
+ rtx insn = prev_nonnote_nondebug_insn (head);
|
||||||
|
|
||||||
|
- while (insn && DEBUG_INSN_P (insn))
|
||||||
|
- insn = prev_nonnote_insn (insn);
|
||||||
|
if (insn && CALL_P (insn))
|
||||||
|
deps->in_post_call_group_p = post_call_initial;
|
||||||
|
}
|
||||||
|
--- gcc/postreload.c.jj 2010-06-11 11:06:00.856659196 +0200
|
||||||
|
+++ gcc/postreload.c 2010-07-30 16:34:14.703335670 +0200
|
||||||
|
@@ -810,7 +810,7 @@ reload_combine (void)
|
||||||
|
rtx reg = SET_DEST (set);
|
||||||
|
rtx plus = SET_SRC (set);
|
||||||
|
rtx base = XEXP (plus, 1);
|
||||||
|
- rtx prev = prev_nonnote_insn (insn);
|
||||||
|
+ rtx prev = prev_nonnote_nondebug_insn (insn);
|
||||||
|
rtx prev_set = prev ? single_set (prev) : NULL_RTX;
|
||||||
|
unsigned int regno = REGNO (reg);
|
||||||
|
rtx index_reg = NULL_RTX;
|
||||||
|
@@ -1323,7 +1323,7 @@ reload_cse_move2add (rtx first)
|
||||||
|
&& MODES_OK_FOR_MOVE2ADD (GET_MODE (reg),
|
||||||
|
reg_mode[REGNO (src)]))
|
||||||
|
{
|
||||||
|
- rtx next = next_nonnote_insn (insn);
|
||||||
|
+ rtx next = next_nonnote_nondebug_insn (insn);
|
||||||
|
rtx set = NULL_RTX;
|
||||||
|
if (next)
|
||||||
|
set = single_set (next);
|
||||||
|
--- gcc/rtlanal.c.jj 2010-06-11 11:06:00.867421367 +0200
|
||||||
|
+++ gcc/rtlanal.c 2010-07-30 16:33:28.820478800 +0200
|
||||||
|
@@ -4755,9 +4755,7 @@ canonicalize_condition (rtx insn, rtx co
|
||||||
|
stop if it isn't a single set or if it has a REG_INC note because
|
||||||
|
we don't want to bother dealing with it. */
|
||||||
|
|
||||||
|
- do
|
||||||
|
- prev = prev_nonnote_insn (prev);
|
||||||
|
- while (prev && DEBUG_INSN_P (prev));
|
||||||
|
+ prev = prev_nonnote_nondebug_insn (prev);
|
||||||
|
|
||||||
|
if (prev == 0
|
||||||
|
|| !NONJUMP_INSN_P (prev)
|
||||||
|
--- gcc/testsuite/gcc.dg/pr45055.c.jj 2010-07-30 16:33:28.821480043 +0200
|
||||||
|
+++ gcc/testsuite/gcc.dg/pr45055.c 2010-07-30 16:33:28.822479707 +0200
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+/* PR debug/45055 */
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O2 -ftracer -fsched-pressure -funroll-loops -fschedule-insns -fcompare-debug" } */
|
||||||
|
+
|
||||||
|
+int colormap[10];
|
||||||
|
+
|
||||||
|
+extern int bar ();
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (int *img, int fp, int y, int *ptr, int depth, int c, int t, int xm)
|
||||||
|
+{
|
||||||
|
+ int x, color, count;
|
||||||
|
+ for (; y; y--)
|
||||||
|
+ {
|
||||||
|
+ if (depth)
|
||||||
|
+ {
|
||||||
|
+ count = bar ();
|
||||||
|
+ for (x = xm; x; x--)
|
||||||
|
+ {
|
||||||
|
+ if (c != 1)
|
||||||
|
+ count = color = -1;
|
||||||
|
+ if (count == 0)
|
||||||
|
+ color = count = bar ();
|
||||||
|
+ if (color)
|
||||||
|
+ t = bar (fp);
|
||||||
|
+ *ptr++ = colormap[t];
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ switch (*img)
|
||||||
|
+ {
|
||||||
|
+ case 1:
|
||||||
|
+ bar ();
|
||||||
|
+ case 3:
|
||||||
|
+ case -1:
|
||||||
|
+ case -3:
|
||||||
|
+ bar ();
|
||||||
|
+ case -4:
|
||||||
|
+ bar ();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
Loading…
Reference in New Issue
Block a user