4.8.0-0.14
This commit is contained in:
parent
225104138d
commit
7c03367081
1
.gitignore
vendored
1
.gitignore
vendored
@ -62,3 +62,4 @@
|
|||||||
/gcc-4.8.0-20130211.tar.bz2
|
/gcc-4.8.0-20130211.tar.bz2
|
||||||
/gcc-4.8.0-20130213.tar.bz2
|
/gcc-4.8.0-20130213.tar.bz2
|
||||||
/gcc-4.8.0-20130215.tar.bz2
|
/gcc-4.8.0-20130215.tar.bz2
|
||||||
|
/gcc-4.8.0-20130220.tar.bz2
|
||||||
|
38
gcc.spec
38
gcc.spec
@ -1,9 +1,9 @@
|
|||||||
%global DATE 20130215
|
%global DATE 20130220
|
||||||
%global SVNREV 196084
|
%global SVNREV 196173
|
||||||
%global gcc_version 4.8.0
|
%global gcc_version 4.8.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 0.13
|
%global gcc_release 0.14
|
||||||
%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
|
||||||
@ -102,7 +102,7 @@ BuildRequires: binutils >= 2.20.51.0.2-12
|
|||||||
# -static is used several times.
|
# -static is used several times.
|
||||||
BuildRequires: glibc-static
|
BuildRequires: glibc-static
|
||||||
BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils
|
BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils
|
||||||
BuildRequires: texinfo, texinfo-tex
|
BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man
|
||||||
BuildRequires: systemtap-sdt-devel >= 1.3
|
BuildRequires: systemtap-sdt-devel >= 1.3
|
||||||
%if %{build_go}
|
%if %{build_go}
|
||||||
BuildRequires: hostname
|
BuildRequires: hostname
|
||||||
@ -194,9 +194,11 @@ Patch10: gcc48-pr38757.patch
|
|||||||
Patch11: gcc48-libstdc++-docs.patch
|
Patch11: gcc48-libstdc++-docs.patch
|
||||||
Patch12: gcc48-no-add-needed.patch
|
Patch12: gcc48-no-add-needed.patch
|
||||||
Patch13: gcc48-pr55608.patch
|
Patch13: gcc48-pr55608.patch
|
||||||
Patch14: gcc48-asan-fix.patch
|
Patch14: gcc48-asan-speedup.patch
|
||||||
Patch15: gcc48-pr54117.patch
|
Patch15: gcc48-pr56258.patch
|
||||||
Patch16: gcc48-asan-speedup.patch
|
Patch16: gcc48-pr56405.patch
|
||||||
|
Patch17: gcc48-unused-locals.patch
|
||||||
|
Patch18: gcc48-pr56265.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
|
||||||
@ -749,9 +751,11 @@ package or when debugging this package.
|
|||||||
%endif
|
%endif
|
||||||
%patch12 -p0 -b .no-add-needed~
|
%patch12 -p0 -b .no-add-needed~
|
||||||
%patch13 -p0 -b .pr55608~
|
%patch13 -p0 -b .pr55608~
|
||||||
%patch14 -p0 -b .asan-fix~
|
%patch14 -p0 -b .asan-speedup~
|
||||||
%patch15 -p0 -b .pr54117~
|
%patch15 -p0 -b .pr56258~
|
||||||
%patch16 -p0 -b .asan-speedup~
|
%patch16 -p0 -b .pr56405~
|
||||||
|
%patch17 -p0 -b .unused-locals~
|
||||||
|
%patch18 -p0 -b .pr56265~
|
||||||
|
|
||||||
%if 0%{?_enable_debug_packages}
|
%if 0%{?_enable_debug_packages}
|
||||||
cat > split-debuginfo.sh <<\EOF
|
cat > split-debuginfo.sh <<\EOF
|
||||||
@ -2975,6 +2979,20 @@ fi
|
|||||||
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 20 2013 Jakub Jelinek <jakub@redhat.com> 4.8.0-0.14
|
||||||
|
- updated from trunk
|
||||||
|
- PRs asan/56330, c++/51242, c++/54276, c++/56373, libquadmath/56379,
|
||||||
|
middle-end/55889, middle-end/56349, pch/54117,
|
||||||
|
rtl-optimization/56348, target/52555, target/54685, target/56214,
|
||||||
|
target/56347, tree-optimization/55334, tree-optimization/56321,
|
||||||
|
tree-optimization/56350, tree-optimization/56366,
|
||||||
|
tree-optimization/56381, tree-optimization/56384,
|
||||||
|
tree-optimization/56396, tree-optimization/56398
|
||||||
|
- add BuildRequires: /usr/bin/pod2man to fix man pages generation
|
||||||
|
- don't ICE on bogus inline asm in kernel (#912857, PR inline-asm/56405)
|
||||||
|
- fix up info page building with texinfo 5.0 (PR bootstrap/56258)
|
||||||
|
- devirtualization ICE fix (PR tree-optimization/56265)
|
||||||
|
|
||||||
* Fri Feb 15 2013 Jakub Jelinek <jakub@redhat.com> 4.8.0-0.13
|
* Fri Feb 15 2013 Jakub Jelinek <jakub@redhat.com> 4.8.0-0.13
|
||||||
- updated from trunk
|
- updated from trunk
|
||||||
- PRs bootstrap/56327, c++/52026, c++/54922, c++/55003, c++/55220,
|
- PRs bootstrap/56327, c++/52026, c++/54922, c++/55003, c++/55220,
|
||||||
|
@ -1,196 +0,0 @@
|
|||||||
2013-02-15 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR sanitizer/56330
|
|
||||||
* asan.c (get_mem_refs_of_builtin_call): Fix up indentation.
|
|
||||||
(instrument_mem_region_access): Create conditional even when
|
|
||||||
the start has been already instrumented. Don't record
|
|
||||||
conditional instrumentation in the hash table. Update *iter
|
|
||||||
after second build_check_stmt call.
|
|
||||||
(instrument_builtin_call): For consistency test != NULL_TREE
|
|
||||||
in all start checks.
|
|
||||||
|
|
||||||
* c-c++-common/asan/no-redundant-instrumentation-1.c: Pass
|
|
||||||
3 instead of sizeof (tab) - 1 as last argument.
|
|
||||||
* c-c++-common/asan/pr56330.c: New test.
|
|
||||||
|
|
||||||
--- gcc/asan.c.jj 2013-02-14 14:45:01.428038792 +0100
|
|
||||||
+++ gcc/asan.c 2013-02-15 09:37:18.614963383 +0100
|
|
||||||
@@ -747,20 +747,17 @@ get_mem_refs_of_builtin_call (const gimp
|
|
||||||
|
|
||||||
got_reference_p = true;
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- if (dest)
|
|
||||||
- {
|
|
||||||
- dst->start = dest;
|
|
||||||
- dst->access_size = access_size;
|
|
||||||
- *dst_len = NULL_TREE;
|
|
||||||
- *dst_is_store = is_store;
|
|
||||||
- *dest_is_deref = true;
|
|
||||||
- got_reference_p = true;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ else if (dest)
|
|
||||||
+ {
|
|
||||||
+ dst->start = dest;
|
|
||||||
+ dst->access_size = access_size;
|
|
||||||
+ *dst_len = NULL_TREE;
|
|
||||||
+ *dst_is_store = is_store;
|
|
||||||
+ *dest_is_deref = true;
|
|
||||||
+ got_reference_p = true;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- return got_reference_p;
|
|
||||||
+ return got_reference_p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true iff a given gimple statement has been instrumented.
|
|
||||||
@@ -1535,8 +1532,15 @@ instrument_mem_region_access (tree base,
|
|
||||||
|
|
||||||
/* If the beginning of the memory region has already been
|
|
||||||
instrumented, do not instrument it. */
|
|
||||||
- if (has_mem_ref_been_instrumented (base, 1))
|
|
||||||
- goto after_first_instrumentation;
|
|
||||||
+ bool start_instrumented = has_mem_ref_been_instrumented (base, 1);
|
|
||||||
+
|
|
||||||
+ /* If the end of the memory region has already been instrumented, do
|
|
||||||
+ not instrument it. */
|
|
||||||
+ tree end = asan_mem_ref_get_end (base, len);
|
|
||||||
+ bool end_instrumented = has_mem_ref_been_instrumented (end, 1);
|
|
||||||
+
|
|
||||||
+ if (start_instrumented && end_instrumented)
|
|
||||||
+ return;
|
|
||||||
|
|
||||||
if (!is_gimple_constant (len))
|
|
||||||
{
|
|
||||||
@@ -1565,34 +1569,36 @@ instrument_mem_region_access (tree base,
|
|
||||||
gsi = gsi_start_bb (then_bb);
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Instrument the beginning of the memory region to be accessed,
|
|
||||||
- and arrange for the rest of the intrumentation code to be
|
|
||||||
- inserted in the then block *after* the current gsi. */
|
|
||||||
- build_check_stmt (location, base, &gsi, /*before_p=*/true, is_store, 1);
|
|
||||||
-
|
|
||||||
- if (then_bb)
|
|
||||||
- /* We are in the case where the length of the region is not
|
|
||||||
- constant; so instrumentation code is being generated in the
|
|
||||||
- 'then block' of the 'if (len != 0) condition. Let's arrange
|
|
||||||
- for the subsequent instrumentation statements to go in the
|
|
||||||
- 'then block'. */
|
|
||||||
- gsi = gsi_last_bb (then_bb);
|
|
||||||
- else
|
|
||||||
- *iter = gsi;
|
|
||||||
-
|
|
||||||
- update_mem_ref_hash_table (base, 1);
|
|
||||||
+ if (!start_instrumented)
|
|
||||||
+ {
|
|
||||||
+ /* Instrument the beginning of the memory region to be accessed,
|
|
||||||
+ and arrange for the rest of the intrumentation code to be
|
|
||||||
+ inserted in the then block *after* the current gsi. */
|
|
||||||
+ build_check_stmt (location, base, &gsi, /*before_p=*/true, is_store, 1);
|
|
||||||
+
|
|
||||||
+ if (then_bb)
|
|
||||||
+ /* We are in the case where the length of the region is not
|
|
||||||
+ constant; so instrumentation code is being generated in the
|
|
||||||
+ 'then block' of the 'if (len != 0) condition. Let's arrange
|
|
||||||
+ for the subsequent instrumentation statements to go in the
|
|
||||||
+ 'then block'. */
|
|
||||||
+ gsi = gsi_last_bb (then_bb);
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ *iter = gsi;
|
|
||||||
+ /* Don't remember this access as instrumented, if length
|
|
||||||
+ is unknown. It might be zero and not being actually
|
|
||||||
+ instrumented, so we can't rely on it being instrumented. */
|
|
||||||
+ update_mem_ref_hash_table (base, 1);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- after_first_instrumentation:
|
|
||||||
+ if (end_instrumented)
|
|
||||||
+ return;
|
|
||||||
|
|
||||||
/* We want to instrument the access at the end of the memory region,
|
|
||||||
which is at (base + len - 1). */
|
|
||||||
|
|
||||||
- /* If the end of the memory region has already been instrumented, do
|
|
||||||
- not instrument it. */
|
|
||||||
- tree end = asan_mem_ref_get_end (base, len);
|
|
||||||
- if (has_mem_ref_been_instrumented (end, 1))
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
/* offset = len - 1; */
|
|
||||||
len = unshare_expr (len);
|
|
||||||
tree offset;
|
|
||||||
@@ -1640,7 +1646,10 @@ instrument_mem_region_access (tree base,
|
|
||||||
gimple_set_location (region_end, location);
|
|
||||||
gimple_seq_add_stmt_without_update (&seq, region_end);
|
|
||||||
gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
|
|
||||||
- gsi_prev (&gsi);
|
|
||||||
+ if (!start_instrumented || then_bb == NULL)
|
|
||||||
+ gsi_prev (&gsi);
|
|
||||||
+ else
|
|
||||||
+ gsi = gsi_last_bb (then_bb);
|
|
||||||
|
|
||||||
/* _2 = _1 + offset; */
|
|
||||||
region_end =
|
|
||||||
@@ -1655,7 +1664,10 @@ instrument_mem_region_access (tree base,
|
|
||||||
build_check_stmt (location, gimple_assign_lhs (region_end),
|
|
||||||
&gsi, /*before_p=*/false, is_store, 1);
|
|
||||||
|
|
||||||
- update_mem_ref_hash_table (end, 1);
|
|
||||||
+ if (then_bb == NULL)
|
|
||||||
+ update_mem_ref_hash_table (end, 1);
|
|
||||||
+
|
|
||||||
+ *iter = gsi_for_stmt (gsi_stmt (*iter));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Instrument the call (to the builtin strlen function) pointed to by
|
|
||||||
@@ -1783,7 +1795,7 @@ instrument_builtin_call (gimple_stmt_ite
|
|
||||||
}
|
|
||||||
else if (src0_len || src1_len || dest_len)
|
|
||||||
{
|
|
||||||
- if (src0.start)
|
|
||||||
+ if (src0.start != NULL_TREE)
|
|
||||||
instrument_mem_region_access (src0.start, src0_len,
|
|
||||||
iter, loc, /*is_store=*/false);
|
|
||||||
if (src1.start != NULL_TREE)
|
|
||||||
--- gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-1.c.jj 2013-02-13 11:53:41.000000000 +0100
|
|
||||||
+++ gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-1.c 2013-02-15 09:51:47.485080706 +0100
|
|
||||||
@@ -45,7 +45,7 @@ test1 ()
|
|
||||||
/* There are 2 calls to __builtin___asan_report_store1 and 2 calls
|
|
||||||
to __builtin___asan_report_load1 to instrument the store to
|
|
||||||
(subset of) the memory region of tab. */
|
|
||||||
- __builtin_memcpy (&tab[1], foo, sizeof (tab) - 1);
|
|
||||||
+ __builtin_memcpy (&tab[1], foo, 3);
|
|
||||||
|
|
||||||
/* This should not generate a __builtin___asan_report_load1 because
|
|
||||||
the reference to tab[1] has been already instrumented above. */
|
|
||||||
--- gcc/testsuite/c-c++-common/asan/pr56330.c.jj 2013-02-15 09:43:19.293845146 +0100
|
|
||||||
+++ gcc/testsuite/c-c++-common/asan/pr56330.c 2013-02-15 09:42:58.000000000 +0100
|
|
||||||
@@ -0,0 +1,23 @@
|
|
||||||
+/* PR sanitizer/56330 */
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+
|
|
||||||
+char e[200];
|
|
||||||
+
|
|
||||||
+struct S
|
|
||||||
+{
|
|
||||||
+ char a[100];
|
|
||||||
+ char b[100];
|
|
||||||
+} s;
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+foo (void)
|
|
||||||
+{
|
|
||||||
+ __builtin_memcmp (s.a, e, 100);
|
|
||||||
+ __builtin_memcmp (s.a, e, 200);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+bar (int *a, char *b, char *c)
|
|
||||||
+{
|
|
||||||
+ __builtin_memmove (c, b, a[b[0]]);
|
|
||||||
+}
|
|
@ -1,198 +0,0 @@
|
|||||||
2013-02-15 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
Steven Bosscher <steven@gcc.gnu.org>
|
|
||||||
|
|
||||||
PR pch/54117
|
|
||||||
* c-opts.c (c_common_post_options): If debug info is enabled
|
|
||||||
and non-dwarf*, refuse to load PCH files and when writing PCH
|
|
||||||
file warn.
|
|
||||||
|
|
||||||
* lib/dg-pch.exp (pch-init, pch-finish,
|
|
||||||
check_effective_target_pch_supported_debug): New procs.
|
|
||||||
(dg-flags-pch): If $pch_unsupported, make tests UNSUPPORTED.
|
|
||||||
Likewise if $pch_unsupported_debug and $flags include -g.
|
|
||||||
Skip FAILs about missing *.gch file if $pch_unsupported_debug
|
|
||||||
and dg-require-effective-target pch_unsupported_debug.
|
|
||||||
* g++.dg/pch/pch.exp: Call pch-init and pch-finish.
|
|
||||||
* objc.dg/pch/pch.exp: Likewise.
|
|
||||||
* gcc.dg/pch/pch.exp: Likewise.
|
|
||||||
* gcc.dg/pch/valid-1.c: Add dg-require-effective-target
|
|
||||||
pch_unsupported_debug.
|
|
||||||
* gcc.dg/pch/valid-1.hs: Likewise.
|
|
||||||
* gcc.dg/pch/valid-1b.c: Likewise.
|
|
||||||
* gcc.dg/pch/valid-1b.hs: Likewise.
|
|
||||||
|
|
||||||
--- gcc/c-family/c-opts.c.jj 2013-02-14 14:45:01.000000000 +0100
|
|
||||||
+++ gcc/c-family/c-opts.c 2013-02-15 12:44:48.936535118 +0100
|
|
||||||
@@ -945,6 +945,16 @@ c_common_post_options (const char **pfil
|
|
||||||
because the default address space slot then can't be used
|
|
||||||
for the output PCH file. */
|
|
||||||
if (pch_file)
|
|
||||||
+ {
|
|
||||||
+ c_common_no_more_pch ();
|
|
||||||
+ /* Only -g0 and -gdwarf* are supported with PCH, for other
|
|
||||||
+ debug formats we warn here and refuse to load any PCH files. */
|
|
||||||
+ if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
|
|
||||||
+ warning (OPT_Wdeprecated,
|
|
||||||
+ "the \"%s\" debug format cannot be used with "
|
|
||||||
+ "pre-compiled headers", debug_type_names[write_symbols]);
|
|
||||||
+ }
|
|
||||||
+ else if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
|
|
||||||
c_common_no_more_pch ();
|
|
||||||
|
|
||||||
/* Yuk. WTF is this? I do know ObjC relies on it somewhere. */
|
|
||||||
--- gcc/testsuite/lib/dg-pch.exp.jj 2013-01-11 09:02:39.000000000 +0100
|
|
||||||
+++ gcc/testsuite/lib/dg-pch.exp 2013-02-15 15:45:53.747855529 +0100
|
|
||||||
@@ -16,8 +16,49 @@
|
|
||||||
|
|
||||||
load_lib copy-file.exp
|
|
||||||
|
|
||||||
+proc pch-init { args } {
|
|
||||||
+ global pch_unsupported_debug pch_unsupported
|
|
||||||
+
|
|
||||||
+ if [info exists pch_unsupported_debug] {
|
|
||||||
+ error "pch-init: pch_unsupported_debug is not empty as expected"
|
|
||||||
+ }
|
|
||||||
+ if [info exists pch_unsupported] {
|
|
||||||
+ error "pch-init: pch_unsupported is not empty as expected"
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ set result [check_compile pchtest object "int i;" "-g -x c-header"]
|
|
||||||
+ set pch_unsupported_debug \
|
|
||||||
+ [regexp "debug format cannot be used with pre-compiled headers" \
|
|
||||||
+ [lindex $result 0]]
|
|
||||||
+
|
|
||||||
+ set pch_unsupported 0
|
|
||||||
+ if { $pch_unsupported_debug } {
|
|
||||||
+ verbose -log "pch is unsupported with the debug info format"
|
|
||||||
+
|
|
||||||
+ set result [check_compile pchtest object "int i;" "-x c-header"]
|
|
||||||
+ set pch_unsupported \
|
|
||||||
+ [regexp "debug format cannot be used with pre-compiled headers" \
|
|
||||||
+ [lindex $result 0]]
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+proc pch-finish { args } {
|
|
||||||
+ global pch_unsupported_debug pch_unsupported
|
|
||||||
+ unset pch_unsupported_debug
|
|
||||||
+ unset pch_unsupported
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+proc check_effective_target_pch_supported_debug { } {
|
|
||||||
+ global pch_unsupported_debug
|
|
||||||
+ if { $pch_unsupported_debug } {
|
|
||||||
+ return 0
|
|
||||||
+ }
|
|
||||||
+ return 1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
proc dg-flags-pch { subdir test otherflags options suffix } {
|
|
||||||
global runtests dg-do-what-default
|
|
||||||
+ global pch_unsupported_debug pch_unsupported
|
|
||||||
|
|
||||||
# If we're only testing specific files and this isn't one of them, skip it.
|
|
||||||
if ![runtest_file_p $runtests $test] {
|
|
||||||
@@ -35,6 +76,13 @@ proc dg-flags-pch { subdir test otherfla
|
|
||||||
foreach flags $options {
|
|
||||||
verbose "Testing $nshort, $otherflags $flags" 1
|
|
||||||
|
|
||||||
+ if { $pch_unsupported != 0 \
|
|
||||||
+ || ( $pch_unsupported_debug != 0 && [regexp " -g" " $flags"] ) } {
|
|
||||||
+ verbose -log "$nshort unsupported because debug format conflicts with PCH"
|
|
||||||
+ unsupported "$nshort $flags"
|
|
||||||
+ continue
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
# For the header files, the default is to precompile.
|
|
||||||
set dg-do-what-default precompile
|
|
||||||
catch { file_on_host delete "$bname$suffix" }
|
|
||||||
@@ -78,7 +126,8 @@ proc dg-flags-pch { subdir test otherfla
|
|
||||||
fail "$nshort $flags assembly comparison"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- } else {
|
|
||||||
+ } elseif { $pch_unsupported_debug == 0 \
|
|
||||||
+ || [llength [grep $test "{\[ \t\]\+dg-require-effective-target\[ \t\]\+pch_supported_debug\[ \t\]\+.*\[ \t\]\+}"]] > 0 } {
|
|
||||||
verbose -log "pch file '$bname$suffix.gch' missing"
|
|
||||||
fail "$nshort $flags"
|
|
||||||
if { !$have_errs } {
|
|
||||||
--- gcc/testsuite/g++.dg/pch/pch.exp.jj 2013-01-11 09:02:44.000000000 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/pch/pch.exp 2013-02-15 14:53:03.517106464 +0100
|
|
||||||
@@ -23,6 +23,7 @@ load_lib dg-pch.exp
|
|
||||||
|
|
||||||
# Initialize `dg'.
|
|
||||||
dg-init
|
|
||||||
+pch-init
|
|
||||||
|
|
||||||
set old_dg_do_what_default "${dg-do-what-default}"
|
|
||||||
|
|
||||||
@@ -36,4 +37,5 @@ foreach test [lsort [glob -nocomplain $s
|
|
||||||
set dg-do-what-default "$old_dg_do_what_default"
|
|
||||||
|
|
||||||
# All done.
|
|
||||||
+pch-finish
|
|
||||||
dg-finish
|
|
||||||
--- gcc/testsuite/objc.dg/pch/pch.exp.jj 2013-01-11 09:02:44.000000000 +0100
|
|
||||||
+++ gcc/testsuite/objc.dg/pch/pch.exp 2013-02-15 14:53:30.063951051 +0100
|
|
||||||
@@ -24,8 +24,8 @@ load_lib torture-options.exp
|
|
||||||
|
|
||||||
# Initialize `dg'.
|
|
||||||
dg-init
|
|
||||||
-
|
|
||||||
torture-init
|
|
||||||
+pch-init
|
|
||||||
|
|
||||||
set-torture-options $DG_TORTURE_OPTIONS
|
|
||||||
|
|
||||||
@@ -59,5 +59,6 @@ if [istarget "*-*-darwin*" ] {
|
|
||||||
set dg-do-what-default "$old_dg_do_what_default"
|
|
||||||
|
|
||||||
# All done.
|
|
||||||
+pch-finish
|
|
||||||
torture-finish
|
|
||||||
dg-finish
|
|
||||||
--- gcc/testsuite/gcc.dg/pch/pch.exp.jj 2013-01-11 09:02:42.000000000 +0100
|
|
||||||
+++ gcc/testsuite/gcc.dg/pch/pch.exp 2013-02-15 14:11:27.053896809 +0100
|
|
||||||
@@ -26,6 +26,7 @@ load_lib torture-options.exp
|
|
||||||
dg-init
|
|
||||||
torture-init
|
|
||||||
set-torture-options $DG_TORTURE_OPTIONS
|
|
||||||
+pch-init
|
|
||||||
|
|
||||||
set old_dg_do_what_default "${dg-do-what-default}"
|
|
||||||
|
|
||||||
@@ -59,5 +60,6 @@ file delete $testh
|
|
||||||
set dg-do-what-default "$old_dg_do_what_default"
|
|
||||||
|
|
||||||
# All done.
|
|
||||||
+pch-finish
|
|
||||||
torture-finish
|
|
||||||
dg-finish
|
|
||||||
--- gcc/testsuite/gcc.dg/pch/valid-1.c.jj 2009-06-08 11:53:48.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.dg/pch/valid-1.c 2013-02-15 15:19:44.124833259 +0100
|
|
||||||
@@ -1,3 +1,4 @@
|
|
||||||
+/* { dg-require-effective-target pch_supported_debug } */
|
|
||||||
/* { dg-options "-I. -Winvalid-pch -g" } */
|
|
||||||
|
|
||||||
#include "valid-1.h"/* { dg-warning "created with -gnone, but used with -g" } */
|
|
||||||
--- gcc/testsuite/gcc.dg/pch/valid-1.hs.jj 2008-09-05 12:54:26.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.dg/pch/valid-1.hs 2013-02-15 15:19:50.686794340 +0100
|
|
||||||
@@ -1,3 +1,4 @@
|
|
||||||
+/* { dg-require-effective-target pch_supported_debug } */
|
|
||||||
/* { dg-options "-I. -Winvalid-pch -g0" } */
|
|
||||||
|
|
||||||
extern int x;
|
|
||||||
--- gcc/testsuite/gcc.dg/pch/valid-1b.c.jj 2008-09-05 12:54:26.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.dg/pch/valid-1b.c 2013-02-15 15:19:55.935763631 +0100
|
|
||||||
@@ -1,3 +1,4 @@
|
|
||||||
+/* { dg-require-effective-target pch_supported_debug } */
|
|
||||||
/* { dg-options "-I. -Winvalid-pch -g0" } */
|
|
||||||
|
|
||||||
#include "valid-1b.h"
|
|
||||||
--- gcc/testsuite/gcc.dg/pch/valid-1b.hs.jj 2008-09-05 12:54:26.000000000 +0200
|
|
||||||
+++ gcc/testsuite/gcc.dg/pch/valid-1b.hs 2013-02-15 15:20:02.214727794 +0100
|
|
||||||
@@ -1,3 +1,4 @@
|
|
||||||
+/* { dg-require-effective-target pch_supported_debug } */
|
|
||||||
/* { dg-options "-I. -Winvalid-pch -g" } */
|
|
||||||
|
|
||||||
extern int x;
|
|
30
gcc48-pr56258.patch
Normal file
30
gcc48-pr56258.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
2013-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR bootstrap/56258
|
||||||
|
* doc/invoke.texi (-fdump-rtl-pro_and_epilogue): Use @item
|
||||||
|
instead of @itemx.
|
||||||
|
|
||||||
|
* gnat-style.texi (@title): Remove @hfill.
|
||||||
|
|
||||||
|
--- gcc/ada/gnat-style.texi.jj 2012-08-10 12:57:33.000000000 +0200
|
||||||
|
+++ gcc/ada/gnat-style.texi 2013-02-20 13:06:03.042667300 +0100
|
||||||
|
@@ -42,7 +42,7 @@ Texts. A copy of the license is include
|
||||||
|
@titlepage
|
||||||
|
@titlefont{GNAT Coding Style:}
|
||||||
|
@sp 1
|
||||||
|
-@title @hfill A Guide for GNAT Developers
|
||||||
|
+@title A Guide for GNAT Developers
|
||||||
|
@subtitle GNAT, The GNU Ada Compiler
|
||||||
|
@versionsubtitle
|
||||||
|
@author Ada Core Technologies, Inc.
|
||||||
|
--- gcc/doc/invoke.texi.jj 2013-01-31 22:57:22.000000000 +0100
|
||||||
|
+++ gcc/doc/invoke.texi 2013-02-20 13:06:47.516405739 +0100
|
||||||
|
@@ -5612,7 +5612,7 @@ Dump after the peephole pass.
|
||||||
|
@opindex fdump-rtl-postreload
|
||||||
|
Dump after post-reload optimizations.
|
||||||
|
|
||||||
|
-@itemx -fdump-rtl-pro_and_epilogue
|
||||||
|
+@item -fdump-rtl-pro_and_epilogue
|
||||||
|
@opindex fdump-rtl-pro_and_epilogue
|
||||||
|
Dump after generating the function prologues and epilogues.
|
||||||
|
|
132
gcc48-pr56265.patch
Normal file
132
gcc48-pr56265.patch
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
2013-02-20 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
PR tree-optimization/56265
|
||||||
|
* ipa-prop.c (ipa_make_edge_direct_to_target): Fixup callgraph when target is
|
||||||
|
referenced for firs ttime.
|
||||||
|
|
||||||
|
* testsuite/g++.dg/ipa/devirt-11.C: New testcase.
|
||||||
|
|
||||||
|
--- gcc/ipa-prop.c (revision 196176)
|
||||||
|
+++ gcc/ipa-prop.c (revision 196177)
|
||||||
|
@@ -2100,10 +2100,65 @@ ipa_make_edge_direct_to_target (struct c
|
||||||
|
if (TREE_CODE (target) == ADDR_EXPR)
|
||||||
|
target = TREE_OPERAND (target, 0);
|
||||||
|
if (TREE_CODE (target) != FUNCTION_DECL)
|
||||||
|
- return NULL;
|
||||||
|
+ {
|
||||||
|
+ target = canonicalize_constructor_val (target, NULL);
|
||||||
|
+ if (!target || TREE_CODE (target) != FUNCTION_DECL)
|
||||||
|
+ {
|
||||||
|
+ if (dump_file)
|
||||||
|
+ fprintf (dump_file, "ipa-prop: Discovered direct call to non-function"
|
||||||
|
+ " in (%s/%i).\n",
|
||||||
|
+ cgraph_node_name (ie->caller), ie->caller->uid);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
callee = cgraph_get_node (target);
|
||||||
|
- if (!callee)
|
||||||
|
- return NULL;
|
||||||
|
+
|
||||||
|
+ /* Because may-edges are not explicitely represented and vtable may be external,
|
||||||
|
+ we may create the first reference to the object in the unit. */
|
||||||
|
+ if (!callee || callee->global.inlined_to)
|
||||||
|
+ {
|
||||||
|
+ struct cgraph_node *first_clone = callee;
|
||||||
|
+
|
||||||
|
+ /* We are better to ensure we can refer to it.
|
||||||
|
+ In the case of static functions we are out of luck, since we already
|
||||||
|
+ removed its body. In the case of public functions we may or may
|
||||||
|
+ not introduce the reference. */
|
||||||
|
+ if (!canonicalize_constructor_val (target, NULL)
|
||||||
|
+ || !TREE_PUBLIC (target))
|
||||||
|
+ {
|
||||||
|
+ if (dump_file)
|
||||||
|
+ fprintf (dump_file, "ipa-prop: Discovered call to a known target "
|
||||||
|
+ "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n",
|
||||||
|
+ xstrdup (cgraph_node_name (ie->caller)), ie->caller->uid,
|
||||||
|
+ xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Create symbol table node. Even if inline clone exists, we can not take
|
||||||
|
+ it as a target of non-inlined call. */
|
||||||
|
+ callee = cgraph_create_node (target);
|
||||||
|
+
|
||||||
|
+ /* OK, we previously inlined the function, then removed the offline copy and
|
||||||
|
+ now we want it back for external call. This can happen when devirtualizing
|
||||||
|
+ while inlining function called once that happens after extern inlined and
|
||||||
|
+ virtuals are already removed. In this case introduce the external node
|
||||||
|
+ and make it available for call. */
|
||||||
|
+ if (first_clone)
|
||||||
|
+ {
|
||||||
|
+ first_clone->clone_of = callee;
|
||||||
|
+ callee->clones = first_clone;
|
||||||
|
+ symtab_prevail_in_asm_name_hash ((symtab_node)callee);
|
||||||
|
+ symtab_insert_node_to_hashtable ((symtab_node)callee);
|
||||||
|
+ if (dump_file)
|
||||||
|
+ fprintf (dump_file, "ipa-prop: Introduced new external node "
|
||||||
|
+ "(%s/%i) and turned into root of the clone tree.\n",
|
||||||
|
+ xstrdup (cgraph_node_name (callee)), callee->uid);
|
||||||
|
+ }
|
||||||
|
+ else if (dump_file)
|
||||||
|
+ fprintf (dump_file, "ipa-prop: Introduced new external node "
|
||||||
|
+ "(%s/%i).\n",
|
||||||
|
+ xstrdup (cgraph_node_name (callee)), callee->uid);
|
||||||
|
+ }
|
||||||
|
ipa_check_create_node_params ();
|
||||||
|
|
||||||
|
/* We can not make edges to inline clones. It is bug that someone removed
|
||||||
|
--- gcc/testsuite/g++.dg/ipa/devirt-11.C (revision 0)
|
||||||
|
+++ gcc/testsuite/g++.dg/ipa/devirt-11.C (revision 196177)
|
||||||
|
@@ -0,0 +1,50 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O2 -fdump-ipa-inline" } */
|
||||||
|
+int baz ();
|
||||||
|
+struct A
|
||||||
|
+{
|
||||||
|
+ virtual int fn2 () = 0;
|
||||||
|
+ virtual int *fn3 ();
|
||||||
|
+ double *fn4 ();
|
||||||
|
+ int fn5 (int);
|
||||||
|
+ template <class T>
|
||||||
|
+ void fn1 (A &, T) { fn3 (); fn4 (); fn2 (); }
|
||||||
|
+};
|
||||||
|
+struct B : A
|
||||||
|
+{
|
||||||
|
+ int fn2 () { return 6; }
|
||||||
|
+ void fn3 (int, double);
|
||||||
|
+ B (bool = true);
|
||||||
|
+ B (int, int);
|
||||||
|
+};
|
||||||
|
+template <typename T>
|
||||||
|
+void
|
||||||
|
+foo (B &x, A &y, A &z)
|
||||||
|
+{
|
||||||
|
+ y.fn2 ();
|
||||||
|
+ z.fn2 ();
|
||||||
|
+ int i = baz ();
|
||||||
|
+ int j = (y.fn3 ())[i];
|
||||||
|
+ x.fn3 (j, (y.fn4 ())[i] + (z.fn4 ())[z.fn5 (j)]);
|
||||||
|
+}
|
||||||
|
+inline B
|
||||||
|
+operator+ (A &y, A &z)
|
||||||
|
+{
|
||||||
|
+ B x;
|
||||||
|
+ foo<int> (x, y, z);
|
||||||
|
+ return x;
|
||||||
|
+}
|
||||||
|
+void
|
||||||
|
+bar ()
|
||||||
|
+{
|
||||||
|
+ B a, b, c (4, 0), d;
|
||||||
|
+ a.fn1 (b, .6);
|
||||||
|
+ baz ();
|
||||||
|
+ c + d;
|
||||||
|
+}
|
||||||
|
+/* While inlining function called once we should devirtualize a new call to fn2
|
||||||
|
+ and two to fn3. While doing so the new symbol for fn2 needs to be
|
||||||
|
+ introduced. */
|
||||||
|
+/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline" } } */
|
||||||
|
+/* { dg-final { scan-ipa-dump-times "and turned into root of the clone tree" 1 "inline" } } */
|
||||||
|
+/* { dg-final { cleanup-ipa-dump "inline" } } */
|
36
gcc48-pr56405.patch
Normal file
36
gcc48-pr56405.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
2013-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR inline-asm/56405
|
||||||
|
* expr.c (expand_expr_real_1) <case TARGET_MEM_REF, MEM_REF>: Don't
|
||||||
|
use movmisalign or extract_bit_field for EXPAND_MEMORY modifier.
|
||||||
|
|
||||||
|
* gcc.c-torture/compile/pr56405.c: New test.
|
||||||
|
|
||||||
|
--- gcc/expr.c.jj 2013-01-18 18:09:40.000000000 +0100
|
||||||
|
+++ gcc/expr.c 2013-02-20 10:29:34.513143634 +0100
|
||||||
|
@@ -9551,6 +9551,7 @@ expand_expr_real_1 (tree exp, rtx target
|
||||||
|
set_mem_addr_space (temp, as);
|
||||||
|
align = get_object_alignment (exp);
|
||||||
|
if (modifier != EXPAND_WRITE
|
||||||
|
+ && modifier != EXPAND_MEMORY
|
||||||
|
&& mode != BLKmode
|
||||||
|
&& align < GET_MODE_ALIGNMENT (mode)
|
||||||
|
/* If the target does not have special handling for unaligned
|
||||||
|
@@ -9639,6 +9640,7 @@ expand_expr_real_1 (tree exp, rtx target
|
||||||
|
if (TREE_THIS_VOLATILE (exp))
|
||||||
|
MEM_VOLATILE_P (temp) = 1;
|
||||||
|
if (modifier != EXPAND_WRITE
|
||||||
|
+ && modifier != EXPAND_MEMORY
|
||||||
|
&& mode != BLKmode
|
||||||
|
&& align < GET_MODE_ALIGNMENT (mode))
|
||||||
|
{
|
||||||
|
--- gcc/testsuite/gcc.c-torture/compile/pr56405.c.jj 2013-02-20 10:32:17.807250979 +0100
|
||||||
|
+++ gcc/testsuite/gcc.c-torture/compile/pr56405.c 2013-02-20 10:32:46.963090873 +0100
|
||||||
|
@@ -0,0 +1,7 @@
|
||||||
|
+/* PR inline-asm/56405 */
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (void)
|
||||||
|
+{
|
||||||
|
+ asm volatile ("" : "+m" (*(volatile unsigned short *) 0x1001UL));
|
||||||
|
+}
|
297
gcc48-unused-locals.patch
Normal file
297
gcc48-unused-locals.patch
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
2013-02-20 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
* tree-call-cdce.c (tree_call_cdce): Do not remove unused locals.
|
||||||
|
* tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Likewise.
|
||||||
|
* tree-ssa-dce.c (perform_tree_ssa_dce): Likewise.
|
||||||
|
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Do
|
||||||
|
not return anything.
|
||||||
|
(rename_ssa_copies): Do not remove unused locals.
|
||||||
|
* tree-ssa-ccp.c (do_ssa_ccp): Likewise.
|
||||||
|
* tree-ssanames.c (pass_release_ssa_names): Remove unused
|
||||||
|
locals first.
|
||||||
|
* passes.c (execute_function_todo): Do not schedule unused locals
|
||||||
|
removal if cleanup_tree_cfg did something.
|
||||||
|
* tree-ssa-live.c (remove_unused_locals): Dump statistics
|
||||||
|
about the number of removed locals.
|
||||||
|
|
||||||
|
* gcc.dg/tree-ssa/forwprop-8.c: Adjust.
|
||||||
|
|
||||||
|
--- gcc/tree-ssa-copyrename.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssa-copyrename.c (revision 196174)
|
||||||
|
@@ -113,7 +113,7 @@ static struct
|
||||||
|
/* Coalesce the partitions in MAP representing VAR1 and VAR2 if it is valid.
|
||||||
|
Choose a representative for the partition, and send debug info to DEBUG. */
|
||||||
|
|
||||||
|
-static bool
|
||||||
|
+static void
|
||||||
|
copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
|
||||||
|
{
|
||||||
|
int p1, p2, p3;
|
||||||
|
@@ -146,7 +146,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Already coalesced.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rep1 = partition_to_var (map, p1);
|
||||||
|
@@ -154,7 +154,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
root1 = SSA_NAME_VAR (rep1);
|
||||||
|
root2 = SSA_NAME_VAR (rep2);
|
||||||
|
if (!root1 && !root2)
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
|
||||||
|
/* Don't coalesce if one of the variables occurs in an abnormal PHI. */
|
||||||
|
abnorm = (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rep1)
|
||||||
|
@@ -163,7 +163,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Abnormal PHI barrier. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Partitions already have the same root, simply merge them. */
|
||||||
|
@@ -172,7 +172,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
p1 = partition_union (map->var_partition, p1, p2);
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Same root, coalesced --> P%d.\n", p1);
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Never attempt to coalesce 2 different parameters. */
|
||||||
|
@@ -181,7 +181,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : 2 different PARM_DECLS. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((root1 && TREE_CODE (root1) == RESULT_DECL)
|
||||||
|
@@ -189,7 +189,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : One root a RESULT_DECL. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ign1 = !root1 || (TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1));
|
||||||
|
@@ -206,7 +206,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : 2 different USER vars. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ign2 = true;
|
||||||
|
@@ -220,7 +220,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : 2 default defs. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -240,7 +240,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Choosen variable has no root. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't coalesce if the new chosen root variable would be read-only.
|
||||||
|
@@ -253,7 +253,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Readonly variable. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't coalesce if the two variables aren't type compatible . */
|
||||||
|
@@ -266,7 +266,7 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
fprintf (debug, " : Incompatible types. No coalesce.\n");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Merge the two partitions. */
|
||||||
|
@@ -288,7 +288,6 @@ copy_rename_partition_coalesce (var_map
|
||||||
|
TDF_SLIM);
|
||||||
|
fprintf (debug, "\n");
|
||||||
|
}
|
||||||
|
- return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -308,7 +307,6 @@ rename_ssa_copies (void)
|
||||||
|
gimple stmt, phi;
|
||||||
|
unsigned x;
|
||||||
|
FILE *debug;
|
||||||
|
- bool updated = false;
|
||||||
|
|
||||||
|
memset (&stats, 0, sizeof (stats));
|
||||||
|
|
||||||
|
@@ -330,7 +328,7 @@ rename_ssa_copies (void)
|
||||||
|
tree lhs = gimple_assign_lhs (stmt);
|
||||||
|
tree rhs = gimple_assign_rhs1 (stmt);
|
||||||
|
|
||||||
|
- updated |= copy_rename_partition_coalesce (map, lhs, rhs, debug);
|
||||||
|
+ copy_rename_partition_coalesce (map, lhs, rhs, debug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -358,8 +356,8 @@ rename_ssa_copies (void)
|
||||||
|
{
|
||||||
|
tree arg = PHI_ARG_DEF (phi, i);
|
||||||
|
if (TREE_CODE (arg) == SSA_NAME)
|
||||||
|
- updated |= copy_rename_partition_coalesce (map, res, arg,
|
||||||
|
- debug);
|
||||||
|
+ copy_rename_partition_coalesce (map, res, arg,
|
||||||
|
+ debug);
|
||||||
|
}
|
||||||
|
/* Else if all arguments are in the same partition try to merge
|
||||||
|
it with the result. */
|
||||||
|
@@ -390,9 +388,9 @@ rename_ssa_copies (void)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (all_p_same == 1)
|
||||||
|
- updated |= copy_rename_partition_coalesce (map, res,
|
||||||
|
- PHI_ARG_DEF (phi, 0),
|
||||||
|
- debug);
|
||||||
|
+ copy_rename_partition_coalesce (map, res,
|
||||||
|
+ PHI_ARG_DEF (phi, 0),
|
||||||
|
+ debug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -426,7 +424,7 @@ rename_ssa_copies (void)
|
||||||
|
statistics_counter_event (cfun, "copies coalesced",
|
||||||
|
stats.coalesced);
|
||||||
|
delete_var_map (map);
|
||||||
|
- return updated ? TODO_remove_unused_locals : 0;
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return true if copy rename is to be performed. */
|
||||||
|
--- gcc/tree-ssa-ccp.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssa-ccp.c (revision 196174)
|
||||||
|
@@ -2108,7 +2108,7 @@ do_ssa_ccp (void)
|
||||||
|
ccp_initialize ();
|
||||||
|
ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node);
|
||||||
|
if (ccp_finalize ())
|
||||||
|
- todo = (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals);
|
||||||
|
+ todo = (TODO_cleanup_cfg | TODO_update_ssa);
|
||||||
|
free_dominance_info (CDI_DOMINATORS);
|
||||||
|
return todo;
|
||||||
|
}
|
||||||
|
--- gcc/tree-call-cdce.c (revision 196173)
|
||||||
|
+++ gcc/tree-call-cdce.c (revision 196174)
|
||||||
|
@@ -898,11 +898,10 @@ tree_call_cdce (void)
|
||||||
|
/* As we introduced new control-flow we need to insert PHI-nodes
|
||||||
|
for the call-clobbers of the remaining call. */
|
||||||
|
mark_virtual_operands_for_renaming (cfun);
|
||||||
|
- return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect
|
||||||
|
- | TODO_remove_unused_locals);
|
||||||
|
+ return TODO_update_ssa;
|
||||||
|
}
|
||||||
|
- else
|
||||||
|
- return 0;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
--- gcc/tree-ssa-live.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssa-live.c (revision 196174)
|
||||||
|
@@ -889,7 +889,10 @@ remove_unused_locals (void)
|
||||||
|
dstidx++;
|
||||||
|
}
|
||||||
|
if (dstidx != num)
|
||||||
|
- cfun->local_decls->truncate (dstidx);
|
||||||
|
+ {
|
||||||
|
+ statistics_counter_event (cfun, "unused VAR_DECLs removed", num - dstidx);
|
||||||
|
+ cfun->local_decls->truncate (dstidx);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
remove_unused_scope_block_p (DECL_INITIAL (current_function_decl));
|
||||||
|
clear_unused_block_pointer ();
|
||||||
|
--- gcc/tree-ssa-forwprop.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssa-forwprop.c (revision 196174)
|
||||||
|
@@ -2936,7 +2936,6 @@ ssa_forward_propagate_and_combine (void)
|
||||||
|
&& forward_propagate_addr_expr (lhs, rhs))
|
||||||
|
{
|
||||||
|
release_defs (stmt);
|
||||||
|
- todoflags |= TODO_remove_unused_locals;
|
||||||
|
gsi_remove (&gsi, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
@@ -2961,7 +2960,6 @@ ssa_forward_propagate_and_combine (void)
|
||||||
|
off)))))
|
||||||
|
{
|
||||||
|
release_defs (stmt);
|
||||||
|
- todoflags |= TODO_remove_unused_locals;
|
||||||
|
gsi_remove (&gsi, true);
|
||||||
|
}
|
||||||
|
else if (is_gimple_min_invariant (rhs))
|
||||||
|
--- gcc/tree-ssa-dce.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssa-dce.c (revision 196174)
|
||||||
|
@@ -1607,10 +1607,8 @@ perform_tree_ssa_dce (bool aggressive)
|
||||||
|
free_edge_list (el);
|
||||||
|
|
||||||
|
if (something_changed)
|
||||||
|
- return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect
|
||||||
|
- | TODO_remove_unused_locals);
|
||||||
|
- else
|
||||||
|
- return 0;
|
||||||
|
+ return TODO_update_ssa | TODO_cleanup_cfg;
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pass entry points. */
|
||||||
|
--- gcc/passes.c (revision 196173)
|
||||||
|
+++ gcc/passes.c (revision 196174)
|
||||||
|
@@ -1918,10 +1918,7 @@ execute_function_todo (void *data)
|
||||||
|
/* Always cleanup the CFG before trying to update SSA. */
|
||||||
|
if (flags & TODO_cleanup_cfg)
|
||||||
|
{
|
||||||
|
- bool cleanup = cleanup_tree_cfg ();
|
||||||
|
-
|
||||||
|
- if (cleanup && (cfun->curr_properties & PROP_ssa))
|
||||||
|
- flags |= TODO_remove_unused_locals;
|
||||||
|
+ cleanup_tree_cfg ();
|
||||||
|
|
||||||
|
/* When cleanup_tree_cfg merges consecutive blocks, it may
|
||||||
|
perform some simplistic propagation when removing single
|
||||||
|
--- gcc/tree-ssanames.c (revision 196173)
|
||||||
|
+++ gcc/tree-ssanames.c (revision 196174)
|
||||||
|
@@ -455,7 +455,7 @@ struct gimple_opt_pass pass_release_ssa_
|
||||||
|
PROP_ssa, /* properties_required */
|
||||||
|
0, /* properties_provided */
|
||||||
|
0, /* properties_destroyed */
|
||||||
|
- 0, /* todo_flags_start */
|
||||||
|
- 0 /* todo_flags_finish */
|
||||||
|
+ TODO_remove_unused_locals, /* todo_flags_start */
|
||||||
|
+ 0 /* todo_flags_finish */
|
||||||
|
}
|
||||||
|
};
|
||||||
|
--- gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c (revision 196173)
|
||||||
|
+++ gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c (revision 196174)
|
||||||
|
@@ -11,6 +11,5 @@ int foo(struct X *q)
|
||||||
|
|
||||||
|
|
||||||
|
/* We should have propragated &q->a into (*pointer). */
|
||||||
|
-/* { dg-final { scan-tree-dump-times "pointer" 0 "forwprop1"} } */
|
||||||
|
-/* { dg-final { scan-tree-dump "\\\[0\\\]" "forwprop1" } } */
|
||||||
|
+/* { dg-final { scan-tree-dump "q_.\\\(D\\\)\\\]\\\[0\\\];" "forwprop1" } } */
|
||||||
|
/* { dg-final { cleanup-tree-dump "forwprop1" } } */
|
2
sources
2
sources
@ -1,4 +1,4 @@
|
|||||||
be78a47bd82523250eb3e91646db5b3d cloog-0.18.0.tar.gz
|
be78a47bd82523250eb3e91646db5b3d cloog-0.18.0.tar.gz
|
||||||
2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz
|
2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz
|
||||||
|
d18630509460934dfd7163a884b63ecd gcc-4.8.0-20130220.tar.bz2
|
||||||
bce1586384d8635a76d2f017fb067cd2 isl-0.11.1.tar.bz2
|
bce1586384d8635a76d2f017fb067cd2 isl-0.11.1.tar.bz2
|
||||||
4fa6cbda8e98ae790212c6b7b00fb939 gcc-4.8.0-20130215.tar.bz2
|
|
||||||
|
Loading…
Reference in New Issue
Block a user