Merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3 into lp:gcc-linaro/4.5

Proposed by Andrew Stubbs
Status: Merged
Approved by: Ulrich Weigand
Approved revision: no longer in the source branch.
Merged at revision: 99505
Proposed branch: lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3
Merge into: lp:gcc-linaro/4.5
Diff against target: 4828 lines (+2513/-342)
140 files modified
ChangeLog (+4/-0)
ChangeLog.linaro (+4/-0)
boehm-gc/ChangeLog (+4/-0)
config/ChangeLog (+4/-0)
contrib/ChangeLog (+4/-0)
contrib/reghunt/ChangeLog (+4/-0)
contrib/regression/ChangeLog (+4/-0)
fixincludes/ChangeLog (+4/-0)
gcc/ChangeLog (+394/-0)
gcc/DATESTAMP (+1/-1)
gcc/DEV-PHASE (+0/-1)
gcc/ada/ChangeLog (+4/-0)
gcc/alias.c (+8/-0)
gcc/c-common.c (+1/-0)
gcc/c-lex.c (+9/-2)
gcc/c-ppoutput.c (+6/-1)
gcc/cfgloopmanip.c (+13/-4)
gcc/cgraphunit.c (+4/-43)
gcc/config/alpha/osf.h (+5/-1)
gcc/config/i386/predicates.md (+1/-6)
gcc/config/i386/sse.md (+66/-27)
gcc/config/pa/pa.c (+23/-15)
gcc/config/pa/pa.h (+1/-0)
gcc/config/pa/pa32-regs.h (+1/-0)
gcc/config/pa/pa64-regs.h (+2/-1)
gcc/config/rx/rx.md (+9/-0)
gcc/cp/ChangeLog (+47/-0)
gcc/cp/call.c (+6/-7)
gcc/cp/cp-tree.h (+1/-1)
gcc/cp/cvt.c (+1/-3)
gcc/cp/decl.c (+13/-0)
gcc/cp/decl2.c (+10/-4)
gcc/cp/init.c (+47/-9)
gcc/cp/parser.c (+6/-0)
gcc/cp/search.c (+2/-8)
gcc/cp/typeck.c (+5/-1)
gcc/doc/sourcebuild.texi (+4/-1)
gcc/dse.c (+3/-3)
gcc/dwarf2out.c (+2/-2)
gcc/fold-const.c (+12/-2)
gcc/fortran/ChangeLog (+4/-0)
gcc/gcov-io.c (+7/-2)
gcc/gimplify.c (+2/-1)
gcc/haifa-sched.c (+2/-0)
gcc/ipa-inline.c (+7/-3)
gcc/java/ChangeLog (+4/-0)
gcc/lto/ChangeLog (+4/-0)
gcc/objc/ChangeLog (+4/-0)
gcc/objcp/ChangeLog (+4/-0)
gcc/omp-low.c (+12/-1)
gcc/po/ChangeLog (+4/-0)
gcc/reload1.c (+12/-28)
gcc/rtl.h (+1/-0)
gcc/sched-vis.c (+1/-1)
gcc/sel-sched-ir.c (+153/-113)
gcc/sel-sched-ir.h (+1/-4)
gcc/sel-sched.c (+55/-26)
gcc/simplify-rtx.c (+6/-2)
gcc/testsuite/ChangeLog (+227/-0)
gcc/testsuite/c-c++-common/raw-string-11.c (+13/-0)
gcc/testsuite/g++.dg/conversion/cast2.C (+0/-11)
gcc/testsuite/g++.dg/conversion/cast3.C (+14/-0)
gcc/testsuite/g++.dg/conversion/cond4.C (+31/-0)
gcc/testsuite/g++.dg/ext/attrib41.C (+19/-0)
gcc/testsuite/g++.dg/ext/complex7.C (+6/-0)
gcc/testsuite/g++.dg/gomp/pr47963.C (+11/-0)
gcc/testsuite/g++.dg/inherit/virtual8.C (+48/-0)
gcc/testsuite/g++.dg/lookup/koenig13.C (+16/-0)
gcc/testsuite/g++.dg/opt/pr46640.C (+44/-0)
gcc/testsuite/g++.dg/opt/pr46649.C (+9/-0)
gcc/testsuite/g++.dg/opt/pr47036.C (+10/-0)
gcc/testsuite/g++.dg/template/operator11.C (+25/-0)
gcc/testsuite/g++.dg/torture/pr46364.C (+20/-0)
gcc/testsuite/g++.dg/torture/pr47290.C (+19/-0)
gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog (+4/-0)
gcc/testsuite/gcc.dg/attr-alias-5.c (+1/-0)
gcc/testsuite/gcc.dg/dfp/pr48204.c (+10/-0)
gcc/testsuite/gcc.dg/gomp/pr47963.c (+11/-0)
gcc/testsuite/gcc.dg/guality/pr36977.c (+32/-0)
gcc/testsuite/gcc.dg/guality/pr48466.c (+41/-0)
gcc/testsuite/gcc.dg/pr45352-1.c (+13/-0)
gcc/testsuite/gcc.dg/pr45352-2.c (+17/-0)
gcc/testsuite/gcc.dg/pr45352-3.c (+16/-0)
gcc/testsuite/gcc.dg/pr45352.c (+24/-0)
gcc/testsuite/gcc.dg/pr45570.c (+28/-0)
gcc/testsuite/gcc.dg/pr45652.c (+39/-0)
gcc/testsuite/gcc.dg/pr46521.c (+20/-0)
gcc/testsuite/gcc.dg/pr46522.c (+33/-0)
gcc/testsuite/gcc.dg/pr46585.c (+11/-0)
gcc/testsuite/gcc.dg/pr46875.c (+27/-0)
gcc/testsuite/gcc.dg/pr47391.c (+22/-0)
gcc/testsuite/gcc.dg/pr47899.c (+26/-0)
gcc/testsuite/gcc.dg/pr48141.c (+17/-0)
gcc/testsuite/gcc.dg/pr48144.c (+16/-0)
gcc/testsuite/gcc.dg/torture/pr47473.c (+14/-0)
gcc/testsuite/gcc.dg/tree-prof/pr45354.c (+43/-0)
gcc/testsuite/gcc.dg/ucnid-10.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-13.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-7.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-8.c (+2/-1)
gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c (+8/-0)
gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c (+8/-0)
gcc/testsuite/gcc.target/i386/pr45352-1.c (+19/-0)
gcc/testsuite/gcc.target/i386/pr45352-2.c (+109/-0)
gcc/testsuite/gcc.target/i386/pr45352.c (+25/-0)
gcc/testsuite/gcc.target/i386/pr47809.c (+13/-0)
gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c (+5/-0)
gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c (+92/-0)
gcc/testsuite/gcc.target/ia64/pr43603.c (+39/-0)
gcc/testsuite/gfortran.dg/gomp/pr48117.f90 (+11/-0)
gcc/testsuite/lib/target-supports-dg.exp (+11/-2)
gcc/testsuite/lib/target-supports.exp (+11/-0)
gcc/tree-eh.c (+38/-2)
gcc/tree-ssa-ccp.c (+1/-1)
gcc/tree.c (+4/-0)
gnattools/ChangeLog (+4/-0)
include/ChangeLog (+4/-0)
intl/ChangeLog (+4/-0)
libada/ChangeLog (+4/-0)
libcpp/ChangeLog (+14/-0)
libcpp/lex.c (+3/-1)
libcpp/po/ChangeLog (+4/-0)
libdecnumber/ChangeLog (+4/-0)
libffi/ChangeLog (+4/-0)
libgcc/ChangeLog (+4/-0)
libgcc/config/libbid/ChangeLog (+4/-0)
libgfortran/ChangeLog (+4/-0)
libgomp/ChangeLog (+4/-0)
libiberty/ChangeLog (+4/-0)
libjava/ChangeLog (+9/-0)
libjava/classpath/ChangeLog (+4/-0)
libjava/libltdl/ChangeLog (+4/-0)
libjava/testsuite/libjava.jni/jni.exp (+5/-0)
libmudflap/ChangeLog (+4/-0)
libobjc/ChangeLog (+4/-0)
libssp/ChangeLog (+4/-0)
libstdc++-v3/ChangeLog (+4/-0)
lto-plugin/ChangeLog (+4/-0)
maintainer-scripts/ChangeLog (+4/-0)
zlib/ChangeLog (+4/-0)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3
Reviewer Review Type Date Requested Status
Ulrich Weigand (community) Approve
Review via email: mp+59393@code.launchpad.net

Description of the change

Merge from FSF GCC 4.5.3 release.

To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r99503 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3.tar.xdelta3.xz

and will be built on the following builders:
 a9-builder i686 x86_64

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3
cbuild-ancestor: lp:gcc-linaro+bzr99502
cbuild-state: check

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on i686-lucid-cbuild113-scorpius-i686r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/i686-lucid-cbuild113-scorpius-i686r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/dfp/pr48204.c (test for excess errors)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 ...and 122 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/i686-lucid-cbuild113-scorpius-i686r1/gcc-testsuite.txt

cbuild-checked: i686-lucid-cbuild113-scorpius-i686r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on x86_64-maverick-cbuild113-crucis-x86_64r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/x86_64-maverick-cbuild113-crucis-x86_64r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/dfp/pr48204.c (test for excess errors)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 ...and 121 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/x86_64-maverick-cbuild113-crucis-x86_64r1/gcc-testsuite.txt

cbuild-checked: x86_64-maverick-cbuild113-crucis-x86_64r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-maverick-cbuild113-ursa4-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/armv7l-maverick-cbuild113-ursa4-cortexa9r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2 -flto
 ...and 115 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/armv7l-maverick-cbuild113-ursa4-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-maverick-cbuild113-ursa4-cortexa9r1

Revision history for this message
Ulrich Weigand (uweigand) wrote :

This is OK.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ChangeLog'
--- ChangeLog 2011-01-25 15:49:54 +0000
+++ ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-01-25 Richard Guenther <rguenther@suse.de>52011-01-25 Richard Guenther <rguenther@suse.de>
26
3 Backport from mainline7 Backport from mainline
48
=== modified file 'ChangeLog.linaro'
--- ChangeLog.linaro 2011-04-26 09:24:25 +0000
+++ ChangeLog.linaro 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Andrew Stubbs <ams@codesourcery.com>
2
3 Merge from FSF 4.5 branch r173113 (4.5.3 release).
4
12011-04-26 Chung-Lin Tang <cltang@codesourcery.com>52011-04-26 Chung-Lin Tang <cltang@codesourcery.com>
26
3 Backport from mainline:7 Backport from mainline:
48
=== modified file 'boehm-gc/ChangeLog'
--- boehm-gc/ChangeLog 2010-12-16 12:30:55 +0000
+++ boehm-gc/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'config/ChangeLog'
--- config/ChangeLog 2010-12-16 12:32:12 +0000
+++ config/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'contrib/ChangeLog'
--- contrib/ChangeLog 2010-12-16 12:29:50 +0000
+++ contrib/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'contrib/reghunt/ChangeLog'
--- contrib/reghunt/ChangeLog 2010-12-16 12:29:55 +0000
+++ contrib/reghunt/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'contrib/regression/ChangeLog'
--- contrib/regression/ChangeLog 2010-12-16 12:29:45 +0000
+++ contrib/regression/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'fixincludes/ChangeLog'
--- fixincludes/ChangeLog 2010-12-16 12:30:44 +0000
+++ fixincludes/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/ChangeLog'
--- gcc/ChangeLog 2011-03-30 10:48:07 +0000
+++ gcc/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,397 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
52011-04-21 Richard Guenther <rguenther@suse.de>
6
7 PR middle-end/48712
8 Backport from 4.6 branch
9 2011-03-07 Zdenek Dvorak <ook@ucw.cz>
10
11 PR bootstrap/48000
12 * cfgloopmanip.c (fix_bb_placements): Return immediately
13 if FROM is BASE_LOOP's header.
14
152011-04-20 Richard Guenther <rguenther@suse.de>
16
17 Backport from 4.6 branch
18 2011-04-19 Bernd Schmidt <bernds@codesourcery.com>
19
20 PR fortran/47976
21 * reload1.c (inc_for_reload): Return void. All callers changed.
22 (emit_input_reload_insns): Don't try to delete previous output
23 reloads to a register, or record spill_reg_store for autoincs.
24
252011-04-19 Richard Guenther <rguenther@suse.de>
26
27 Backported from 4.6 branch
28 2011-03-29 Jakub Jelinek <jakub@redhat.com>
29
30 PR preprocessor/48248
31 * c-ppoutput.c (print): Add src_file field.
32 (init_pp_output): Initialize it.
33 (maybe_print_line): Don't optimize by adding up to 8 newlines
34 if map->to_file and print.src_file are different file.
35 (print_line): Update print.src_file.
36
37 2011-04-18 Richard Guenther <rguenther@suse.de>
38
39 PR preprocessor/48248
40 * c-ppoutput.c (maybe_print_line): Avoid changing -P behavior.
41
422011-04-19 Richard Guenther <rguenther@suse.de>
43
44 PR tree-optimization/46188
45 Backported from 4.6 branch
46 2010-05-26 Jan Hubicka <jh@suse.cz>
47
48 * cgraphunit.c (clone_of_p): Remove.
49 (verify_cgraph_node): Do not verify clones.
50 (cgraph_materialize_all_clones): Do no redirection here.
51 * ipa-inline.c (inline_transform): Do redirection here.
52
532011-04-18 Eric Botcazou <ebotcazou@adacore.com>
54
55 * dwarf2out.c (is_redundant_typedef): Add 'inline' to prototype.
56
572011-04-18 Richard Guenther <rguenther@suse.de>
58
59 Backported from 4.6 branch
60 2011-01-19 Jakub Jelinek <jakub@redhat.com>
61
62 PR tree-optimization/47290
63 * tree-eh.c (infinite_empty_loop_p): New function.
64 (cleanup_empty_eh): Use it.
65
66 2010-05-29 Jan Hubicka <jh@suse.cz>
67
68 PR tree-optimization/46364
69 * cgraphunit.c (cgraph_materialize_clone): Only remove calles, refs
70 and body;
71 not the whole node for masters of materialized clones.
72
732011-04-18 Richard Guenther <rguenther@suse.de>
74
75 Backported from 4.6 branch
76 2011-03-05 Zdenek Dvorak <ook@ucw.cz>
77
78 PR rtl-optimization/47899
79 * cfgloopmanip.c (fix_bb_placements): Fix first argument
80 to flow_loop_nested_p when moving the loop upward.
81
82 2011-03-15 Richard Guenther <rguenther@suse.de>
83
84 PR middle-end/48031
85 * fold-const.c (fold_indirect_ref_1): Do not create new variable-sized
86 or variable-indexed array accesses when in gimple form.
87
882011-04-16 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
89
90 * config/pa/pa.h (REGISTER_MOVE_COST): Increase to 18 cost of
91 move from floating point to shift amount register.
92
93 Backport from mainline:
94 2011-04-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
95
96 PR target/48366
97 * config/pa/pa.c (emit_move_sequence): Remove secondary reload
98 support for floating point to shift amount amount register copies.
99 (pa_secondary_reload): Return GENERAL_REGS for floating point/shift
100 amount register copies.
101 * config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): For shift amount
102 register, return false if mode isn't a scalar integer mode.
103 * config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Likewise.
104
1052011-04-16 Jakub Jelinek <jakub@redhat.com>
106
107 Backported from 4.6 branch
108 2011-04-15 Jakub Jelinek <jakub@redhat.com>
109
110 PR target/48605
111 * config/i386/sse.md (avx_insertps, sse4_1_insertps): If operands[2]
112 is a MEM, offset it as needed based on top 2 bits in operands[3],
113 change MEM mode to SFmode and mask those 2 bits away from operands[3].
114
1152011-04-13 Nick Clifton <nickc@redhat.com>
116
117 * config/rx/rx.md (movmemsi): Do not use this pattern when
118 volatile pointers are involved.
119
1202011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
121
122 Backport from mainline:
123 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
124
125 PR testsuite/47400
126 * doc/sourcebuild.texi (Require Support): Document
127 dg-require-ascii-locale.
128
1292011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
130
131 Backport from mainline:
132 2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
133 PR target/48090
134 * config/arm/arm.md (*arm_negdi2): Fix early clobber constraints.
135
1362011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
137
138 Backport from mainline:
139 2011-04-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
140
141 * config/alpha/osf.h (MAX_OFILE_ALIGNMENT): Define.
142
1432011-04-09 Duncan Sands <baldrick@free.fr>
144
145 * tree.c (array_type_nelts): Bail out if TYPE_MAX_VALUE not set.
146
1472011-04-07 Uros Bizjak <ubizjak@gmail.com>
148
149 * config/i386/sse.md (avx_cmps<ssemodesuffixf2c><mode>3): Add
150 missing output register constraint.
151 (*vec_concatv2sf_avx): Fix wrong register constraint in
152 alternative 3 of operand 1.
153 (*vec_set<mode>_0_avx): Avoid combining registers from different
154 units in a single alternative.
155 (*vec_set<mode>_0_sse4_1): Ditto.
156 (*vec_set<mode>_0_sse2): Ditto.
157 (vec_set<mode>_0): Ditto.
158 (sse2_storehpd): Ditto.
159 (sse2_loadhpd): Ditto.
160 (sse4_1_insertps): Use nonimmediate_operand for operand 2.
161 * config/i386/predicates.md (sse_comparison_operator): Do not
162 define as special predicate.
163
1642011-04-07 Jakub Jelinek <jakub@redhat.com>
165
166 Backported from mainline
167 2011-04-06 Jakub Jelinek <jakub@redhat.com>
168
169 PR debug/48466
170 * dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use
171 as base_reg whatever register reg has been eliminated to, instead
172 of hardcoding STACK_POINTER_REGNUM.
173
174 2011-03-24 Jakub Jelinek <jakub@redhat.com>
175
176 PR debug/48204
177 * simplify-rtx.c (simplify_const_unary_operation): Call
178 real_convert when changing mode class with FLOAT_EXTEND.
179
180 2011-03-17 Jakub Jelinek <jakub@redhat.com>
181
182 PR rtl-optimization/48141
183 * dse.c (record_store): If no positions are needed in an insn
184 that cannot be deleted, at least unchain it from active_local_stores.
185
186 2011-03-03 Jakub Jelinek <jakub@redhat.com>
187
188 PR c/47963
189 * gimplify.c (omp_add_variable): Only call omp_notice_variable
190 on TYPE_SIZE_UNIT if it is a DECL.
191
192 2011-02-19 Jakub Jelinek <jakub@redhat.com>
193
194 PR c/47809
195 * c-common.c (c_fully_fold_internal): Handle VIEW_CONVERT_EXPR.
196
197 2011-01-26 Jakub Jelinek <jakub@redhat.com>
198
199 PR c/47473
200 * c-lex.c (interpret_float): If CPP_N_IMAGINARY, ensure
201 EXCESS_PRECISION_EXPR is created with COMPLEX_TYPE instead of
202 REAL_TYPE.
203
2042011-04-07 Jakub Jelinek <jakub@redhat.com>
205
206 PR tree-optimization/47391
207 * tree-ssa-ccp.c (get_symbol_constant_value): Don't optimize
208 if sym is volatile.
209
210 Backported from mainline
211 2010-07-01 Richard Guenther <rguenther@suse.de>
212
213 * omp-low.c (scan_omp_1_op): Don't change type of INTEGER_CSTs
214 directly.
215
2162011-04-07 Andrey Belevantsev <abel@ispras.ru>
217
218 Backport from mainline
219 2011-03-26 Andrey Belevantsev <abel@ispras.ru>
220
221 PR rtl-optimization/48144
222 * sel-sched-ir.c (merge_history_vect): Factor out from ...
223 (merge_expr_data): ... here.
224 (av_set_intersect): Rename to av_set_code_motion_filter.
225 Update all callers. Call merge_history_vect when an expression
226 is found in both sets.
227 * sel-sched-ir.h (av_set_code_motion_filter): Add prototype.
228
2292011-04-07 Andrey Belevantsev <abel@ispras.ru>
230
231 Backport from mainline
232 2011-01-13 Andrey Belevantsev <abel@ispras.ru>
233
234 PR rtl-optimization/45352
235 * sel-sched.c: Update copyright years.
236 (reset_sched_cycles_in_current_ebb): Also recheck the DFA state
237 in the advancing loop when we have issued issue_rate insns.
238
239 Backport from mainline
240 2010-12-22 Andrey Belevantsev <abel@ispras.ru>
241
242 PR rtl-optimization/45352
243 PR rtl-optimization/46521
244 PR rtl-optimization/46522
245 * sel-sched.c (reset_sched_cycles_in_current_ebb): Recheck the DFA state
246 on the last iteration of the advancing loop.
247 (sel_sched_region_1): Propagate the rescheduling bit to the next block
248 also for empty blocks.
249
250 Backport from mainline
251 2010-11-08 Andrey Belevantsev <abel@ispras.ru>
252
253 PR rtl-optimization/45352
254 * sel-sched.c (find_best_expr): Do not set pneed_stall when
255 the variable_issue hook is not implemented.
256 (fill_insns): Remove dead variable stall_iterations.
257 (init_seqno_1): Force EBB start for resetting sched cycles on any
258 successor blocks of the rescheduled region.
259 (sel_sched_region_1): Use bitmap_bit_p instead of bitmap_clear_bit.
260 (reset_sched_cycles_in_current_ebb): Add debug printing.
261 New variable issued_insns. Advance state when we have issued
262 issue_rate insns.
263
2642011-04-07 Andrey Belevantsev <abel@ispras.ru>
265
266 Backport from mainline
267 2010-12-24 Alexander Monakov <amonakov@ispras.ru>
268
269 PR rtl-optimization/47036
270 * sel-sched-ir.c (fallthru_bb_of_jump): Remove special support for
271 unconditional jumps.
272 * sel-sched.c (moveup_expr): Ditto.
273
2742011-04-07 Andrey Belevantsev <abel@ispras.ru>
275
276 Backport from mainline
277 2010-12-15 Alexander Monakov <amonakov@ispras.ru>
278
279 PR rtl-optimization/46649
280 * sel-sched-ir.c (purge_empty_blocks): Unconditionally skip the first
281 basic block in the region.
282
2832011-04-07 Andrey Belevantsev <abel@ispras.ru>
284
285 Backport from mainline
286 2010-12-14 Alexander Monakov <amonakov@ispras.ru>
287
288 PR rtl-optimization/46875
289 * sched-vis.c (print_pattern): Dump "sequence" for ADDR_VECs.
290 * sel-sched-ir.c (bb_has_removable_jump_to_p): Forbid table jumps.
291
2922011-04-07 Andrey Belevantsev <abel@ispras.ru>
293
294 Backport from mainline
295 2010-12-07 Andrey Belevantsev <abel@ispras.ru>
296 PR target/43603
297 * haifa-sched.c (sched_create_recovery_edges): Update
298 dominator info.
299 * sel-sched-ir.c (maybe_tidy_empty_bb): Update dominator info
300 after deleting an empty block.
301 (tidy_control_flow): Also verify dominators.
302 (sel_remove_bb): Update dominator info after removing a block.
303 (sel_redirect_edge_and_branch_force): Assert that no unreachable
304 blocks will be created. Update dominator info.
305 (sel_redirect_edge_and_branch): Update dominator info when
306 basic blocks do not become unreachable.
307 (sel_remove_loop_preheader): Update dominator info.
308
309 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
310
311 * sel-sched-ir.c (maybe_tidy_empty_bb): Simplify comment.
312 (tidy_control_flow): Tidy vertical space.
313 (sel_remove_bb): New variable idx. Use it to remember the basic
314 block index before deleting the block.
315 (sel_remove_empty_bb): Remove dead code, simplify and insert to ...
316 (sel_merge_blocks): ... here.
317 * sel-sched-ir.h (sel_remove_empty_bb): Remove prototype.
318
3192011-04-07 Andrey Belevantsev <abel@ispras.ru>
320
321 Backport from mainline
322 2010-12-03 Alexander Monakov <amonakov@ispras.ru>
323
324 PR rtl-optimization/45354
325 * sel-sched-ir.c (jump_leads_only_to_bb_p): Rename to ...
326 (bb_has_removable_jump_to_p): This. Update all callers. Make static.
327 Allow BBs ending with a conditional jump. Forbid EDGE_CROSSING jumps.
328 * sel-sched-ir.h (jump_leads_only_to_bb_p): Delete prototype.
329
3302011-04-07 Andrey Belevantsev <abel@ispras.ru>
331
332 Backport from mainline
333 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
334
335 PR rtl-optimization/46585
336 * sel-sched-ir.c (return_regset_to_pool): Verify that RS is not NULL.
337 (vinsn_init): Skip computation of dependencies for local NOPs.
338 (vinsn_delete): Don't try to free regsets for local NOPs.
339 (setup_nop_and_exit_insns): Change definition of nop_pattern.
340
3412011-04-07 Andrey Belevantsev <abel@ispras.ru>
342
343 Backport from mainline
344 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
345
346 PR rtl-optimization/46602
347 * sel-sched-ir.c (maybe_tidy_empty_bb): Move checking ...
348 (tidy_control_flow): Here.
349
3502011-04-07 Andrey Belevantsev <abel@ispras.ru>
351
352 Backport from mainline
353 2010-11-22 Alexander Monakov <amonakov@ispras.ru>
354
355 PR rtl-optimization/45652
356 * alias.c (get_reg_base_value): New.
357 * rtl.h (get_reg_base_value): Add prototype.
358 * sel-sched.c (init_regs_for_mode): Use it. Don't use registers with
359 non-null REG_BASE_VALUE for renaming.
360
3612011-04-07 Andrey Belevantsev <abel@ispras.ru>
362
363 Backport from mainline
364 2010-11-18 Alexander Monakov <amonakov@ispras.ru>
365
366 PR middle-end/46518
367 * sel-sched-ir.c (init_expr): Use the correct type for
368 target_available.
369 * sel-sched.c (fill_vec_av_set): Use explicitly signed char type.
370
3712011-04-07 Andrey Belevantsev <abel@ispras.ru>
372
373 Backport from mainline
374 2010-11-12 Alexander Monakov <amonakov@ispras.ru>
375
376 PR rtl-optimization/46204
377 sel-sched-ir.c (maybe_tidy_empty_bb): Remove second argument.
378 pdate all callers. Do not recompute topological order. Adjust
379 allthrough edges following a degenerate conditional jump.
380
3812011-04-07 Andrey Belevantsev <abel@ispras.ru>
382
383 Backport from mainline
384 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
385
386 PR rtl-optimization/45570
387 * sel-sched-ir.c (cfg_preds_1): When walking out of the region,
388 assert that we are pipelining outer loops. Allow returning
389 zero predecessors.
390
3912011-04-06 Joseph Myers <joseph@codesourcery.com>
392
393 * gcov-io.c: Use GCC Runtime Library Exception.
394
12011-03-30 H.J. Lu <hongjiu.lu@intel.com>3952011-03-30 H.J. Lu <hongjiu.lu@intel.com>
2396
3 Backport from mainline397 Backport from mainline
4398
=== modified file 'gcc/DATESTAMP'
--- gcc/DATESTAMP 2011-04-06 00:18:18 +0000
+++ gcc/DATESTAMP 2011-04-28 16:44:05 +0000
@@ -1,1 +1,1 @@
120110406120110428
22
=== modified file 'gcc/DEV-PHASE'
--- gcc/DEV-PHASE 2011-02-22 11:38:56 +0000
+++ gcc/DEV-PHASE 2011-04-28 16:44:05 +0000
@@ -1,1 +0,0 @@
1prerelease
20
=== modified file 'gcc/ada/ChangeLog'
--- gcc/ada/ChangeLog 2011-02-12 19:22:17 +0000
+++ gcc/ada/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-02-12 Gerald Pfeifer <gerald@pfeifer.com>52011-02-12 Gerald Pfeifer <gerald@pfeifer.com>
26
3 * gnat_ugn.texi (Compiling Different Versions of Ada): Update7 * gnat_ugn.texi (Compiling Different Versions of Ada): Update
48
=== modified file 'gcc/alias.c'
--- gcc/alias.c 2010-05-26 10:29:20 +0000
+++ gcc/alias.c 2011-04-28 16:44:05 +0000
@@ -1228,6 +1228,14 @@
1228 reg_seen[regno] = 1;1228 reg_seen[regno] = 1;
1229}1229}
12301230
1231/* Return REG_BASE_VALUE for REGNO. Selective scheduler uses this to avoid
1232 using hard registers with non-null REG_BASE_VALUE for renaming. */
1233rtx
1234get_reg_base_value (unsigned int regno)
1235{
1236 return VEC_index (rtx, reg_base_value, regno);
1237}
1238
1231/* If a value is known for REGNO, return it. */1239/* If a value is known for REGNO, return it. */
12321240
1233rtx1241rtx
12341242
=== modified file 'gcc/c-common.c'
--- gcc/c-common.c 2011-01-06 11:02:44 +0000
+++ gcc/c-common.c 2011-04-28 16:44:05 +0000
@@ -1352,6 +1352,7 @@
1352 case FIX_TRUNC_EXPR:1352 case FIX_TRUNC_EXPR:
1353 case FLOAT_EXPR:1353 case FLOAT_EXPR:
1354 CASE_CONVERT:1354 CASE_CONVERT:
1355 case VIEW_CONVERT_EXPR:
1355 case NON_LVALUE_EXPR:1356 case NON_LVALUE_EXPR:
1356 case NEGATE_EXPR:1357 case NEGATE_EXPR:
1357 case BIT_NOT_EXPR:1358 case BIT_NOT_EXPR:
13581359
=== modified file 'gcc/c-lex.c'
--- gcc/c-lex.c 2009-11-25 10:55:54 +0000
+++ gcc/c-lex.c 2011-04-28 16:44:05 +0000
@@ -739,8 +739,15 @@
739 /* Create a node with determined type and value. */739 /* Create a node with determined type and value. */
740 value = build_real (const_type, real);740 value = build_real (const_type, real);
741 if (flags & CPP_N_IMAGINARY)741 if (flags & CPP_N_IMAGINARY)
742 value = build_complex (NULL_TREE, convert (const_type, integer_zero_node),742 {
743 value);743 value = build_complex (NULL_TREE, convert (const_type,
744 integer_zero_node), value);
745 if (type != const_type)
746 {
747 const_type = TREE_TYPE (value);
748 type = build_complex_type (type);
749 }
750 }
744751
745 if (type != const_type)752 if (type != const_type)
746 value = build1 (EXCESS_PRECISION_EXPR, type, value);753 value = build1 (EXCESS_PRECISION_EXPR, type, value);
747754
=== modified file 'gcc/c-ppoutput.c'
--- gcc/c-ppoutput.c 2009-10-09 18:55:34 +0000
+++ gcc/c-ppoutput.c 2011-04-28 16:44:05 +0000
@@ -37,6 +37,7 @@
37 int src_line; /* Line number currently being written. */37 int src_line; /* Line number currently being written. */
38 unsigned char printed; /* Nonzero if something output at line. */38 unsigned char printed; /* Nonzero if something output at line. */
39 bool first_time; /* pp_file_change hasn't been called yet. */39 bool first_time; /* pp_file_change hasn't been called yet. */
40 const char *src_file; /* Current source file. */
40} print;41} print;
4142
42/* Defined and undefined macros being queued for output with -dU at43/* Defined and undefined macros being queued for output with -dU at
@@ -154,6 +155,7 @@
154 print.prev = 0;155 print.prev = 0;
155 print.outf = out_stream;156 print.outf = out_stream;
156 print.first_time = 1;157 print.first_time = 1;
158 print.src_file = "";
157}159}
158160
159/* Writes out the preprocessed file, handling spacing and paste161/* Writes out the preprocessed file, handling spacing and paste
@@ -313,7 +315,9 @@
313 print.printed = 0;315 print.printed = 0;
314 }316 }
315317
316 if (src_line >= print.src_line && src_line < print.src_line + 8)318 if (src_line >= print.src_line
319 && src_line < print.src_line + 8
320 && (flag_no_line_commands || strcmp (map->to_file, print.src_file) == 0))
317 {321 {
318 while (src_line > print.src_line)322 while (src_line > print.src_line)
319 {323 {
@@ -345,6 +349,7 @@
345 unsigned char *p;349 unsigned char *p;
346350
347 print.src_line = SOURCE_LINE (map, src_loc);351 print.src_line = SOURCE_LINE (map, src_loc);
352 print.src_file = map->to_file;
348353
349 /* cpp_quote_string does not nul-terminate, so we have to do it354 /* cpp_quote_string does not nul-terminate, so we have to do it
350 ourselves. */355 ourselves. */
351356
=== modified file 'gcc/cfgloopmanip.c'
--- gcc/cfgloopmanip.c 2010-11-11 20:33:18 +0000
+++ gcc/cfgloopmanip.c 2011-04-28 16:44:05 +0000
@@ -174,7 +174,7 @@
174{174{
175 sbitmap in_queue;175 sbitmap in_queue;
176 basic_block *queue, *qtop, *qbeg, *qend;176 basic_block *queue, *qtop, *qbeg, *qend;
177 struct loop *base_loop;177 struct loop *base_loop, *target_loop;
178 edge e;178 edge e;
179179
180 /* We pass through blocks back-reachable from FROM, testing whether some180 /* We pass through blocks back-reachable from FROM, testing whether some
@@ -185,7 +185,11 @@
185 fix_loop_placement. */185 fix_loop_placement. */
186186
187 base_loop = from->loop_father;187 base_loop = from->loop_father;
188 if (base_loop == current_loops->tree_root)188 /* If we are already in the outermost loop, the basic blocks cannot be moved
189 outside of it. If FROM is the header of the base loop, it cannot be moved
190 outside of it, either. In both cases, we can end now. */
191 if (base_loop == current_loops->tree_root
192 || from == base_loop->header)
189 return;193 return;
190194
191 in_queue = sbitmap_alloc (last_basic_block);195 in_queue = sbitmap_alloc (last_basic_block);
@@ -214,12 +218,14 @@
214 /* Subloop header, maybe move the loop upward. */218 /* Subloop header, maybe move the loop upward. */
215 if (!fix_loop_placement (from->loop_father))219 if (!fix_loop_placement (from->loop_father))
216 continue;220 continue;
221 target_loop = loop_outer (from->loop_father);
217 }222 }
218 else223 else
219 {224 {
220 /* Ordinary basic block. */225 /* Ordinary basic block. */
221 if (!fix_bb_placement (from))226 if (!fix_bb_placement (from))
222 continue;227 continue;
228 target_loop = from->loop_father;
223 }229 }
224230
225 FOR_EACH_EDGE (e, ei, from->succs)231 FOR_EACH_EDGE (e, ei, from->succs)
@@ -248,9 +254,12 @@
248 && (nca == base_loop254 && (nca == base_loop
249 || nca != pred->loop_father))255 || nca != pred->loop_father))
250 pred = pred->loop_father->header;256 pred = pred->loop_father->header;
251 else if (!flow_loop_nested_p (from->loop_father, pred->loop_father))257 else if (!flow_loop_nested_p (target_loop, pred->loop_father))
252 {258 {
253 /* No point in processing it. */259 /* If PRED is already higher in the loop hierarchy than the
260 TARGET_LOOP to that we moved FROM, the change of the position
261 of FROM does not affect the position of PRED, so there is no
262 point in processing it. */
254 continue;263 continue;
255 }264 }
256265
257266
=== modified file 'gcc/cgraphunit.c'
--- gcc/cgraphunit.c 2010-06-30 12:17:35 +0000
+++ gcc/cgraphunit.c 2011-04-28 16:44:05 +0000
@@ -553,15 +553,6 @@
553 cgraph_mark_needed_node (node);553 cgraph_mark_needed_node (node);
554}554}
555555
556/* Return TRUE if NODE2 is equivalent to NODE or its clone. */
557static bool
558clone_of_p (struct cgraph_node *node, struct cgraph_node *node2)
559{
560 while (node != node2 && node2)
561 node2 = node2->clone_of;
562 return node2 != NULL;
563}
564
565/* Verify cgraph nodes of given cgraph node. */556/* Verify cgraph nodes of given cgraph node. */
566void557void
567verify_cgraph_node (struct cgraph_node *node)558verify_cgraph_node (struct cgraph_node *node)
@@ -777,16 +768,6 @@
777 debug_tree (e->callee->decl);768 debug_tree (e->callee->decl);
778 error_found = true;769 error_found = true;
779 }770 }
780 else if (!node->global.inlined_to
781 && !e->callee->global.inlined_to
782 && !clone_of_p (cgraph_node (decl), e->callee))
783 {
784 error ("edge points to wrong declaration:");
785 debug_tree (e->callee->decl);
786 fprintf (stderr," Instead of:");
787 debug_tree (decl);
788 error_found = true;
789 }
790 e->aux = (void *)1;771 e->aux = (void *)1;
791 }772 }
792 else773 else
@@ -2259,7 +2240,10 @@
2259 node->next_sibling_clone = NULL;2240 node->next_sibling_clone = NULL;
2260 node->prev_sibling_clone = NULL;2241 node->prev_sibling_clone = NULL;
2261 if (!node->clone_of->analyzed && !node->clone_of->clones)2242 if (!node->clone_of->analyzed && !node->clone_of->clones)
2262 cgraph_remove_node (node->clone_of);2243 {
2244 cgraph_release_function_body (node->clone_of);
2245 cgraph_node_remove_callees (node->clone_of);
2246 }
2263 node->clone_of = NULL;2247 node->clone_of = NULL;
2264 bitmap_obstack_release (NULL);2248 bitmap_obstack_release (NULL);
2265}2249}
@@ -2394,30 +2378,7 @@
2394 if (!node->analyzed && node->callees)2378 if (!node->analyzed && node->callees)
2395 cgraph_node_remove_callees (node);2379 cgraph_node_remove_callees (node);
2396 if (cgraph_dump_file)2380 if (cgraph_dump_file)
2397 fprintf (cgraph_dump_file, "Updating call sites\n");
2398 for (node = cgraph_nodes; node; node = node->next)
2399 if (node->analyzed && !node->clone_of
2400 && gimple_has_body_p (node->decl))
2401 {
2402 struct cgraph_edge *e;
2403
2404 current_function_decl = node->decl;
2405 push_cfun (DECL_STRUCT_FUNCTION (node->decl));
2406 for (e = node->callees; e; e = e->next_callee)
2407 cgraph_redirect_edge_call_stmt_to_callee (e);
2408 pop_cfun ();
2409 current_function_decl = NULL;
2410#ifdef ENABLE_CHECKING
2411 verify_cgraph_node (node);
2412#endif
2413 }
2414 if (cgraph_dump_file)
2415 fprintf (cgraph_dump_file, "Materialization Call site updates done.\n");2381 fprintf (cgraph_dump_file, "Materialization Call site updates done.\n");
2416 /* All changes to parameters have been performed. In order not to
2417 incorrectly repeat them, we simply dispose of the bitmaps that drive the
2418 changes. */
2419 for (node = cgraph_nodes; node; node = node->next)
2420 node->clone.combined_args_to_skip = NULL;
2421#ifdef ENABLE_CHECKING2382#ifdef ENABLE_CHECKING
2422 verify_cgraph ();2383 verify_cgraph ();
2423#endif2384#endif
24242385
=== modified file 'gcc/config/alpha/osf.h'
--- gcc/config/alpha/osf.h 2010-12-03 12:54:16 +0000
+++ gcc/config/alpha/osf.h 2011-04-28 16:44:05 +0000
@@ -1,6 +1,6 @@
1/* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1.1/* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003,2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003,
3 2004, 2007, 2009, 2010 Free Software Foundation, Inc.3 2004, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
4 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)4 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
55
6This file is part of GCC.6This file is part of GCC.
@@ -199,6 +199,10 @@
199#define LD_INIT_SWITCH "-init"199#define LD_INIT_SWITCH "-init"
200#define LD_FINI_SWITCH "-fini"200#define LD_FINI_SWITCH "-fini"
201201
202/* From Tru64 UNIX Object File and Symbol Table Format Specification,
203 2.3.5 Alignment, p.19. */
204#define MAX_OFILE_ALIGNMENT (64 * 1024 * BITS_PER_UNIT)
205
202/* Select a format to encode pointers in exception handling data. CODE206/* Select a format to encode pointers in exception handling data. CODE
203 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is207 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
204 true if the symbol may be affected by dynamic relocations.208 true if the symbol may be affected by dynamic relocations.
205209
=== modified file 'gcc/config/i386/predicates.md'
--- gcc/config/i386/predicates.md 2010-06-21 13:52:07 +0000
+++ gcc/config/i386/predicates.md 2011-04-28 16:44:05 +0000
@@ -990,13 +990,8 @@
990;; Return 1 if OP is a comparison that can be used in the CMPSS/CMPPS insns.990;; Return 1 if OP is a comparison that can be used in the CMPSS/CMPPS insns.
991;; The first set are supported directly; the second set can't be done with991;; The first set are supported directly; the second set can't be done with
992;; full IEEE support, i.e. NaNs.992;; full IEEE support, i.e. NaNs.
993;;
994;; ??? It would seem that we have a lot of uses of this predicate that pass
995;; it the wrong mode. We got away with this because the old function didn't
996;; check the mode at all. Mirror that for now by calling this a special
997;; predicate.
998993
999(define_special_predicate "sse_comparison_operator"994(define_predicate "sse_comparison_operator"
1000 (match_code "eq,lt,le,unordered,ne,unge,ungt,ordered"))995 (match_code "eq,lt,le,unordered,ne,unge,ungt,ordered"))
1001996
1002;; Return 1 if OP is a comparison operator that can be issued by997;; Return 1 if OP is a comparison operator that can be issued by
1003998
=== modified file 'gcc/config/i386/sse.md'
--- gcc/config/i386/sse.md 2011-03-03 21:11:16 +0000
+++ gcc/config/i386/sse.md 2011-04-28 16:44:05 +0000
@@ -1484,7 +1484,7 @@
1484 (set_attr "mode" "<MODE>")])1484 (set_attr "mode" "<MODE>")])
14851485
1486(define_insn "avx_cmps<ssemodesuffixf2c><mode>3"1486(define_insn "avx_cmps<ssemodesuffixf2c><mode>3"
1487 [(set (match_operand:SSEMODEF2P 0 "register_operand" "")1487 [(set (match_operand:SSEMODEF2P 0 "register_operand" "=x")
1488 (vec_merge:SSEMODEF2P1488 (vec_merge:SSEMODEF2P
1489 (unspec:SSEMODEF2P1489 (unspec:SSEMODEF2P
1490 [(match_operand:SSEMODEF2P 1 "register_operand" "x")1490 [(match_operand:SSEMODEF2P 1 "register_operand" "x")
@@ -3934,7 +3934,7 @@
3934(define_insn "*vec_concatv2sf_avx"3934(define_insn "*vec_concatv2sf_avx"
3935 [(set (match_operand:V2SF 0 "register_operand" "=x,x,x,*y ,*y")3935 [(set (match_operand:V2SF 0 "register_operand" "=x,x,x,*y ,*y")
3936 (vec_concat:V2SF3936 (vec_concat:V2SF
3937 (match_operand:SF 1 "nonimmediate_operand" " x,x,m, x , m")3937 (match_operand:SF 1 "nonimmediate_operand" " x,x,m, 0 , m")
3938 (match_operand:SF 2 "vector_move_operand" " x,m,C,*ym, C")))]3938 (match_operand:SF 2 "vector_move_operand" " x,m,C,*ym, C")))]
3939 "TARGET_AVX"3939 "TARGET_AVX"
3940 "@3940 "@
@@ -4023,13 +4023,15 @@
4023 DONE;4023 DONE;
4024})4024})
40254025
4026;; Avoid combining registers from different units in a single alternative,
4027;; see comment above inline_secondary_memory_needed function in i386.c
4026(define_insn "*vec_set<mode>_0_avx"4028(define_insn "*vec_set<mode>_0_avx"
4027 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")4029 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m, m,m")
4028 (vec_merge:SSEMODE4S4030 (vec_merge:SSEMODE4S
4029 (vec_duplicate:SSEMODE4S4031 (vec_duplicate:SSEMODE4S
4030 (match_operand:<ssescalarmode> 24032 (match_operand:<ssescalarmode> 2
4031 "general_operand" " x,m,*r,x,*rm,x*rfF"))4033 "general_operand" " x,m,*r,x,*rm,x,*r,fF"))
4032 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0")4034 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0, 0,0")
4033 (const_int 1)))]4035 (const_int 1)))]
4034 "TARGET_AVX"4036 "TARGET_AVX"
4035 "@4037 "@
@@ -4038,20 +4040,24 @@
4038 vmovd\t{%2, %0|%0, %2}4040 vmovd\t{%2, %0|%0, %2}
4039 vmovss\t{%2, %1, %0|%0, %1, %2}4041 vmovss\t{%2, %1, %0|%0, %1, %2}
4040 vpinsrd\t{$0, %2, %1, %0|%0, %1, %2, 0}4042 vpinsrd\t{$0, %2, %1, %0|%0, %1, %2, 0}
4043 #
4044 #
4041 #"4045 #"
4042 [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")4046 [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*,*")
4043 (set_attr "prefix_extra" "*,*,*,*,1,*")4047 (set_attr "prefix_extra" "*,*,*,*,1,*,*,*")
4044 (set_attr "length_immediate" "*,*,*,*,1,*")4048 (set_attr "length_immediate" "*,*,*,*,1,*,*,*")
4045 (set_attr "prefix" "vex")4049 (set_attr "prefix" "vex")
4046 (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])4050 (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*,*")])
40474051
4052;; Avoid combining registers from different units in a single alternative,
4053;; see comment above inline_secondary_memory_needed function in i386.c
4048(define_insn "*vec_set<mode>_0_sse4_1"4054(define_insn "*vec_set<mode>_0_sse4_1"
4049 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")4055 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x, m,m")
4050 (vec_merge:SSEMODE4S4056 (vec_merge:SSEMODE4S
4051 (vec_duplicate:SSEMODE4S4057 (vec_duplicate:SSEMODE4S
4052 (match_operand:<ssescalarmode> 24058 (match_operand:<ssescalarmode> 2
4053 "general_operand" " x,m,*r,x,*rm,*rfF"))4059 "general_operand" " x,m,*r,x,*rm,*r,fF"))
4054 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0,0")4060 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0, 0,0")
4055 (const_int 1)))]4061 (const_int 1)))]
4056 "TARGET_SSE4_1"4062 "TARGET_SSE4_1"
4057 "@4063 "@
@@ -4060,44 +4066,53 @@
4060 movd\t{%2, %0|%0, %2}4066 movd\t{%2, %0|%0, %2}
4061 movss\t{%2, %0|%0, %2}4067 movss\t{%2, %0|%0, %2}
4062 pinsrd\t{$0, %2, %0|%0, %2, 0}4068 pinsrd\t{$0, %2, %0|%0, %2, 0}
4069 #
4063 #"4070 #"
4064 [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")4071 [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*")
4065 (set_attr "prefix_extra" "*,*,*,*,1,*")4072 (set_attr "prefix_extra" "*,*,*,*,1,*,*")
4066 (set_attr "length_immediate" "*,*,*,*,1,*")4073 (set_attr "length_immediate" "*,*,*,*,1,*,*")
4067 (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])4074 (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*")])
40684075
4076;; Avoid combining registers from different units in a single alternative,
4077;; see comment above inline_secondary_memory_needed function in i386.c
4069(define_insn "*vec_set<mode>_0_sse2"4078(define_insn "*vec_set<mode>_0_sse2"
4070 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m")4079 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m, m,m")
4071 (vec_merge:SSEMODE4S4080 (vec_merge:SSEMODE4S
4072 (vec_duplicate:SSEMODE4S4081 (vec_duplicate:SSEMODE4S
4073 (match_operand:<ssescalarmode> 24082 (match_operand:<ssescalarmode> 2
4074 "general_operand" " m,*r,x,x*rfF"))4083 "general_operand" " m,*r,x,x,*r,fF"))
4075 (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0")4084 (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0, 0,0")
4076 (const_int 1)))]4085 (const_int 1)))]
4077 "TARGET_SSE2"4086 "TARGET_SSE2"
4078 "@4087 "@
4079 mov<ssescalarmodesuffix2s>\t{%2, %0|%0, %2}4088 mov<ssescalarmodesuffix2s>\t{%2, %0|%0, %2}
4080 movd\t{%2, %0|%0, %2}4089 movd\t{%2, %0|%0, %2}
4081 movss\t{%2, %0|%0, %2}4090 movss\t{%2, %0|%0, %2}
4091 #
4092 #
4082 #"4093 #"
4083 [(set_attr "type" "ssemov")4094 [(set_attr "type" "ssemov")
4084 (set_attr "mode" "<ssescalarmode>,SI,SF,*")])4095 (set_attr "mode" "<ssescalarmode>,SI,SF,*,*,*")])
40854096
4097;; Avoid combining registers from different units in a single alternative,
4098;; see comment above inline_secondary_memory_needed function in i386.c
4086(define_insn "vec_set<mode>_0"4099(define_insn "vec_set<mode>_0"
4087 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m")4100 [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m, m,m")
4088 (vec_merge:SSEMODE4S4101 (vec_merge:SSEMODE4S
4089 (vec_duplicate:SSEMODE4S4102 (vec_duplicate:SSEMODE4S
4090 (match_operand:<ssescalarmode> 24103 (match_operand:<ssescalarmode> 2
4091 "general_operand" " m,x,x*rfF"))4104 "general_operand" " m,x,x,*r,fF"))
4092 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0")4105 (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0, 0,0")
4093 (const_int 1)))]4106 (const_int 1)))]
4094 "TARGET_SSE"4107 "TARGET_SSE"
4095 "@4108 "@
4096 movss\t{%2, %0|%0, %2}4109 movss\t{%2, %0|%0, %2}
4097 movss\t{%2, %0|%0, %2}4110 movss\t{%2, %0|%0, %2}
4111 #
4112 #
4098 #"4113 #"
4099 [(set_attr "type" "ssemov")4114 [(set_attr "type" "ssemov")
4100 (set_attr "mode" "SF")])4115 (set_attr "mode" "SF,SF,*,*,*")])
41014116
4102;; A subset is vec_setv4sf.4117;; A subset is vec_setv4sf.
4103(define_insn "*vec_setv4sf_avx"4118(define_insn "*vec_setv4sf_avx"
@@ -4143,7 +4158,16 @@
4143 (match_operand:SI 3 "const_0_to_255_operand" "n")]4158 (match_operand:SI 3 "const_0_to_255_operand" "n")]
4144 UNSPEC_INSERTPS))]4159 UNSPEC_INSERTPS))]
4145 "TARGET_AVX"4160 "TARGET_AVX"
4146 "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";4161{
4162 if (MEM_P (operands[2]))
4163 {
4164 unsigned count_s = INTVAL (operands[3]) >> 6;
4165 if (count_s)
4166 operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
4167 operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
4168 }
4169 return "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
4170}
4147 [(set_attr "type" "sselog")4171 [(set_attr "type" "sselog")
4148 (set_attr "prefix" "vex")4172 (set_attr "prefix" "vex")
4149 (set_attr "prefix_extra" "1")4173 (set_attr "prefix_extra" "1")
@@ -4152,12 +4176,21 @@
41524176
4153(define_insn "sse4_1_insertps"4177(define_insn "sse4_1_insertps"
4154 [(set (match_operand:V4SF 0 "register_operand" "=x")4178 [(set (match_operand:V4SF 0 "register_operand" "=x")
4155 (unspec:V4SF [(match_operand:V4SF 2 "register_operand" "x")4179 (unspec:V4SF [(match_operand:V4SF 2 "nonimmediate_operand" "xm")
4156 (match_operand:V4SF 1 "register_operand" "0")4180 (match_operand:V4SF 1 "register_operand" "0")
4157 (match_operand:SI 3 "const_0_to_255_operand" "n")]4181 (match_operand:SI 3 "const_0_to_255_operand" "n")]
4158 UNSPEC_INSERTPS))]4182 UNSPEC_INSERTPS))]
4159 "TARGET_SSE4_1"4183 "TARGET_SSE4_1"
4160 "insertps\t{%3, %2, %0|%0, %2, %3}";4184{
4185 if (MEM_P (operands[2]))
4186 {
4187 unsigned count_s = INTVAL (operands[3]) >> 6;
4188 if (count_s)
4189 operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
4190 operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
4191 }
4192 return "insertps\t{%3, %2, %0|%0, %2, %3}";
4193}
4161 [(set_attr "type" "sselog")4194 [(set_attr "type" "sselog")
4162 (set_attr "prefix_data16" "1")4195 (set_attr "prefix_data16" "1")
4163 (set_attr "prefix_extra" "1")4196 (set_attr "prefix_extra" "1")
@@ -4823,6 +4856,8 @@
4823 (set_attr "prefix" "vex")4856 (set_attr "prefix" "vex")
4824 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])4857 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
48254858
4859;; Avoid combining registers from different units in a single alternative,
4860;; see comment above inline_secondary_memory_needed function in i386.c
4826(define_insn "sse2_storehpd"4861(define_insn "sse2_storehpd"
4827 [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x,*f,r")4862 [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x,*f,r")
4828 (vec_select:DF4863 (vec_select:DF
@@ -4926,6 +4961,8 @@
4926 (set_attr "prefix" "vex")4961 (set_attr "prefix" "vex")
4927 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])4962 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
49284963
4964;; Avoid combining registers from different units in a single alternative,
4965;; see comment above inline_secondary_memory_needed function in i386.c
4929(define_insn "sse2_loadhpd"4966(define_insn "sse2_loadhpd"
4930 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")4967 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")
4931 (vec_concat:V2DF4968 (vec_concat:V2DF
@@ -4999,6 +5036,8 @@
4999 (set_attr "prefix" "vex")5036 (set_attr "prefix" "vex")
5000 (set_attr "mode" "DF,V1DF,V1DF,V1DF,DF,DF,DF")])5037 (set_attr "mode" "DF,V1DF,V1DF,V1DF,DF,DF,DF")])
50015038
5039;; Avoid combining registers from different units in a single alternative,
5040;; see comment above inline_secondary_memory_needed function in i386.c
5002(define_insn "sse2_loadlpd"5041(define_insn "sse2_loadlpd"
5003 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,x,m,m,m")5042 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,x,m,m,m")
5004 (vec_concat:V2DF5043 (vec_concat:V2DF
50055044
=== modified file 'gcc/config/pa/pa.c'
--- gcc/config/pa/pa.c 2010-12-19 19:50:17 +0000
+++ gcc/config/pa/pa.c 2011-04-28 16:44:05 +0000
@@ -1635,15 +1635,12 @@
1635 return 1;1635 return 1;
1636 }1636 }
1637 /* Handle secondary reloads for SAR. These occur when trying to load1637 /* Handle secondary reloads for SAR. These occur when trying to load
1638 the SAR from memory, FP register, or with a constant. */1638 the SAR from memory or a constant. */
1639 else if (scratch_reg1639 else if (scratch_reg
1640 && GET_CODE (operand0) == REG1640 && GET_CODE (operand0) == REG
1641 && REGNO (operand0) < FIRST_PSEUDO_REGISTER1641 && REGNO (operand0) < FIRST_PSEUDO_REGISTER
1642 && REGNO_REG_CLASS (REGNO (operand0)) == SHIFT_REGS1642 && REGNO_REG_CLASS (REGNO (operand0)) == SHIFT_REGS
1643 && (GET_CODE (operand1) == MEM1643 && (GET_CODE (operand1) == MEM || GET_CODE (operand1) == CONST_INT))
1644 || GET_CODE (operand1) == CONST_INT
1645 || (GET_CODE (operand1) == REG
1646 && FP_REG_CLASS_P (REGNO_REG_CLASS (REGNO (operand1))))))
1647 {1644 {
1648 /* D might not fit in 14 bits either; for such cases load D into1645 /* D might not fit in 14 bits either; for such cases load D into
1649 scratch reg. */1646 scratch reg. */
@@ -5697,6 +5694,10 @@
5697 fputc ('\n', asm_out_file);5694 fputc ('\n', asm_out_file);
5698}5695}
56995696
57005697
5698/* Inform reload about cases where moving X with a mode MODE to a register in
5699 RCLASS requires an extra scratch or immediate register. Return the class
5700 needed for the immediate register. */
5701
5701static enum reg_class5702static enum reg_class
5702pa_secondary_reload (bool in_p, rtx x, enum reg_class rclass,5703pa_secondary_reload (bool in_p, rtx x, enum reg_class rclass,
5703 enum machine_mode mode, secondary_reload_info *sri)5704 enum machine_mode mode, secondary_reload_info *sri)
@@ -5796,20 +5797,27 @@
5796 return NO_REGS;5797 return NO_REGS;
5797 }5798 }
57985799
5799 /* We need a secondary register (GPR) for copies between the SAR5800 /* A SAR<->FP register copy requires an intermediate general register
5800 and anything other than a general register. */5801 and secondary memory. We need a secondary reload with a general
5801 if (rclass == SHIFT_REGS && (regno <= 0 || regno >= 32))5802 scratch register for spills. */
5803 if (rclass == SHIFT_REGS)
5802 {5804 {
5803 sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];5805 /* Handle spill. */
5804 return NO_REGS;5806 if (regno >= FIRST_PSEUDO_REGISTER || regno < 0)
5807 {
5808 sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];
5809 return NO_REGS;
5810 }
5811
5812 /* Handle FP copy. */
5813 if (FP_REG_CLASS_P (REGNO_REG_CLASS (regno)))
5814 return GENERAL_REGS;
5805 }5815 }
58065816
5807 /* A SAR<->FP register copy requires a secondary register (GPR) as
5808 well as secondary memory. */
5809 if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER5817 if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
5810 && (REGNO_REG_CLASS (regno) == SHIFT_REGS5818 && REGNO_REG_CLASS (regno) == SHIFT_REGS
5811 && FP_REG_CLASS_P (rclass)))5819 && FP_REG_CLASS_P (rclass))
5812 sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];5820 return GENERAL_REGS;
58135821
5814 return NO_REGS;5822 return NO_REGS;
5815}5823}
58165824
=== modified file 'gcc/config/pa/pa.h'
--- gcc/config/pa/pa.h 2010-08-08 18:55:40 +0000
+++ gcc/config/pa/pa.h 2011-04-28 16:44:05 +0000
@@ -1360,6 +1360,7 @@
1360 Other copies are reasonably cheap. */1360 Other copies are reasonably cheap. */
1361#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \1361#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
1362 (CLASS1 == SHIFT_REGS ? 0x100 \1362 (CLASS1 == SHIFT_REGS ? 0x100 \
1363 : CLASS2 == SHIFT_REGS && FP_REG_CLASS_P (CLASS1) ? 18 \
1363 : FP_REG_CLASS_P (CLASS1) && ! FP_REG_CLASS_P (CLASS2) ? 16 \1364 : FP_REG_CLASS_P (CLASS1) && ! FP_REG_CLASS_P (CLASS2) ? 16 \
1364 : FP_REG_CLASS_P (CLASS2) && ! FP_REG_CLASS_P (CLASS1) ? 16 \1365 : FP_REG_CLASS_P (CLASS2) && ! FP_REG_CLASS_P (CLASS1) ? 16 \
1365 : 2)1366 : 2)
13661367
=== modified file 'gcc/config/pa/pa32-regs.h'
--- gcc/config/pa/pa32-regs.h 2009-04-21 18:03:23 +0000
+++ gcc/config/pa/pa32-regs.h 2011-04-28 16:44:05 +0000
@@ -226,6 +226,7 @@
226 registers. */226 registers. */
227#define HARD_REGNO_MODE_OK(REGNO, MODE) \227#define HARD_REGNO_MODE_OK(REGNO, MODE) \
228 ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \228 ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \
229 : (REGNO) == 88 ? SCALAR_INT_MODE_P (MODE) \
229 : !TARGET_PA_11 && FP_REGNO_P (REGNO) \230 : !TARGET_PA_11 && FP_REGNO_P (REGNO) \
230 ? (VALID_FP_MODE_P (MODE) \231 ? (VALID_FP_MODE_P (MODE) \
231 && (GET_MODE_SIZE (MODE) <= 8 \232 && (GET_MODE_SIZE (MODE) <= 8 \
232233
=== modified file 'gcc/config/pa/pa64-regs.h'
--- gcc/config/pa/pa64-regs.h 2009-02-20 15:20:38 +0000
+++ gcc/config/pa/pa64-regs.h 2011-04-28 16:44:05 +0000
@@ -161,10 +161,11 @@
161161
162/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.162/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
163 On the HP-PA, the cpu registers can hold any mode. We163 On the HP-PA, the cpu registers can hold any mode. We
164 force this to be an even register is it cannot hold the full mode. */164 force this to be an even register if it cannot hold the full mode. */
165#define HARD_REGNO_MODE_OK(REGNO, MODE) \165#define HARD_REGNO_MODE_OK(REGNO, MODE) \
166 ((REGNO) == 0 \166 ((REGNO) == 0 \
167 ? (MODE) == CCmode || (MODE) == CCFPmode \167 ? (MODE) == CCmode || (MODE) == CCFPmode \
168 : (REGNO) == 60 ? SCALAR_INT_MODE_P (MODE) \
168 /* Make wide modes be in aligned registers. */ \169 /* Make wide modes be in aligned registers. */ \
169 : FP_REGNO_P (REGNO) \170 : FP_REGNO_P (REGNO) \
170 ? (VALID_FP_MODE_P (MODE) \171 ? (VALID_FP_MODE_P (MODE) \
171172
=== modified file 'gcc/config/rx/rx.md'
--- gcc/config/rx/rx.md 2011-03-16 11:47:59 +0000
+++ gcc/config/rx/rx.md 2011-04-28 16:44:05 +0000
@@ -2031,6 +2031,14 @@
2031 rtx addr2 = gen_rtx_REG (SImode, 2);2031 rtx addr2 = gen_rtx_REG (SImode, 2);
2032 rtx len = gen_rtx_REG (SImode, 3);2032 rtx len = gen_rtx_REG (SImode, 3);
20332033
2034 /* Do not use when the source or destination are volatile - the SMOVF
2035 instruction will read and write in word sized blocks, which may be
2036 outside of the valid address range. */
2037 if (MEM_P (operands[0]) && MEM_VOLATILE_P (operands[0]))
2038 FAIL;
2039 if (MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1]))
2040 FAIL;
2041
2034 if (REG_P (operands[0]) && (REGNO (operands[0]) == 22042 if (REG_P (operands[0]) && (REGNO (operands[0]) == 2
2035 || REGNO (operands[0]) == 3))2043 || REGNO (operands[0]) == 3))
2036 FAIL;2044 FAIL;
@@ -2040,6 +2048,7 @@
2040 if (REG_P (operands[2]) && (REGNO (operands[2]) == 12048 if (REG_P (operands[2]) && (REGNO (operands[2]) == 1
2041 || REGNO (operands[2]) == 2))2049 || REGNO (operands[2]) == 2))
2042 FAIL;2050 FAIL;
2051
2043 emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX));2052 emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX));
2044 emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX));2053 emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX));
2045 emit_move_insn (len, force_operand (operands[2], NULL_RTX));2054 emit_move_insn (len, force_operand (operands[2], NULL_RTX));
20462055
=== modified file 'gcc/cp/ChangeLog'
--- gcc/cp/ChangeLog 2011-03-28 15:06:28 +0000
+++ gcc/cp/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,50 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
52011-04-26 Dodji Seketeli <dodji@redhat.com>
6
7 PR c++/46824
8 * call.c (add_builtin_candidate)<case INDIRECT_REF>: The type of
9 the argument of the indirection operator should not be dependent.
10 Fix the comment.
11
122011-04-26 Jason Merrill <jason@redhat.com>
13
14 PR c++/42687
15 * parser.c (cp_parser_primary_expression): Set *idk to
16 CP_ID_KIND_NONE for a parenthesized identifier.
17
182011-04-20 Jason Merrill <jason@redhat.com>
19
20 PR c++/48594
21 * decl2.c (build_offset_ref_call_from_tree): Fix calling a functor
22 or pointer to (non-member) function.
23
242011-04-19 Jason Merrill <jason@redhat.com>
25
26 PR c++/46304
27 * typeck.c (cp_build_binary_op): Fold COMPLEX_EXPR.
28
292011-04-19 Jason Merrill <jason@redhat.com>
30
31 PR c++/45267
32 * decl.c (duplicate_decls): Keep always_inline attribute
33 in sync with DECL_DISREGARD_INLINE_LIMITS.
34
352011-04-18 Richard Guenther <rguenther@suse.de>
36
37 Backported from 4.6 branch
38 2011-03-11 Jakub Jelinek <jakub@redhat.com>
39
40 PR c++/48035
41 * init.c (build_zero_init_1): Extracted from build_zero_init.
42 Add FIELD_SIZE argument, if non-NULL and field bit_position
43 as not smaller than that, don't add that field's initializer.
44 Pass DECL_SIZE as last argument to build_zero_init_1
45 for DECL_FIELD_IS_BASE fields.
46 (build_zero_init): Use build_zero_init_1.
47
12011-03-28 Jason Merrill <jason@redhat.com>482011-03-28 Jason Merrill <jason@redhat.com>
249
3 Revert:50 Revert:
451
=== modified file 'gcc/cp/call.c'
--- gcc/cp/call.c 2010-09-07 15:47:57 +0000
+++ gcc/cp/call.c 2011-04-28 16:44:05 +0000
@@ -1023,7 +1023,7 @@
1023 if (!expr)1023 if (!expr)
1024 return NULL;1024 return NULL;
10251025
1026 conversions = lookup_conversions (s, /*lookup_template_convs_p=*/true);1026 conversions = lookup_conversions (s);
1027 if (!conversions)1027 if (!conversions)
1028 return NULL;1028 return NULL;
10291029
@@ -1925,7 +1925,7 @@
1925 }1925 }
1926 return;1926 return;
19271927
1928/* 7 For every cv-qualified or cv-unqualified complete object type T, there1928/* 7 For every cv-qualified or cv-unqualified object type T, there
1929 exist candidate operator functions of the form1929 exist candidate operator functions of the form
19301930
1931 T& operator*(T*);1931 T& operator*(T*);
@@ -1936,6 +1936,7 @@
19361936
1937 case INDIRECT_REF:1937 case INDIRECT_REF:
1938 if (TREE_CODE (type1) == POINTER_TYPE1938 if (TREE_CODE (type1) == POINTER_TYPE
1939 && !uses_template_parms (TREE_TYPE (type1))
1939 && (TYPE_PTROB_P (type1)1940 && (TYPE_PTROB_P (type1)
1940 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))1941 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1941 break;1942 break;
@@ -2376,8 +2377,7 @@
2376 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)2377 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2377 return;2378 return;
23782379
2379 convs = lookup_conversions (argtypes[i],2380 convs = lookup_conversions (argtypes[i]);
2380 /*lookup_template_convs_p=*/false);
23812381
2382 if (code == COND_EXPR)2382 if (code == COND_EXPR)
2383 {2383 {
@@ -2867,8 +2867,7 @@
2867 reference to it)... */2867 reference to it)... */
2868 }2868 }
2869 else2869 else
2870 conv_fns = lookup_conversions (fromtype,2870 conv_fns = lookup_conversions (fromtype);
2871 /*lookup_template_convs_p=*/true);
2872 }2871 }
28732872
2874 candidates = 0;2873 candidates = 0;
@@ -3402,7 +3401,7 @@
3402 }3401 }
3403 }3402 }
34043403
3405 convs = lookup_conversions (type, /*lookup_template_convs_p=*/true);3404 convs = lookup_conversions (type);
34063405
3407 for (; convs; convs = TREE_CHAIN (convs))3406 for (; convs; convs = TREE_CHAIN (convs))
3408 {3407 {
34093408
=== modified file 'gcc/cp/cp-tree.h'
--- gcc/cp/cp-tree.h 2010-04-27 22:03:06 +0000
+++ gcc/cp/cp-tree.h 2011-04-28 16:44:05 +0000
@@ -5026,7 +5026,7 @@
5026extern bool at_class_scope_p (void);5026extern bool at_class_scope_p (void);
5027extern bool at_namespace_scope_p (void);5027extern bool at_namespace_scope_p (void);
5028extern tree context_for_name_lookup (tree);5028extern tree context_for_name_lookup (tree);
5029extern tree lookup_conversions (tree, bool);5029extern tree lookup_conversions (tree);
5030extern tree binfo_from_vbase (tree);5030extern tree binfo_from_vbase (tree);
5031extern tree binfo_for_vbase (tree, tree);5031extern tree binfo_for_vbase (tree, tree);
5032extern tree look_for_overrides_here (tree, tree);5032extern tree look_for_overrides_here (tree, tree);
50335033
=== modified file 'gcc/cp/cvt.c'
--- gcc/cp/cvt.c 2010-02-20 21:32:06 +0000
+++ gcc/cp/cvt.c 2011-04-28 16:44:05 +0000
@@ -1199,9 +1199,7 @@
1199 if (!TYPE_HAS_CONVERSION (basetype))1199 if (!TYPE_HAS_CONVERSION (basetype))
1200 return NULL_TREE;1200 return NULL_TREE;
12011201
1202 for (conv = lookup_conversions (basetype, /*lookup_template_convs_p=*/true);1202 for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
1203 conv;
1204 conv = TREE_CHAIN (conv))
1205 {1203 {
1206 int win = 0;1204 int win = 0;
1207 tree candidate;1205 tree candidate;
12081206
=== modified file 'gcc/cp/decl.c'
--- gcc/cp/decl.c 2011-04-06 12:29:08 +0000
+++ gcc/cp/decl.c 2011-04-28 16:44:05 +0000
@@ -1975,6 +1975,19 @@
19751975
1976 /* [temp.expl.spec/14] We don't inline explicit specialization1976 /* [temp.expl.spec/14] We don't inline explicit specialization
1977 just because the primary template says so. */1977 just because the primary template says so. */
1978
1979 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
1980 the always_inline attribute. */
1981 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
1982 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
1983 {
1984 if (DECL_DECLARED_INLINE_P (newdecl))
1985 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
1986 else
1987 DECL_ATTRIBUTES (newdecl)
1988 = remove_attribute ("always_inline",
1989 DECL_ATTRIBUTES (newdecl));
1990 }
1978 }1991 }
1979 else if (new_defines_function && DECL_INITIAL (olddecl))1992 else if (new_defines_function && DECL_INITIAL (olddecl))
1980 {1993 {
19811994
=== modified file 'gcc/cp/decl2.c'
--- gcc/cp/decl2.c 2010-03-23 22:29:53 +0000
+++ gcc/cp/decl2.c 2011-04-28 16:44:05 +0000
@@ -3911,9 +3911,12 @@
3911 because we depend on the form of FN. */3911 because we depend on the form of FN. */
3912 make_args_non_dependent (*args);3912 make_args_non_dependent (*args);
3913 object = build_non_dependent_expr (object);3913 object = build_non_dependent_expr (object);
3914 if (TREE_CODE (fn) == DOTSTAR_EXPR)3914 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
3915 object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);3915 {
3916 VEC_safe_insert (tree, gc, *args, 0, object);3916 if (TREE_CODE (fn) == DOTSTAR_EXPR)
3917 object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);
3918 VEC_safe_insert (tree, gc, *args, 0, object);
3919 }
3917 /* Now that the arguments are done, transform FN. */3920 /* Now that the arguments are done, transform FN. */
3918 fn = build_non_dependent_expr (fn);3921 fn = build_non_dependent_expr (fn);
3919 }3922 }
@@ -3933,7 +3936,10 @@
3933 VEC_safe_insert (tree, gc, *args, 0, object_addr);3936 VEC_safe_insert (tree, gc, *args, 0, object_addr);
3934 }3937 }
39353938
3936 expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);3939 if (CLASS_TYPE_P (TREE_TYPE (fn)))
3940 expr = build_op_call (fn, args, tf_warning_or_error);
3941 else
3942 expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
3937 if (processing_template_decl && expr != error_mark_node)3943 if (processing_template_decl && expr != error_mark_node)
3938 expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);3944 expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
39393945
39403946
=== modified file 'gcc/cp/init.c'
--- gcc/cp/init.c 2010-08-23 06:39:42 +0000
+++ gcc/cp/init.c 2011-04-28 16:44:05 +0000
@@ -143,10 +143,13 @@
143 is the number of elements in the array. If STATIC_STORAGE_P is143 is the number of elements in the array. If STATIC_STORAGE_P is
144 TRUE, initializers are only generated for entities for which144 TRUE, initializers are only generated for entities for which
145 zero-initialization does not simply mean filling the storage with145 zero-initialization does not simply mean filling the storage with
146 zero bytes. */146 zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
147 subfields with bit positions at or above that bit size shouldn't
148 be added. */
147149
148tree150static tree
149build_zero_init (tree type, tree nelts, bool static_storage_p)151build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
152 tree field_size)
150{153{
151 tree init = NULL_TREE;154 tree init = NULL_TREE;
152155
@@ -191,15 +194,32 @@
191 if (TREE_CODE (field) != FIELD_DECL)194 if (TREE_CODE (field) != FIELD_DECL)
192 continue;195 continue;
193196
197 /* Don't add virtual bases for base classes if they are beyond
198 the size of the current field, that means it is present
199 somewhere else in the object. */
200 if (field_size)
201 {
202 tree bitpos = bit_position (field);
203 if (TREE_CODE (bitpos) == INTEGER_CST
204 && !tree_int_cst_lt (bitpos, field_size))
205 continue;
206 }
207
194 /* Note that for class types there will be FIELD_DECLs208 /* Note that for class types there will be FIELD_DECLs
195 corresponding to base classes as well. Thus, iterating209 corresponding to base classes as well. Thus, iterating
196 over TYPE_FIELDs will result in correct initialization of210 over TYPE_FIELDs will result in correct initialization of
197 all of the subobjects. */211 all of the subobjects. */
198 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))212 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
199 {213 {
200 tree value = build_zero_init (TREE_TYPE (field),214 tree new_field_size
201 /*nelts=*/NULL_TREE,215 = (DECL_FIELD_IS_BASE (field)
202 static_storage_p);216 && DECL_SIZE (field)
217 && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
218 ? DECL_SIZE (field) : NULL_TREE;
219 tree value = build_zero_init_1 (TREE_TYPE (field),
220 /*nelts=*/NULL_TREE,
221 static_storage_p,
222 new_field_size);
203 if (value)223 if (value)
204 CONSTRUCTOR_APPEND_ELT(v, field, value);224 CONSTRUCTOR_APPEND_ELT(v, field, value);
205 }225 }
@@ -247,9 +267,9 @@
247 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,267 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
248 max_index);268 max_index);
249269
250 ce->value = build_zero_init (TREE_TYPE (type),270 ce->value = build_zero_init_1 (TREE_TYPE (type),
251 /*nelts=*/NULL_TREE,271 /*nelts=*/NULL_TREE,
252 static_storage_p);272 static_storage_p, NULL_TREE);
253 }273 }
254274
255 /* Build a constructor to contain the initializations. */275 /* Build a constructor to contain the initializations. */
@@ -267,6 +287,24 @@
267 return init;287 return init;
268}288}
269289
290/* Return an expression for the zero-initialization of an object with
291 type T. This expression will either be a constant (in the case
292 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
293 aggregate), or NULL (in the case that T does not require
294 initialization). In either case, the value can be used as
295 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
296 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
297 is the number of elements in the array. If STATIC_STORAGE_P is
298 TRUE, initializers are only generated for entities for which
299 zero-initialization does not simply mean filling the storage with
300 zero bytes. */
301
302tree
303build_zero_init (tree type, tree nelts, bool static_storage_p)
304{
305 return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE);
306}
307
270/* Return a suitable initializer for value-initializing an object of type308/* Return a suitable initializer for value-initializing an object of type
271 TYPE, as described in [dcl.init]. */309 TYPE, as described in [dcl.init]. */
272310
273311
=== modified file 'gcc/cp/parser.c'
--- gcc/cp/parser.c 2011-03-02 18:46:01 +0000
+++ gcc/cp/parser.c 2011-04-28 16:44:05 +0000
@@ -3325,6 +3325,12 @@
3325 `&A::B' might be a pointer-to-member, but `&(A::B)' is3325 `&A::B' might be a pointer-to-member, but `&(A::B)' is
3326 not. */3326 not. */
3327 finish_parenthesized_expr (expr);3327 finish_parenthesized_expr (expr);
3328 /* DR 705: Wrapping an unqualified name in parentheses
3329 suppresses arg-dependent lookup. We want to pass back
3330 CP_ID_KIND_QUALIFIED for suppressing vtable lookup
3331 (c++/37862), but none of the others. */
3332 if (*idk != CP_ID_KIND_QUALIFIED)
3333 *idk = CP_ID_KIND_NONE;
3328 }3334 }
3329 /* The `>' token might be the end of a template-id or3335 /* The `>' token might be the end of a template-id or
3330 template-parameter-list now. */3336 template-parameter-list now. */
33313337
=== modified file 'gcc/cp/search.c'
--- gcc/cp/search.c 2010-02-10 07:37:37 +0000
+++ gcc/cp/search.c 2011-04-28 16:44:05 +0000
@@ -2420,13 +2420,10 @@
2420 functions in this node were selected. This function is effectively2420 functions in this node were selected. This function is effectively
2421 performing a set of member lookups as lookup_fnfield does, but2421 performing a set of member lookups as lookup_fnfield does, but
2422 using the type being converted to as the unique key, rather than the2422 using the type being converted to as the unique key, rather than the
2423 field name.2423 field name. */
2424 If LOOKUP_TEMPLATE_CONVS_P is TRUE, the returned TREE_LIST contains
2425 the non-hidden user-defined template conversion functions too. */
24262424
2427tree2425tree
2428lookup_conversions (tree type,2426lookup_conversions (tree type)
2429 bool lookup_template_convs_p)
2430{2427{
2431 tree convs, tpl_convs;2428 tree convs, tpl_convs;
2432 tree list = NULL_TREE;2429 tree list = NULL_TREE;
@@ -2453,9 +2450,6 @@
2453 }2450 }
2454 }2451 }
24552452
2456 if (lookup_template_convs_p == false)
2457 tpl_convs = NULL_TREE;
2458
2459 for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs))2453 for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs))
2460 {2454 {
2461 tree probe, next;2455 tree probe, next;
24622456
=== modified file 'gcc/cp/typeck.c'
--- gcc/cp/typeck.c 2010-10-04 00:50:43 +0000
+++ gcc/cp/typeck.c 2011-04-28 16:44:05 +0000
@@ -4336,7 +4336,11 @@
4336 gcc_unreachable();4336 gcc_unreachable();
4337 }4337 }
4338 }4338 }
4339 return build2 (COMPLEX_EXPR, result_type, real, imag);4339 real = fold_if_not_in_template (real);
4340 imag = fold_if_not_in_template (imag);
4341 result = build2 (COMPLEX_EXPR, result_type, real, imag);
4342 result = fold_if_not_in_template (result);
4343 return result;
4340 }4344 }
43414345
4342 /* For certain operations (which identify themselves by shorten != 0)4346 /* For certain operations (which identify themselves by shorten != 0)
43434347
=== modified file 'gcc/doc/sourcebuild.texi'
--- gcc/doc/sourcebuild.texi 2011-01-06 11:02:44 +0000
+++ gcc/doc/sourcebuild.texi 2011-04-28 16:44:05 +0000
@@ -1,4 +1,4 @@
1@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 20101@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
2@c Free Software Foundation, Inc.2@c Free Software Foundation, Inc.
3@c This is part of the GCC manual.3@c This is part of the GCC manual.
4@c For copying conditions, see the file gcc.texi.4@c For copying conditions, see the file gcc.texi.
@@ -1941,6 +1941,9 @@
1941@item dg-require-alias ""1941@item dg-require-alias ""
1942Skip the test if the target does not support the @samp{alias} attribute.1942Skip the test if the target does not support the @samp{alias} attribute.
19431943
1944@item dg-require-ascii-locale ""
1945Skip the test if the host does not support an ASCII locale.
1946
1944@item dg-require-compat-dfp ""1947@item dg-require-compat-dfp ""
1945Skip this test unless both compilers in a @file{compat} testsuite1948Skip this test unless both compilers in a @file{compat} testsuite
1946support decimal floating point.1949support decimal floating point.
19471950
=== modified file 'gcc/dse.c'
--- gcc/dse.c 2010-03-16 10:50:42 +0000
+++ gcc/dse.c 2011-04-28 16:44:05 +0000
@@ -1592,8 +1592,7 @@
15921592
1593 /* An insn can be deleted if every position of every one of1593 /* An insn can be deleted if every position of every one of
1594 its s_infos is zero. */1594 its s_infos is zero. */
1595 if (any_positions_needed_p (s_info)1595 if (any_positions_needed_p (s_info))
1596 || ptr->cannot_delete)
1597 del = false;1596 del = false;
15981597
1599 if (del)1598 if (del)
@@ -1605,7 +1604,8 @@
1605 else1604 else
1606 active_local_stores = ptr->next_local_store;1605 active_local_stores = ptr->next_local_store;
16071606
1608 delete_dead_store_insn (insn_to_delete);1607 if (!insn_to_delete->cannot_delete)
1608 delete_dead_store_insn (insn_to_delete);
1609 }1609 }
1610 else1610 else
1611 last = ptr;1611 last = ptr;
16121612
=== modified file 'gcc/dwarf2out.c'
--- gcc/dwarf2out.c 2011-03-28 09:43:50 +0000
+++ gcc/dwarf2out.c 2011-04-28 16:44:05 +0000
@@ -6188,7 +6188,7 @@
6188static void gen_type_die (tree, dw_die_ref);6188static void gen_type_die (tree, dw_die_ref);
6189static void gen_block_die (tree, dw_die_ref, int);6189static void gen_block_die (tree, dw_die_ref, int);
6190static void decls_for_scope (tree, dw_die_ref, int);6190static void decls_for_scope (tree, dw_die_ref, int);
6191static int is_redundant_typedef (const_tree);6191static inline int is_redundant_typedef (const_tree);
6192static inline dw_die_ref get_context_die (tree);6192static inline dw_die_ref get_context_die (tree);
6193static void gen_namespace_die (tree, dw_die_ref);6193static void gen_namespace_die (tree, dw_die_ref);
6194static void gen_decl_die (tree, tree, dw_die_ref);6194static void gen_decl_die (tree, tree, dw_die_ref);
@@ -12824,7 +12824,7 @@
12824 int base_reg12824 int base_reg
12825 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)12825 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12826 ? HARD_FRAME_POINTER_REGNUM12826 ? HARD_FRAME_POINTER_REGNUM
12827 : STACK_POINTER_REGNUM);12827 : REGNO (elim));
12828 return new_reg_loc_descr (base_reg, offset);12828 return new_reg_loc_descr (base_reg, offset);
12829 }12829 }
1283012830
1283112831
=== modified file 'gcc/fold-const.c'
--- gcc/fold-const.c 2010-11-26 12:03:32 +0000
+++ gcc/fold-const.c 2011-04-28 16:44:05 +0000
@@ -16165,12 +16165,17 @@
16165 }16165 }
16166 /* *(foo *)&fooarray => fooarray[0] */16166 /* *(foo *)&fooarray => fooarray[0] */
16167 else if (TREE_CODE (optype) == ARRAY_TYPE16167 else if (TREE_CODE (optype) == ARRAY_TYPE
16168 && type == TREE_TYPE (optype))16168 && type == TREE_TYPE (optype)
16169 && (!in_gimple_form
16170 || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
16169 {16171 {
16170 tree type_domain = TYPE_DOMAIN (optype);16172 tree type_domain = TYPE_DOMAIN (optype);
16171 tree min_val = size_zero_node;16173 tree min_val = size_zero_node;
16172 if (type_domain && TYPE_MIN_VALUE (type_domain))16174 if (type_domain && TYPE_MIN_VALUE (type_domain))
16173 min_val = TYPE_MIN_VALUE (type_domain);16175 min_val = TYPE_MIN_VALUE (type_domain);
16176 if (in_gimple_form
16177 && TREE_CODE (min_val) != INTEGER_CST)
16178 return NULL_TREE;
16174 op0 = build4 (ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE);16179 op0 = build4 (ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE);
16175 SET_EXPR_LOCATION (op0, loc);16180 SET_EXPR_LOCATION (op0, loc);
16176 return op0;16181 return op0;
@@ -16241,7 +16246,9 @@
1624116246
16242 /* *(foo *)fooarrptr => (*fooarrptr)[0] */16247 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
16243 if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE16248 if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
16244 && type == TREE_TYPE (TREE_TYPE (subtype)))16249 && type == TREE_TYPE (TREE_TYPE (subtype))
16250 && (!in_gimple_form
16251 || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
16245 {16252 {
16246 tree type_domain;16253 tree type_domain;
16247 tree min_val = size_zero_node;16254 tree min_val = size_zero_node;
@@ -16249,6 +16256,9 @@
16249 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));16256 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
16250 if (type_domain && TYPE_MIN_VALUE (type_domain))16257 if (type_domain && TYPE_MIN_VALUE (type_domain))
16251 min_val = TYPE_MIN_VALUE (type_domain);16258 min_val = TYPE_MIN_VALUE (type_domain);
16259 if (in_gimple_form
16260 && TREE_CODE (min_val) != INTEGER_CST)
16261 return NULL_TREE;
16252 op0 = build4 (ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE);16262 op0 = build4 (ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE);
16253 SET_EXPR_LOCATION (op0, loc);16263 SET_EXPR_LOCATION (op0, loc);
16254 return op0;16264 return op0;
1625516265
=== modified file 'gcc/fortran/ChangeLog'
--- gcc/fortran/ChangeLog 2011-04-05 10:59:38 +0000
+++ gcc/fortran/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-04-05 Duncan Sands <baldrick@free.fr>52011-04-05 Duncan Sands <baldrick@free.fr>
26
3 * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter7 * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter
48
=== modified file 'gcc/gcov-io.c'
--- gcc/gcov-io.c 2009-11-25 10:55:54 +0000
+++ gcc/gcov-io.c 2011-04-28 16:44:05 +0000
@@ -16,8 +16,13 @@
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.17for more details.
1818
19You should have received a copy of the GNU General Public License19Under Section 7 of GPL version 3, you are granted additional
20along with GCC; see the file COPYING3. If not see20permissions described in the GCC Runtime Library Exception, version
213.1, as published by the Free Software Foundation.
22
23You should have received a copy of the GNU General Public License and
24a copy of the GCC Runtime Library Exception along with this program;
25see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
21<http://www.gnu.org/licenses/>. */26<http://www.gnu.org/licenses/>. */
2227
23/* Routines declared in gcov-io.h. This file should be #included by28/* Routines declared in gcov-io.h. This file should be #included by
2429
=== modified file 'gcc/gimplify.c'
--- gcc/gimplify.c 2010-11-11 20:36:49 +0000
+++ gcc/gimplify.c 2011-04-28 16:44:05 +0000
@@ -5438,7 +5438,8 @@
5438 For local variables TYPE_SIZE_UNIT might not be gimplified yet,5438 For local variables TYPE_SIZE_UNIT might not be gimplified yet,
5439 in this case omp_notice_variable will be called later5439 in this case omp_notice_variable will be called later
5440 on when it is gimplified. */5440 on when it is gimplified. */
5441 else if (! (flags & GOVD_LOCAL))5441 else if (! (flags & GOVD_LOCAL)
5442 && DECL_P (TYPE_SIZE_UNIT (TREE_TYPE (decl))))
5442 omp_notice_variable (ctx, TYPE_SIZE_UNIT (TREE_TYPE (decl)), true);5443 omp_notice_variable (ctx, TYPE_SIZE_UNIT (TREE_TYPE (decl)), true);
5443 }5444 }
5444 else if (lang_hooks.decls.omp_privatize_by_reference (decl))5445 else if (lang_hooks.decls.omp_privatize_by_reference (decl))
54455446
=== modified file 'gcc/haifa-sched.c'
--- gcc/haifa-sched.c 2011-02-08 10:51:58 +0000
+++ gcc/haifa-sched.c 2011-04-28 16:44:05 +0000
@@ -4442,6 +4442,8 @@
4442 edge_flags = 0;4442 edge_flags = 0;
44434443
4444 make_single_succ_edge (rec, second_bb, edge_flags);4444 make_single_succ_edge (rec, second_bb, edge_flags);
4445 if (dom_info_available_p (CDI_DOMINATORS))
4446 set_immediate_dominator (CDI_DOMINATORS, rec, first_bb);
4445}4447}
44464448
4447/* This function creates recovery code for INSN. If MUTATE_P is nonzero,4449/* This function creates recovery code for INSN. If MUTATE_P is nonzero,
44484450
=== modified file 'gcc/ipa-inline.c'
--- gcc/ipa-inline.c 2010-11-24 08:43:48 +0000
+++ gcc/ipa-inline.c 2011-04-28 16:44:05 +0000
@@ -2092,6 +2092,7 @@
2092{2092{
2093 unsigned int todo = 0;2093 unsigned int todo = 0;
2094 struct cgraph_edge *e;2094 struct cgraph_edge *e;
2095 bool inline_p = false;
20952096
2096 /* FIXME: Currently the passmanager is adding inline transform more than once to some2097 /* FIXME: Currently the passmanager is adding inline transform more than once to some
2097 clones. This needs revisiting after WPA cleanups. */2098 clones. This needs revisiting after WPA cleanups. */
@@ -2104,10 +2105,13 @@
2104 save_inline_function_body (node);2105 save_inline_function_body (node);
21052106
2106 for (e = node->callees; e; e = e->next_callee)2107 for (e = node->callees; e; e = e->next_callee)
2107 if (!e->inline_failed || warn_inline)2108 {
2108 break;2109 cgraph_redirect_edge_call_stmt_to_callee (e);
2110 if (!e->inline_failed || warn_inline)
2111 inline_p = true;
2112 }
21092113
2110 if (e)2114 if (inline_p)
2111 {2115 {
2112 timevar_push (TV_INTEGRATION);2116 timevar_push (TV_INTEGRATION);
2113 todo = optimize_inline_calls (current_function_decl);2117 todo = optimize_inline_calls (current_function_decl);
21142118
=== modified file 'gcc/java/ChangeLog'
--- gcc/java/ChangeLog 2010-12-16 12:32:23 +0000
+++ gcc/java/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/lto/ChangeLog'
--- gcc/lto/ChangeLog 2010-12-16 12:32:50 +0000
+++ gcc/lto/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/objc/ChangeLog'
--- gcc/objc/ChangeLog 2010-12-16 12:33:00 +0000
+++ gcc/objc/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/objcp/ChangeLog'
--- gcc/objcp/ChangeLog 2010-12-16 12:33:13 +0000
+++ gcc/objcp/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/omp-low.c'
--- gcc/omp-low.c 2010-04-21 13:01:30 +0000
+++ gcc/omp-low.c 2011-04-28 16:44:05 +0000
@@ -1930,7 +1930,18 @@
1930 {1930 {
1931 *walk_subtrees = 1;1931 *walk_subtrees = 1;
1932 if (ctx)1932 if (ctx)
1933 TREE_TYPE (t) = remap_type (TREE_TYPE (t), &ctx->cb);1933 {
1934 tree tem = remap_type (TREE_TYPE (t), &ctx->cb);
1935 if (tem != TREE_TYPE (t))
1936 {
1937 if (TREE_CODE (t) == INTEGER_CST)
1938 *tp = build_int_cst_wide (tem,
1939 TREE_INT_CST_LOW (t),
1940 TREE_INT_CST_HIGH (t));
1941 else
1942 TREE_TYPE (t) = tem;
1943 }
1944 }
1934 }1945 }
1935 break;1946 break;
1936 }1947 }
19371948
=== modified file 'gcc/po/ChangeLog'
--- gcc/po/ChangeLog 2010-12-16 12:32:28 +0000
+++ gcc/po/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/reload1.c'
--- gcc/reload1.c 2011-03-02 13:30:06 +0000
+++ gcc/reload1.c 2011-04-28 16:44:05 +0000
@@ -461,7 +461,7 @@
461static void delete_output_reload (rtx, int, int, rtx);461static void delete_output_reload (rtx, int, int, rtx);
462static void delete_address_reloads (rtx, rtx);462static void delete_address_reloads (rtx, rtx);
463static void delete_address_reloads_1 (rtx, rtx, rtx);463static void delete_address_reloads_1 (rtx, rtx, rtx);
464static rtx inc_for_reload (rtx, rtx, rtx, int);464static void inc_for_reload (rtx, rtx, rtx, int);
465#ifdef AUTO_INC_DEC465#ifdef AUTO_INC_DEC
466static void add_auto_inc_notes (rtx, rtx);466static void add_auto_inc_notes (rtx, rtx);
467#endif467#endif
@@ -7150,22 +7150,12 @@
71507150
7151 old = XEXP (rl->in_reg, 0);7151 old = XEXP (rl->in_reg, 0);
71527152
7153 if (optimize && REG_P (oldequiv)
7154 && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
7155 && spill_reg_store[REGNO (oldequiv)]
7156 && REG_P (old)
7157 && (dead_or_set_p (insn,
7158 spill_reg_stored_to[REGNO (oldequiv)])
7159 || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)],
7160 old)))
7161 delete_output_reload (insn, j, REGNO (oldequiv), reloadreg);
7162
7163 /* Prevent normal processing of this reload. */7153 /* Prevent normal processing of this reload. */
7164 special = 1;7154 special = 1;
7165 /* Output a special code sequence for this case. */7155 /* Output a special code sequence for this case, and forget about
7166 new_spill_reg_store[REGNO (reloadreg)]7156 spill reg information. */
7167 = inc_for_reload (reloadreg, oldequiv, rl->out,7157 new_spill_reg_store[REGNO (reloadreg)] = NULL;
7168 rl->inc);7158 inc_for_reload (reloadreg, oldequiv, rl->out, rl->inc);
7169 }7159 }
71707160
7171 /* If we are reloading a pseudo-register that was set by the previous7161 /* If we are reloading a pseudo-register that was set by the previous
@@ -8975,11 +8965,9 @@
8975 IN is either identical to VALUE, or some cheaper place to reload from.8965 IN is either identical to VALUE, or some cheaper place to reload from.
89768966
8977 INC_AMOUNT is the number to increment or decrement by (always positive).8967 INC_AMOUNT is the number to increment or decrement by (always positive).
8978 This cannot be deduced from VALUE.8968 This cannot be deduced from VALUE. */
89798969
8980 Return the instruction that stores into RELOADREG. */8970static void
8981
8982static rtx
8983inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)8971inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)
8984{8972{
8985 /* REG or MEM to be copied and incremented. */8973 /* REG or MEM to be copied and incremented. */
@@ -8991,7 +8979,6 @@
8991 rtx inc;8979 rtx inc;
8992 rtx add_insn;8980 rtx add_insn;
8993 int code;8981 int code;
8994 rtx store;
8995 rtx real_in = in == value ? incloc : in;8982 rtx real_in = in == value ? incloc : in;
89968983
8997 /* No hard register is equivalent to this register after8984 /* No hard register is equivalent to this register after
@@ -9039,9 +9026,8 @@
9039 be used as an address. */9026 be used as an address. */
90409027
9041 if (! post)9028 if (! post)
9042 add_insn = emit_insn (gen_move_insn (reloadreg, incloc));9029 emit_insn (gen_move_insn (reloadreg, incloc));
90439030 return;
9044 return add_insn;
9045 }9031 }
9046 }9032 }
9047 delete_insns_since (last);9033 delete_insns_since (last);
@@ -9057,7 +9043,7 @@
9057 if (in != reloadreg)9043 if (in != reloadreg)
9058 emit_insn (gen_move_insn (reloadreg, real_in));9044 emit_insn (gen_move_insn (reloadreg, real_in));
9059 emit_insn (gen_add2_insn (reloadreg, inc));9045 emit_insn (gen_add2_insn (reloadreg, inc));
9060 store = emit_insn (gen_move_insn (incloc, reloadreg));9046 emit_insn (gen_move_insn (incloc, reloadreg));
9061 }9047 }
9062 else9048 else
9063 {9049 {
@@ -9071,14 +9057,12 @@
9071 the original value. */9057 the original value. */
90729058
9073 emit_insn (gen_add2_insn (reloadreg, inc));9059 emit_insn (gen_add2_insn (reloadreg, inc));
9074 store = emit_insn (gen_move_insn (incloc, reloadreg));9060 emit_insn (gen_move_insn (incloc, reloadreg));
9075 if (CONST_INT_P (inc))9061 if (CONST_INT_P (inc))
9076 emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc))));9062 emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc))));
9077 else9063 else
9078 emit_insn (gen_sub2_insn (reloadreg, inc));9064 emit_insn (gen_sub2_insn (reloadreg, inc));
9079 }9065 }
9080
9081 return store;
9082}9066}
90839067
90849068
9085#ifdef AUTO_INC_DEC9069#ifdef AUTO_INC_DEC
90869070
=== modified file 'gcc/rtl.h'
--- gcc/rtl.h 2011-02-08 10:51:58 +0000
+++ gcc/rtl.h 2011-04-28 16:44:05 +0000
@@ -2418,6 +2418,7 @@
2418extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int);2418extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int);
2419extern rtx get_reg_known_value (unsigned int);2419extern rtx get_reg_known_value (unsigned int);
2420extern bool get_reg_known_equiv_p (unsigned int);2420extern bool get_reg_known_equiv_p (unsigned int);
2421extern rtx get_reg_base_value (unsigned int);
24212422
2422#ifdef STACK_REGS2423#ifdef STACK_REGS
2423extern int stack_regs_mentioned (const_rtx insn);2424extern int stack_regs_mentioned (const_rtx insn);
24242425
=== modified file 'gcc/sched-vis.c'
--- gcc/sched-vis.c 2011-02-08 10:51:58 +0000
+++ gcc/sched-vis.c 2011-04-28 16:44:05 +0000
@@ -603,7 +603,7 @@
603 sprintf (buf, "asm {%s}", XSTR (x, 0));603 sprintf (buf, "asm {%s}", XSTR (x, 0));
604 break;604 break;
605 case ADDR_VEC:605 case ADDR_VEC:
606 break;606 /* Fall through. */
607 case ADDR_DIFF_VEC:607 case ADDR_DIFF_VEC:
608 print_value (buf, XEXP (x, 0), verbose);608 print_value (buf, XEXP (x, 0), verbose);
609 break;609 break;
610610
=== modified file 'gcc/sel-sched-ir.c'
--- gcc/sel-sched-ir.c 2011-02-08 10:51:58 +0000
+++ gcc/sel-sched-ir.c 2011-04-28 16:44:05 +0000
@@ -152,7 +152,9 @@
152152
153static void move_bb_info (basic_block, basic_block);153static void move_bb_info (basic_block, basic_block);
154static void remove_empty_bb (basic_block, bool);154static void remove_empty_bb (basic_block, bool);
155static void sel_merge_blocks (basic_block, basic_block);
155static void sel_remove_loop_preheader (void);156static void sel_remove_loop_preheader (void);
157static bool bb_has_removable_jump_to_p (basic_block, basic_block);
156158
157static bool insn_is_the_only_one_in_bb_p (insn_t);159static bool insn_is_the_only_one_in_bb_p (insn_t);
158static void create_initial_data_sets (basic_block);160static void create_initial_data_sets (basic_block);
@@ -939,6 +941,7 @@
939void941void
940return_regset_to_pool (regset rs)942return_regset_to_pool (regset rs)
941{943{
944 gcc_assert (rs);
942 regset_pool.diff--;945 regset_pool.diff--;
943946
944 if (regset_pool.n == regset_pool.s)947 if (regset_pool.n == regset_pool.s)
@@ -1172,6 +1175,9 @@
1172 VINSN_COUNT (vi) = 0;1175 VINSN_COUNT (vi) = 0;
1173 vi->cost = -1;1176 vi->cost = -1;
11741177
1178 if (INSN_NOP_P (insn))
1179 return;
1180
1175 if (DF_INSN_UID_SAFE_GET (INSN_UID (insn)) != NULL)1181 if (DF_INSN_UID_SAFE_GET (INSN_UID (insn)) != NULL)
1176 init_id_from_df (VINSN_ID (vi), insn, force_unique_p);1182 init_id_from_df (VINSN_ID (vi), insn, force_unique_p);
1177 else1183 else
@@ -1253,9 +1259,12 @@
1253{1259{
1254 gcc_assert (VINSN_COUNT (vi) == 0);1260 gcc_assert (VINSN_COUNT (vi) == 0);
12551261
1256 return_regset_to_pool (VINSN_REG_SETS (vi));1262 if (!INSN_NOP_P (VINSN_INSN_RTX (vi)))
1257 return_regset_to_pool (VINSN_REG_USES (vi));1263 {
1258 return_regset_to_pool (VINSN_REG_CLOBBERS (vi));1264 return_regset_to_pool (VINSN_REG_SETS (vi));
1265 return_regset_to_pool (VINSN_REG_USES (vi));
1266 return_regset_to_pool (VINSN_REG_CLOBBERS (vi));
1267 }
12591268
1260 free (vi);1269 free (vi);
1261}1270}
@@ -1555,6 +1564,20 @@
1555 *pvect = NULL;1564 *pvect = NULL;
1556}1565}
15571566
1567/* Merge vector FROM to PVECT. */
1568static void
1569merge_history_vect (VEC (expr_history_def, heap) **pvect,
1570 VEC (expr_history_def, heap) *from)
1571{
1572 expr_history_def *phist;
1573 int i;
1574
1575 /* We keep this vector sorted. */
1576 for (i = 0; VEC_iterate (expr_history_def, from, i, phist); i++)
1577 insert_in_history_vect (pvect, phist->uid, phist->type,
1578 phist->old_expr_vinsn, phist->new_expr_vinsn,
1579 phist->spec_ds);
1580}
15581581
1559/* Compare two vinsns as rhses if possible and as vinsns otherwise. */1582/* Compare two vinsns as rhses if possible and as vinsns otherwise. */
1560bool1583bool
@@ -1592,7 +1615,7 @@
1592init_expr (expr_t expr, vinsn_t vi, int spec, int use, int priority,1615init_expr (expr_t expr, vinsn_t vi, int spec, int use, int priority,
1593 int sched_times, int orig_bb_index, ds_t spec_done_ds,1616 int sched_times, int orig_bb_index, ds_t spec_done_ds,
1594 ds_t spec_to_check_ds, int orig_sched_cycle,1617 ds_t spec_to_check_ds, int orig_sched_cycle,
1595 VEC(expr_history_def, heap) *history, bool target_available,1618 VEC(expr_history_def, heap) *history, signed char target_available,
1596 bool was_substituted, bool was_renamed, bool needs_spec_check_p,1619 bool was_substituted, bool was_renamed, bool needs_spec_check_p,
1597 bool cant_move)1620 bool cant_move)
1598{1621{
@@ -1787,9 +1810,6 @@
1787void1810void
1788merge_expr_data (expr_t to, expr_t from, insn_t split_point)1811merge_expr_data (expr_t to, expr_t from, insn_t split_point)
1789{1812{
1790 int i;
1791 expr_history_def *phist;
1792
1793 /* For now, we just set the spec of resulting expr to be minimum of the specs1813 /* For now, we just set the spec of resulting expr to be minimum of the specs
1794 of merged exprs. */1814 of merged exprs. */
1795 if (EXPR_SPEC (to) > EXPR_SPEC (from))1815 if (EXPR_SPEC (to) > EXPR_SPEC (from))
@@ -1813,20 +1833,12 @@
1813 EXPR_ORIG_SCHED_CYCLE (to) = MIN (EXPR_ORIG_SCHED_CYCLE (to),1833 EXPR_ORIG_SCHED_CYCLE (to) = MIN (EXPR_ORIG_SCHED_CYCLE (to),
1814 EXPR_ORIG_SCHED_CYCLE (from));1834 EXPR_ORIG_SCHED_CYCLE (from));
18151835
1816 /* We keep this vector sorted. */
1817 for (i = 0;
1818 VEC_iterate (expr_history_def, EXPR_HISTORY_OF_CHANGES (from),
1819 i, phist);
1820 i++)
1821 insert_in_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
1822 phist->uid, phist->type,
1823 phist->old_expr_vinsn, phist->new_expr_vinsn,
1824 phist->spec_ds);
1825
1826 EXPR_WAS_SUBSTITUTED (to) |= EXPR_WAS_SUBSTITUTED (from);1836 EXPR_WAS_SUBSTITUTED (to) |= EXPR_WAS_SUBSTITUTED (from);
1827 EXPR_WAS_RENAMED (to) |= EXPR_WAS_RENAMED (from);1837 EXPR_WAS_RENAMED (to) |= EXPR_WAS_RENAMED (from);
1828 EXPR_CANT_MOVE (to) |= EXPR_CANT_MOVE (from);1838 EXPR_CANT_MOVE (to) |= EXPR_CANT_MOVE (from);
18291839
1840 merge_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
1841 EXPR_HISTORY_OF_CHANGES (from));
1830 update_target_availability (to, from, split_point);1842 update_target_availability (to, from, split_point);
1831 update_speculative_bits (to, from, split_point);1843 update_speculative_bits (to, from, split_point);
1832}1844}
@@ -2319,16 +2331,24 @@
2319}2331}
23202332
2321/* Leave in AVP only those expressions, which are present in AV,2333/* Leave in AVP only those expressions, which are present in AV,
2322 and return it. */2334 and return it, merging history expressions. */
2323void2335void
2324av_set_intersect (av_set_t *avp, av_set_t av)2336av_set_code_motion_filter (av_set_t *avp, av_set_t av)
2325{2337{
2326 av_set_iterator i;2338 av_set_iterator i;
2327 expr_t expr;2339 expr_t expr, expr2;
23282340
2329 FOR_EACH_EXPR_1 (expr, i, avp)2341 FOR_EACH_EXPR_1 (expr, i, avp)
2330 if (av_set_lookup (av, EXPR_VINSN (expr)) == NULL)2342 if ((expr2 = av_set_lookup (av, EXPR_VINSN (expr))) == NULL)
2331 av_set_iter_remove (&i);2343 av_set_iter_remove (&i);
2344 else
2345 /* When updating av sets in bookkeeping blocks, we can add more insns
2346 there which will be transformed but the upper av sets will not
2347 reflect those transformations. We then fail to undo those
2348 when searching for such insns. So merge the history saved
2349 in the av set of the block we are processing. */
2350 merge_history_vect (&EXPR_HISTORY_OF_CHANGES (expr),
2351 EXPR_HISTORY_OF_CHANGES (expr2));
2332}2352}
23332353
23342354
23352355
@@ -3539,9 +3559,10 @@
35393559
3540/* Tidy the possibly empty block BB. */3560/* Tidy the possibly empty block BB. */
3541static bool3561static bool
3542maybe_tidy_empty_bb (basic_block bb, bool recompute_toporder_p)3562maybe_tidy_empty_bb (basic_block bb)
3543{3563{
3544 basic_block succ_bb, pred_bb;3564 basic_block succ_bb, pred_bb;
3565 VEC (basic_block, heap) *dom_bbs;
3545 edge e;3566 edge e;
3546 edge_iterator ei;3567 edge_iterator ei;
3547 bool rescan_p;3568 bool rescan_p;
@@ -3577,6 +3598,7 @@
3577 succ_bb = single_succ (bb);3598 succ_bb = single_succ (bb);
3578 rescan_p = true;3599 rescan_p = true;
3579 pred_bb = NULL;3600 pred_bb = NULL;
3601 dom_bbs = NULL;
35803602
3581 /* Redirect all non-fallthru edges to the next bb. */3603 /* Redirect all non-fallthru edges to the next bb. */
3582 while (rescan_p)3604 while (rescan_p)
@@ -3589,20 +3611,44 @@
35893611
3590 if (!(e->flags & EDGE_FALLTHRU))3612 if (!(e->flags & EDGE_FALLTHRU))
3591 {3613 {
3592 recompute_toporder_p |= sel_redirect_edge_and_branch (e, succ_bb);3614 /* We can not invalidate computed topological order by moving
3615 the edge destination block (E->SUCC) along a fallthru edge.
3616
3617 We will update dominators here only when we'll get
3618 an unreachable block when redirecting, otherwise
3619 sel_redirect_edge_and_branch will take care of it. */
3620 if (e->dest != bb
3621 && single_pred_p (e->dest))
3622 VEC_safe_push (basic_block, heap, dom_bbs, e->dest);
3623 sel_redirect_edge_and_branch (e, succ_bb);
3593 rescan_p = true;3624 rescan_p = true;
3594 break;3625 break;
3595 }3626 }
3627 /* If the edge is fallthru, but PRED_BB ends in a conditional jump
3628 to BB (so there is no non-fallthru edge from PRED_BB to BB), we
3629 still have to adjust it. */
3630 else if (single_succ_p (pred_bb) && any_condjump_p (BB_END (pred_bb)))
3631 {
3632 /* If possible, try to remove the unneeded conditional jump. */
3633 if (INSN_SCHED_TIMES (BB_END (pred_bb)) == 0
3634 && !IN_CURRENT_FENCE_P (BB_END (pred_bb)))
3635 {
3636 if (!sel_remove_insn (BB_END (pred_bb), false, false))
3637 tidy_fallthru_edge (e);
3638 }
3639 else
3640 sel_redirect_edge_and_branch (e, succ_bb);
3641 rescan_p = true;
3642 break;
3643 }
3596 }3644 }
3597 }3645 }
35983646
3599 /* If it is possible - merge BB with its predecessor. */
3600 if (can_merge_blocks_p (bb->prev_bb, bb))3647 if (can_merge_blocks_p (bb->prev_bb, bb))
3601 sel_merge_blocks (bb->prev_bb, bb);3648 sel_merge_blocks (bb->prev_bb, bb);
3602 else3649 else
3603 /* Otherwise this is a block without fallthru predecessor.
3604 Just delete it. */
3605 {3650 {
3651 /* This is a block without fallthru predecessor. Just delete it. */
3606 gcc_assert (pred_bb != NULL);3652 gcc_assert (pred_bb != NULL);
36073653
3608 if (in_current_region_p (pred_bb))3654 if (in_current_region_p (pred_bb))
@@ -3610,12 +3656,12 @@
3610 remove_empty_bb (bb, true);3656 remove_empty_bb (bb, true);
3611 }3657 }
36123658
3613 if (recompute_toporder_p)3659 if (!VEC_empty (basic_block, dom_bbs))
3614 sel_recompute_toporder ();3660 {
36153661 VEC_safe_push (basic_block, heap, dom_bbs, succ_bb);
3616#ifdef ENABLE_CHECKING3662 iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
3617 verify_backedges ();3663 VEC_free (basic_block, heap, dom_bbs);
3618#endif3664 }
36193665
3620 return true;3666 return true;
3621}3667}
@@ -3630,12 +3676,12 @@
3630 insn_t first, last;3676 insn_t first, last;
36313677
3632 /* First check whether XBB is empty. */3678 /* First check whether XBB is empty. */
3633 changed = maybe_tidy_empty_bb (xbb, false);3679 changed = maybe_tidy_empty_bb (xbb);
3634 if (changed || !full_tidying)3680 if (changed || !full_tidying)
3635 return changed;3681 return changed;
36363682
3637 /* Check if there is a unnecessary jump after insn left. */3683 /* Check if there is a unnecessary jump after insn left. */
3638 if (jump_leads_only_to_bb_p (BB_END (xbb), xbb->next_bb)3684 if (bb_has_removable_jump_to_p (xbb, xbb->next_bb)
3639 && INSN_SCHED_TIMES (BB_END (xbb)) == 03685 && INSN_SCHED_TIMES (BB_END (xbb)) == 0
3640 && !IN_CURRENT_FENCE_P (BB_END (xbb)))3686 && !IN_CURRENT_FENCE_P (BB_END (xbb)))
3641 {3687 {
@@ -3676,7 +3722,7 @@
3676 /* And unconditional jump in previous basic block leads to3722 /* And unconditional jump in previous basic block leads to
3677 next basic block of XBB and this jump can be safely removed. */3723 next basic block of XBB and this jump can be safely removed. */
3678 && in_current_region_p (xbb->prev_bb)3724 && in_current_region_p (xbb->prev_bb)
3679 && jump_leads_only_to_bb_p (BB_END (xbb->prev_bb), xbb->next_bb)3725 && bb_has_removable_jump_to_p (xbb->prev_bb, xbb->next_bb)
3680 && INSN_SCHED_TIMES (BB_END (xbb->prev_bb)) == 03726 && INSN_SCHED_TIMES (BB_END (xbb->prev_bb)) == 0
3681 /* Also this jump is not at the scheduling boundary. */3727 /* Also this jump is not at the scheduling boundary. */
3682 && !IN_CURRENT_FENCE_P (BB_END (xbb->prev_bb)))3728 && !IN_CURRENT_FENCE_P (BB_END (xbb->prev_bb)))
@@ -3694,11 +3740,16 @@
3694 that contained that jump, becomes empty too. In such case3740 that contained that jump, becomes empty too. In such case
3695 remove it too. */3741 remove it too. */
3696 if (sel_bb_empty_p (xbb->prev_bb))3742 if (sel_bb_empty_p (xbb->prev_bb))
3697 changed = maybe_tidy_empty_bb (xbb->prev_bb, recompute_toporder_p);3743 changed = maybe_tidy_empty_bb (xbb->prev_bb);
3698 else if (recompute_toporder_p)3744 if (recompute_toporder_p)
3699 sel_recompute_toporder ();3745 sel_recompute_toporder ();
3700 }3746 }
37013747
3748#ifdef ENABLE_CHECKING
3749 verify_backedges ();
3750 verify_dominators (CDI_DOMINATORS);
3751#endif
3752
3702 return changed;3753 return changed;
3703}3754}
37043755
@@ -3706,14 +3757,14 @@
3706void3757void
3707purge_empty_blocks (void)3758purge_empty_blocks (void)
3708{3759{
3709 /* Do not attempt to delete preheader. */3760 int i;
3710 int i = sel_is_loop_preheader_p (BASIC_BLOCK (BB_TO_BLOCK (0))) ? 1 : 0;
37113761
3712 while (i < current_nr_blocks)3762 /* Do not attempt to delete the first basic block in the region. */
3763 for (i = 1; i < current_nr_blocks; )
3713 {3764 {
3714 basic_block b = BASIC_BLOCK (BB_TO_BLOCK (i));3765 basic_block b = BASIC_BLOCK (BB_TO_BLOCK (i));
37153766
3716 if (maybe_tidy_empty_bb (b, false))3767 if (maybe_tidy_empty_bb (b))
3717 continue;3768 continue;
37183769
3719 i++;3770 i++;
@@ -4381,9 +4432,6 @@
4381 if (!JUMP_P (jump))4432 if (!JUMP_P (jump))
4382 return NULL;4433 return NULL;
43834434
4384 if (any_uncondjump_p (jump))
4385 return single_succ (BLOCK_FOR_INSN (jump));
4386
4387 if (!any_condjump_p (jump))4435 if (!any_condjump_p (jump))
4388 return NULL;4436 return NULL;
43894437
@@ -4578,8 +4626,12 @@
4578 basic_block pred_bb = e->src;4626 basic_block pred_bb = e->src;
4579 insn_t bb_end = BB_END (pred_bb);4627 insn_t bb_end = BB_END (pred_bb);
45804628
4581 /* ??? This code is not supposed to walk out of a region. */4629 if (!in_current_region_p (pred_bb))
4582 gcc_assert (in_current_region_p (pred_bb));4630 {
4631 gcc_assert (flag_sel_sched_pipelining_outer_loops
4632 && current_loop_nest);
4633 continue;
4634 }
45834635
4584 if (sel_bb_empty_p (pred_bb))4636 if (sel_bb_empty_p (pred_bb))
4585 cfg_preds_1 (pred_bb, preds, n, size);4637 cfg_preds_1 (pred_bb, preds, n, size);
@@ -4592,7 +4644,9 @@
4592 }4644 }
4593 }4645 }
45944646
4595 gcc_assert (*n != 0);4647 gcc_assert (*n != 0
4648 || (flag_sel_sched_pipelining_outer_loops
4649 && current_loop_nest));
4596}4650}
45974651
4598/* Find all predecessors of BB and record them in PREDS and their number4652/* Find all predecessors of BB and record them in PREDS and their number
@@ -5018,16 +5072,23 @@
5018static void5072static void
5019sel_remove_bb (basic_block bb, bool remove_from_cfg_p)5073sel_remove_bb (basic_block bb, bool remove_from_cfg_p)
5020{5074{
5075 unsigned idx = bb->index;
5076
5021 gcc_assert (bb != NULL && BB_NOTE_LIST (bb) == NULL_RTX);5077 gcc_assert (bb != NULL && BB_NOTE_LIST (bb) == NULL_RTX);
50225078
5023 remove_bb_from_region (bb);5079 remove_bb_from_region (bb);
5024 return_bb_to_pool (bb);5080 return_bb_to_pool (bb);
5025 bitmap_clear_bit (blocks_to_reschedule, bb->index);5081 bitmap_clear_bit (blocks_to_reschedule, idx);
50265082
5027 if (remove_from_cfg_p)5083 if (remove_from_cfg_p)
5028 delete_and_free_basic_block (bb);5084 {
5085 basic_block succ = single_succ (bb);
5086 delete_and_free_basic_block (bb);
5087 set_immediate_dominator (CDI_DOMINATORS, succ,
5088 recompute_dominator (CDI_DOMINATORS, succ));
5089 }
50295090
5030 rgn_setup_region (CONTAINING_RGN (bb->index));5091 rgn_setup_region (CONTAINING_RGN (idx));
5031}5092}
50325093
5033/* Concatenate info of EMPTY_BB to info of MERGE_BB. */5094/* Concatenate info of EMPTY_BB to info of MERGE_BB. */
@@ -5042,50 +5103,6 @@
50425103
5043}5104}
50445105
5045/* Remove an empty basic block EMPTY_BB. When MERGE_UP_P is true, we put
5046 EMPTY_BB's note lists into its predecessor instead of putting them
5047 into the successor. When REMOVE_FROM_CFG_P is true, also remove
5048 the empty block. */
5049void
5050sel_remove_empty_bb (basic_block empty_bb, bool merge_up_p,
5051 bool remove_from_cfg_p)
5052{
5053 basic_block merge_bb;
5054
5055 gcc_assert (sel_bb_empty_p (empty_bb));
5056
5057 if (merge_up_p)
5058 {
5059 merge_bb = empty_bb->prev_bb;
5060 gcc_assert (EDGE_COUNT (empty_bb->preds) == 1
5061 && EDGE_PRED (empty_bb, 0)->src == merge_bb);
5062 }
5063 else
5064 {
5065 edge e;
5066 edge_iterator ei;
5067
5068 merge_bb = bb_next_bb (empty_bb);
5069
5070 /* Redirect incoming edges (except fallthrough one) of EMPTY_BB to its
5071 successor block. */
5072 for (ei = ei_start (empty_bb->preds);
5073 (e = ei_safe_edge (ei)); )
5074 {
5075 if (! (e->flags & EDGE_FALLTHRU))
5076 sel_redirect_edge_and_branch (e, merge_bb);
5077 else
5078 ei_next (&ei);
5079 }
5080
5081 gcc_assert (EDGE_COUNT (empty_bb->succs) == 1
5082 && EDGE_SUCC (empty_bb, 0)->dest == merge_bb);
5083 }
5084
5085 move_bb_info (merge_bb, empty_bb);
5086 remove_empty_bb (empty_bb, remove_from_cfg_p);
5087}
5088
5089/* Remove EMPTY_BB. If REMOVE_FROM_CFG_P is false, remove EMPTY_BB from5106/* Remove EMPTY_BB. If REMOVE_FROM_CFG_P is false, remove EMPTY_BB from
5090 region, but keep it in CFG. */5107 region, but keep it in CFG. */
5091static void5108static void
@@ -5385,12 +5402,16 @@
5385}5402}
53865403
5387/* Merge basic block B into basic block A. */5404/* Merge basic block B into basic block A. */
5388void5405static void
5389sel_merge_blocks (basic_block a, basic_block b)5406sel_merge_blocks (basic_block a, basic_block b)
5390{5407{
5391 sel_remove_empty_bb (b, true, false);5408 gcc_assert (sel_bb_empty_p (b)
5409 && EDGE_COUNT (b->preds) == 1
5410 && EDGE_PRED (b, 0)->src == b->prev_bb);
5411
5412 move_bb_info (b->prev_bb, b);
5413 remove_empty_bb (b, false);
5392 merge_blocks (a, b);5414 merge_blocks (a, b);
5393
5394 change_loops_latches (b, a);5415 change_loops_latches (b, a);
5395}5416}
53965417
@@ -5400,12 +5421,15 @@
5400void5421void
5401sel_redirect_edge_and_branch_force (edge e, basic_block to)5422sel_redirect_edge_and_branch_force (edge e, basic_block to)
5402{5423{
5403 basic_block jump_bb, src;5424 basic_block jump_bb, src, orig_dest = e->dest;
5404 int prev_max_uid;5425 int prev_max_uid;
5405 rtx jump;5426 rtx jump;
54065427
5407 gcc_assert (!sel_bb_empty_p (e->src));5428 /* This function is now used only for bookkeeping code creation, where
54085429 we'll never get the single pred of orig_dest block and thus will not
5430 hit unreachable blocks when updating dominator info. */
5431 gcc_assert (!sel_bb_empty_p (e->src)
5432 && !single_pred_p (orig_dest));
5409 src = e->src;5433 src = e->src;
5410 prev_max_uid = get_max_uid ();5434 prev_max_uid = get_max_uid ();
5411 jump_bb = redirect_edge_and_branch_force (e, to);5435 jump_bb = redirect_edge_and_branch_force (e, to);
@@ -5422,6 +5446,10 @@
5422 jump = find_new_jump (src, jump_bb, prev_max_uid);5446 jump = find_new_jump (src, jump_bb, prev_max_uid);
5423 if (jump)5447 if (jump)
5424 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);5448 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
5449 set_immediate_dominator (CDI_DOMINATORS, to,
5450 recompute_dominator (CDI_DOMINATORS, to));
5451 set_immediate_dominator (CDI_DOMINATORS, orig_dest,
5452 recompute_dominator (CDI_DOMINATORS, orig_dest));
5425}5453}
54265454
5427/* A wrapper for redirect_edge_and_branch. Return TRUE if blocks connected by5455/* A wrapper for redirect_edge_and_branch. Return TRUE if blocks connected by
@@ -5430,11 +5458,12 @@
5430sel_redirect_edge_and_branch (edge e, basic_block to)5458sel_redirect_edge_and_branch (edge e, basic_block to)
5431{5459{
5432 bool latch_edge_p;5460 bool latch_edge_p;
5433 basic_block src;5461 basic_block src, orig_dest = e->dest;
5434 int prev_max_uid;5462 int prev_max_uid;
5435 rtx jump;5463 rtx jump;
5436 edge redirected;5464 edge redirected;
5437 bool recompute_toporder_p = false;5465 bool recompute_toporder_p = false;
5466 bool maybe_unreachable = single_pred_p (orig_dest);
54385467
5439 latch_edge_p = (pipelining_p5468 latch_edge_p = (pipelining_p
5440 && current_loop_nest5469 && current_loop_nest
@@ -5465,6 +5494,15 @@
5465 if (jump)5494 if (jump)
5466 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);5495 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
54675496
5497 /* Only update dominator info when we don't have unreachable blocks.
5498 Otherwise we'll update in maybe_tidy_empty_bb. */
5499 if (!maybe_unreachable)
5500 {
5501 set_immediate_dominator (CDI_DOMINATORS, to,
5502 recompute_dominator (CDI_DOMINATORS, to));
5503 set_immediate_dominator (CDI_DOMINATORS, orig_dest,
5504 recompute_dominator (CDI_DOMINATORS, orig_dest));
5505 }
5468 return recompute_toporder_p;5506 return recompute_toporder_p;
5469}5507}
54705508
@@ -5603,7 +5641,7 @@
5603 gcc_assert (nop_pattern == NULL_RTX5641 gcc_assert (nop_pattern == NULL_RTX
5604 && exit_insn == NULL_RTX);5642 && exit_insn == NULL_RTX);
56055643
5606 nop_pattern = gen_nop ();5644 nop_pattern = constm1_rtx;
56075645
5608 start_sequence ();5646 start_sequence ();
5609 emit_insn (nop_pattern);5647 emit_insn (nop_pattern);
@@ -6093,22 +6131,20 @@
6093 return false;6131 return false;
6094}6132}
60956133
6096/* Checks whether JUMP leads to basic block DEST_BB and no other blocks. */6134/* Check whether JUMP_BB ends with a jump insn that leads only to DEST_BB and
6097bool6135 can be removed, making the corresponding edge fallthrough (assuming that
6098jump_leads_only_to_bb_p (insn_t jump, basic_block dest_bb)6136 all basic blocks between JUMP_BB and DEST_BB are empty). */
6137static bool
6138bb_has_removable_jump_to_p (basic_block jump_bb, basic_block dest_bb)
6099{6139{
6100 basic_block jump_bb = BLOCK_FOR_INSN (jump);6140 if (!onlyjump_p (BB_END (jump_bb))
61016141 || tablejump_p (BB_END (jump_bb), NULL, NULL))
6102 /* It is not jump, jump with side-effects or jump can lead to several
6103 basic blocks. */
6104 if (!onlyjump_p (jump)
6105 || !any_uncondjump_p (jump))
6106 return false;6142 return false;
61076143
6108 /* Several outgoing edges, abnormal edge or destination of jump is6144 /* Several outgoing edges, abnormal edge or destination of jump is
6109 not DEST_BB. */6145 not DEST_BB. */
6110 if (EDGE_COUNT (jump_bb->succs) != 16146 if (EDGE_COUNT (jump_bb->succs) != 1
6111 || EDGE_SUCC (jump_bb, 0)->flags & EDGE_ABNORMAL6147 || EDGE_SUCC (jump_bb, 0)->flags & (EDGE_ABNORMAL | EDGE_CROSSING)
6112 || EDGE_SUCC (jump_bb, 0)->dest != dest_bb)6148 || EDGE_SUCC (jump_bb, 0)->dest != dest_bb)
6113 return false;6149 return false;
61146150
@@ -6188,12 +6224,16 @@
6188 basic block if it becomes empty. */6224 basic block if it becomes empty. */
6189 if (next_bb->prev_bb == prev_bb6225 if (next_bb->prev_bb == prev_bb
6190 && prev_bb != ENTRY_BLOCK_PTR6226 && prev_bb != ENTRY_BLOCK_PTR
6191 && jump_leads_only_to_bb_p (BB_END (prev_bb), next_bb))6227 && bb_has_removable_jump_to_p (prev_bb, next_bb))
6192 {6228 {
6193 redirect_edge_and_branch (EDGE_SUCC (prev_bb, 0), next_bb);6229 redirect_edge_and_branch (EDGE_SUCC (prev_bb, 0), next_bb);
6194 if (BB_END (prev_bb) == bb_note (prev_bb))6230 if (BB_END (prev_bb) == bb_note (prev_bb))
6195 free_data_sets (prev_bb);6231 free_data_sets (prev_bb);
6196 }6232 }
6233
6234 set_immediate_dominator (CDI_DOMINATORS, next_bb,
6235 recompute_dominator (CDI_DOMINATORS,
6236 next_bb));
6197 }6237 }
6198 }6238 }
6199 VEC_free (basic_block, heap, preheader_blocks);6239 VEC_free (basic_block, heap, preheader_blocks);
62006240
=== modified file 'gcc/sel-sched-ir.h'
--- gcc/sel-sched-ir.h 2010-06-02 16:31:39 +0000
+++ gcc/sel-sched-ir.h 2011-04-28 16:44:05 +0000
@@ -1565,7 +1565,7 @@
1565extern expr_t av_set_element (av_set_t, int);1565extern expr_t av_set_element (av_set_t, int);
1566extern void av_set_substract_cond_branches (av_set_t *);1566extern void av_set_substract_cond_branches (av_set_t *);
1567extern void av_set_split_usefulness (av_set_t, int, int);1567extern void av_set_split_usefulness (av_set_t, int, int);
1568extern void av_set_intersect (av_set_t *, av_set_t);1568extern void av_set_code_motion_filter (av_set_t *, av_set_t);
15691569
1570extern void sel_save_haifa_priorities (void);1570extern void sel_save_haifa_priorities (void);
15711571
@@ -1590,7 +1590,6 @@
1590extern bool bb_header_p (insn_t);1590extern bool bb_header_p (insn_t);
1591extern void sel_init_invalid_data_sets (insn_t);1591extern void sel_init_invalid_data_sets (insn_t);
1592extern bool insn_at_boundary_p (insn_t);1592extern bool insn_at_boundary_p (insn_t);
1593extern bool jump_leads_only_to_bb_p (insn_t, basic_block);
15941593
1595/* Basic block and CFG functions. */1594/* Basic block and CFG functions. */
15961595
@@ -1618,11 +1617,9 @@
1618extern bool tidy_control_flow (basic_block, bool);1617extern bool tidy_control_flow (basic_block, bool);
1619extern void free_bb_note_pool (void);1618extern void free_bb_note_pool (void);
16201619
1621extern void sel_remove_empty_bb (basic_block, bool, bool);
1622extern void purge_empty_blocks (void);1620extern void purge_empty_blocks (void);
1623extern basic_block sel_split_edge (edge);1621extern basic_block sel_split_edge (edge);
1624extern basic_block sel_create_recovery_block (insn_t);1622extern basic_block sel_create_recovery_block (insn_t);
1625extern void sel_merge_blocks (basic_block, basic_block);
1626extern bool sel_redirect_edge_and_branch (edge, basic_block);1623extern bool sel_redirect_edge_and_branch (edge, basic_block);
1627extern void sel_redirect_edge_and_branch_force (edge, basic_block);1624extern void sel_redirect_edge_and_branch_force (edge, basic_block);
1628extern void sel_init_pipelining (void);1625extern void sel_init_pipelining (void);
16291626
=== modified file 'gcc/sel-sched.c'
--- gcc/sel-sched.c 2011-02-08 10:51:58 +0000
+++ gcc/sel-sched.c 2011-04-28 16:44:05 +0000
@@ -1,5 +1,6 @@
1/* Instruction scheduling pass. Selective scheduler and pipeliner.1/* Instruction scheduling pass. Selective scheduler and pipeliner.
2 Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.2 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.
34
4This file is part of GCC.5This file is part of GCC.
56
@@ -1138,6 +1139,9 @@
1138 /* Can't use regs which aren't saved by1139 /* Can't use regs which aren't saved by
1139 the prologue. */1140 the prologue. */
1140 || !TEST_HARD_REG_BIT (sel_hrd.regs_ever_used, cur_reg + i)1141 || !TEST_HARD_REG_BIT (sel_hrd.regs_ever_used, cur_reg + i)
1142 /* Can't use regs with non-null REG_BASE_VALUE, because adjusting
1143 it affects aliasing globally and invalidates all AV sets. */
1144 || get_reg_base_value (cur_reg + i)
1141#ifdef LEAF_REGISTERS1145#ifdef LEAF_REGISTERS
1142 /* We can't use a non-leaf register if we're in a1146 /* We can't use a non-leaf register if we're in a
1143 leaf function. */1147 leaf function. */
@@ -2167,10 +2171,8 @@
2167 || ! in_current_region_p (fallthru_bb))2171 || ! in_current_region_p (fallthru_bb))
2168 return MOVEUP_EXPR_NULL;2172 return MOVEUP_EXPR_NULL;
21692173
2170 /* And it should be mutually exclusive with through_insn, or2174 /* And it should be mutually exclusive with through_insn. */
2171 be an unconditional jump. */2175 if (! sched_insns_conditions_mutex_p (insn, through_insn)
2172 if (! any_uncondjump_p (insn)
2173 && ! sched_insns_conditions_mutex_p (insn, through_insn)
2174 && ! DEBUG_INSN_P (through_insn))2176 && ! DEBUG_INSN_P (through_insn))
2175 return MOVEUP_EXPR_NULL;2177 return MOVEUP_EXPR_NULL;
2176 }2178 }
@@ -3735,7 +3737,7 @@
3735 {3737 {
3736 expr_t expr = VEC_index (expr_t, vec_av_set, n);3738 expr_t expr = VEC_index (expr_t, vec_av_set, n);
3737 insn_t insn = EXPR_INSN_RTX (expr);3739 insn_t insn = EXPR_INSN_RTX (expr);
3738 char target_available;3740 signed char target_available;
3739 bool is_orig_reg_p = true;3741 bool is_orig_reg_p = true;
3740 int need_cycles, new_prio;3742 int need_cycles, new_prio;
37413743
@@ -4403,7 +4405,8 @@
4403 {4405 {
4404 can_issue_more = invoke_aftermath_hooks (fence, EXPR_INSN_RTX (best),4406 can_issue_more = invoke_aftermath_hooks (fence, EXPR_INSN_RTX (best),
4405 can_issue_more);4407 can_issue_more);
4406 if (can_issue_more == 0)4408 if (targetm.sched.variable_issue
4409 && can_issue_more == 0)
4407 *pneed_stall = 1;4410 *pneed_stall = 1;
4408 }4411 }
44094412
@@ -5514,7 +5517,7 @@
5514 blist_t *bnds_tailp1, *bndsp;5517 blist_t *bnds_tailp1, *bndsp;
5515 expr_t expr_vliw;5518 expr_t expr_vliw;
5516 int need_stall;5519 int need_stall;
5517 int was_stall = 0, scheduled_insns = 0, stall_iterations = 0;5520 int was_stall = 0, scheduled_insns = 0;
5518 int max_insns = pipelining_p ? issue_rate : 2 * issue_rate;5521 int max_insns = pipelining_p ? issue_rate : 2 * issue_rate;
5519 int max_stall = pipelining_p ? 1 : 3;5522 int max_stall = pipelining_p ? 1 : 3;
5520 bool last_insn_was_debug = false;5523 bool last_insn_was_debug = false;
@@ -5533,16 +5536,15 @@
5533 do5536 do
5534 {5537 {
5535 expr_vliw = find_best_expr (&av_vliw, bnds, fence, &need_stall);5538 expr_vliw = find_best_expr (&av_vliw, bnds, fence, &need_stall);
5536 if (!expr_vliw && need_stall)5539 if (! expr_vliw && need_stall)
5537 {5540 {
5538 /* All expressions required a stall. Do not recompute av sets5541 /* All expressions required a stall. Do not recompute av sets
5539 as we'll get the same answer (modulo the insns between5542 as we'll get the same answer (modulo the insns between
5540 the fence and its boundary, which will not be available for5543 the fence and its boundary, which will not be available for
5541 pipelining). */5544 pipelining).
5542 gcc_assert (! expr_vliw && stall_iterations < 2);5545 If we are going to stall for too long, break to recompute av
5546 sets and bring more insns for pipelining. */
5543 was_stall++;5547 was_stall++;
5544 /* If we are going to stall for too long, break to recompute av
5545 sets and bring more insns for pipelining. */
5546 if (need_stall <= 3)5548 if (need_stall <= 3)
5547 stall_for_cycles (fence, need_stall);5549 stall_for_cycles (fence, need_stall);
5548 else5550 else
@@ -6475,7 +6477,7 @@
64756477
6476 /* Filter the orig_ops set. */6478 /* Filter the orig_ops set. */
6477 if (AV_SET_VALID_P (insn))6479 if (AV_SET_VALID_P (insn))
6478 av_set_intersect (&orig_ops, AV_SET (insn));6480 av_set_code_motion_filter (&orig_ops, AV_SET (insn));
64796481
6480 /* If no more original ops, return immediately. */6482 /* If no more original ops, return immediately. */
6481 if (!orig_ops)6483 if (!orig_ops)
@@ -6717,6 +6719,8 @@
67176719
6718 init_seqno_1 (succ, visited_bbs, blocks_to_reschedule);6720 init_seqno_1 (succ, visited_bbs, blocks_to_reschedule);
6719 }6721 }
6722 else if (blocks_to_reschedule)
6723 bitmap_set_bit (forced_ebb_heads, succ->index);
6720 }6724 }
67216725
6722 for (insn = BB_END (bb); insn != note; insn = PREV_INSN (insn))6726 for (insn = BB_END (bb); insn != note; insn = PREV_INSN (insn))
@@ -6971,6 +6975,7 @@
6971 int last_clock = 0;6975 int last_clock = 0;
6972 int haifa_last_clock = -1;6976 int haifa_last_clock = -1;
6973 int haifa_clock = 0;6977 int haifa_clock = 0;
6978 int issued_insns = 0;
6974 insn_t insn;6979 insn_t insn;
69756980
6976 if (targetm.sched.md_init)6981 if (targetm.sched.md_init)
@@ -6989,7 +6994,7 @@
6989 {6994 {
6990 int cost, haifa_cost;6995 int cost, haifa_cost;
6991 int sort_p;6996 int sort_p;
6992 bool asm_p, real_insn, after_stall;6997 bool asm_p, real_insn, after_stall, all_issued;
6993 int clock;6998 int clock;
69946999
6995 if (!INSN_P (insn))7000 if (!INSN_P (insn))
@@ -7025,7 +7030,9 @@
7025 haifa_cost = cost;7030 haifa_cost = cost;
7026 after_stall = 1;7031 after_stall = 1;
7027 }7032 }
70287033 all_issued = issued_insns == issue_rate;
7034 if (haifa_cost == 0 && all_issued)
7035 haifa_cost = 1;
7029 if (haifa_cost > 0)7036 if (haifa_cost > 0)
7030 {7037 {
7031 int i = 0;7038 int i = 0;
@@ -7033,6 +7040,7 @@
7033 while (haifa_cost--)7040 while (haifa_cost--)
7034 {7041 {
7035 advance_state (curr_state);7042 advance_state (curr_state);
7043 issued_insns = 0;
7036 i++;7044 i++;
70377045
7038 if (sched_verbose >= 2)7046 if (sched_verbose >= 2)
@@ -7049,9 +7057,22 @@
7049 && haifa_cost > 07057 && haifa_cost > 0
7050 && estimate_insn_cost (insn, curr_state) == 0)7058 && estimate_insn_cost (insn, curr_state) == 0)
7051 break;7059 break;
7052 }7060
7061 /* When the data dependency stall is longer than the DFA stall,
7062 and when we have issued exactly issue_rate insns and stalled,
7063 it could be that after this longer stall the insn will again
7064 become unavailable to the DFA restrictions. Looks strange
7065 but happens e.g. on x86-64. So recheck DFA on the last
7066 iteration. */
7067 if ((after_stall || all_issued)
7068 && real_insn
7069 && haifa_cost == 0)
7070 haifa_cost = estimate_insn_cost (insn, curr_state);
7071 }
70537072
7054 haifa_clock += i;7073 haifa_clock += i;
7074 if (sched_verbose >= 2)
7075 sel_print ("haifa clock: %d\n", haifa_clock);
7055 }7076 }
7056 else7077 else
7057 gcc_assert (haifa_cost == 0);7078 gcc_assert (haifa_cost == 0);
@@ -7065,21 +7086,27 @@
7065 &sort_p))7086 &sort_p))
7066 {7087 {
7067 advance_state (curr_state);7088 advance_state (curr_state);
7089 issued_insns = 0;
7068 haifa_clock++;7090 haifa_clock++;
7069 if (sched_verbose >= 2)7091 if (sched_verbose >= 2)
7070 {7092 {
7071 sel_print ("advance_state (dfa_new_cycle)\n");7093 sel_print ("advance_state (dfa_new_cycle)\n");
7072 debug_state (curr_state);7094 debug_state (curr_state);
7095 sel_print ("haifa clock: %d\n", haifa_clock + 1);
7073 }7096 }
7074 }7097 }
70757098
7076 if (real_insn)7099 if (real_insn)
7077 {7100 {
7078 cost = state_transition (curr_state, insn);7101 cost = state_transition (curr_state, insn);
7102 issued_insns++;
70797103
7080 if (sched_verbose >= 2)7104 if (sched_verbose >= 2)
7081 debug_state (curr_state);7105 {
70827106 sel_print ("scheduled insn %d, clock %d\n", INSN_UID (insn),
7107 haifa_clock + 1);
7108 debug_state (curr_state);
7109 }
7083 gcc_assert (cost < 0);7110 gcc_assert (cost < 0);
7084 }7111 }
70857112
@@ -7492,21 +7519,23 @@
7492 {7519 {
7493 basic_block bb = EBB_FIRST_BB (i);7520 basic_block bb = EBB_FIRST_BB (i);
74947521
7495 if (sel_bb_empty_p (bb))
7496 {
7497 bitmap_clear_bit (blocks_to_reschedule, bb->index);
7498 continue;
7499 }
7500
7501 if (bitmap_bit_p (blocks_to_reschedule, bb->index))7522 if (bitmap_bit_p (blocks_to_reschedule, bb->index))
7502 {7523 {
7524 if (! bb_ends_ebb_p (bb))
7525 bitmap_set_bit (blocks_to_reschedule, bb_next_bb (bb)->index);
7526 if (sel_bb_empty_p (bb))
7527 {
7528 bitmap_clear_bit (blocks_to_reschedule, bb->index);
7529 continue;
7530 }
7503 clear_outdated_rtx_info (bb);7531 clear_outdated_rtx_info (bb);
7504 if (sel_insn_is_speculation_check (BB_END (bb))7532 if (sel_insn_is_speculation_check (BB_END (bb))
7505 && JUMP_P (BB_END (bb)))7533 && JUMP_P (BB_END (bb)))
7506 bitmap_set_bit (blocks_to_reschedule,7534 bitmap_set_bit (blocks_to_reschedule,
7507 BRANCH_EDGE (bb)->dest->index);7535 BRANCH_EDGE (bb)->dest->index);
7508 }7536 }
7509 else if (INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0)7537 else if (! sel_bb_empty_p (bb)
7538 && INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0)
7510 bitmap_set_bit (blocks_to_reschedule, bb->index);7539 bitmap_set_bit (blocks_to_reschedule, bb->index);
7511 }7540 }
75127541
75137542
=== modified file 'gcc/simplify-rtx.c'
--- gcc/simplify-rtx.c 2011-04-14 13:58:12 +0000
+++ gcc/simplify-rtx.c 2011-04-28 16:44:05 +0000
@@ -1468,7 +1468,8 @@
1468 }1468 }
14691469
1470 else if (GET_CODE (op) == CONST_DOUBLE1470 else if (GET_CODE (op) == CONST_DOUBLE
1471 && SCALAR_FLOAT_MODE_P (mode))1471 && SCALAR_FLOAT_MODE_P (mode)
1472 && SCALAR_FLOAT_MODE_P (GET_MODE (op)))
1472 {1473 {
1473 REAL_VALUE_TYPE d, t;1474 REAL_VALUE_TYPE d, t;
1474 REAL_VALUE_FROM_CONST_DOUBLE (d, op);1475 REAL_VALUE_FROM_CONST_DOUBLE (d, op);
@@ -1491,7 +1492,10 @@
1491 d = real_value_truncate (mode, d);1492 d = real_value_truncate (mode, d);
1492 break;1493 break;
1493 case FLOAT_EXTEND:1494 case FLOAT_EXTEND:
1494 /* All this does is change the mode. */1495 /* All this does is change the mode, unless changing
1496 mode class. */
1497 if (GET_MODE_CLASS (mode) != GET_MODE_CLASS (GET_MODE (op)))
1498 real_convert (&d, mode, &d);
1495 break;1499 break;
1496 case FIX:1500 case FIX:
1497 real_arithmetic (&d, FIX_TRUNC_EXPR, &d, NULL);1501 real_arithmetic (&d, FIX_TRUNC_EXPR, &d, NULL);
14981502
=== modified file 'gcc/testsuite/ChangeLog'
--- gcc/testsuite/ChangeLog 2011-03-31 15:11:20 +0000
+++ gcc/testsuite/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,230 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
52011-04-27 Dodji Seketeli <dodji@redhat.com>
6
7 PR c++/46824, c++/42260, c++/45383
8 * g++.dg/conversion/cast2.C: New test.
9 * g++.dg/conversion/cast3.C: Likewise.
10 * g++.dg/conversion/cond4.C: Likewise.
11
122011-04-26 Jason Merrill <jason@redhat.com>
13
14 * g++.dg/lookup/koenig13.C: New.
15
162011-04-26 Jakub Jelinek <jakub@redhat.com>
17
18 Backported from mainline
19 2011-04-24 Jakub Jelinek <jakub@redhat.com>
20
21 PR preprocessor/48740
22 * c-c++-common/raw-string-11.c: New test.
23
242011-04-20 Jason Merrill <jason@redhat.com>
25
26 * g++.dg/template/operator11.C: New.
27
282011-04-19 Jason Merrill <jason@redhat.com>
29
30 * g++.dg/ext/complex7.C: New.
31
322011-04-19 Jason Merrill <jason@redhat.com>
33
34 * g++.dg/ext/attrib41.C: New.
35
362011-04-18 Richard Guenther <rguenther@suse.de>
37
38 Backported from 4.6 branch
39 2011-01-19 Jakub Jelinek <jakub@redhat.com>
40
41 PR tree-optimization/47290
42 * g++.dg/torture/pr47290.C: New test.
43
44 2010-05-29 Jan Hubicka <jh@suse.cz>
45
46 PR tree-optimization/46364
47 * g++.dg/torture/pr46364.C: New testcase.
48
492011-04-18 Richard Guenther <rguenther@suse.de>
50
51 Backported from 4.6 branch
52 2011-03-11 Jakub Jelinek <jakub@redhat.com>
53
54 PR c++/48035
55 * g++.dg/inherit/virtual8.C: New test.
56
57 2011-03-05 Zdenek Dvorak <ook@ucw.cz>
58
59 PR rtl-optimization/47899
60 * gcc.dg/pr47899.c: New test.
61
622011-04-16 Jakub Jelinek <jakub@redhat.com>
63
64 Backported from 4.6 branch
65 2011-04-15 Jakub Jelinek <jakub@redhat.com>
66
67 PR target/48605
68 * gcc.target/i386/sse4_1-insertps-3.c: New test.
69 * gcc.target/i386/sse4_1-insertps-4.c: New test.
70 * gcc.target/i386/avx-insertps-3.c: New test.
71 * gcc.target/i386/avx-insertps-4.c: New test.
72
732011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
74
75 Backport from mainline:
76 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
77
78 PR testsuite/47400
79 * lib/target-supports.exp (check_ascii_locale_available): New proc.
80 * lib/target-supports-dg.exp (dg-require-ascii-locale): New proc.
81 * gcc.dg/attr-alias-5.c: Use dg-require-ascii-locale.
82 * gcc.dg/ucnid-10.c: Likewise.
83 * gcc.dg/ucnid-13.c: Likewise.
84 * gcc.dg/ucnid-7.c: Likewise.
85 * gcc.dg/ucnid-8.c: Likewise.
86 Adapt dg-warning line number.
87
882011-04-07 Jakub Jelinek <jakub@redhat.com>
89
90 PR fortran/48117
91 * gfortran.dg/gomp/pr48117.f90: New test.
92
93 Backported from mainline
94 2011-04-06 Jakub Jelinek <jakub@redhat.com>
95
96 PR debug/48466
97 * gcc.dg/guality/pr36977.c: New test.
98 * gcc.dg/guality/pr48466.c: New test.
99
100 2011-03-24 Jakub Jelinek <jakub@redhat.com>
101
102 PR debug/48204
103 * gcc.dg/dfp/pr48204.c: New test.
104
105 2011-03-17 Jakub Jelinek <jakub@redhat.com>
106
107 PR rtl-optimization/48141
108 * gcc.dg/pr48141.c: New test.
109
110 2011-03-03 Jakub Jelinek <jakub@redhat.com>
111
112 PR c/47963
113 * gcc.dg/gomp/pr47963.c: New test.
114 * g++.dg/gomp/pr47963.C: New test.
115
116 2011-02-19 Jakub Jelinek <jakub@redhat.com>
117
118 PR c/47809
119 * gcc.target/i386/pr47809.c: New test.
120
121 2011-01-26 Jakub Jelinek <jakub@redhat.com>
122
123 PR c/47473
124 * gcc.dg/torture/pr47473.c: New test.
125
126 2011-01-21 Jakub Jelinek <jakub@redhat.com>
127
128 PR tree-optimization/47391
129 * gcc.dg/pr47391.c: New test.
130
1312011-04-07 Andrey Belevantsev <abel@ispras.ru>
132
133 Backport from mainline
134 2011-03-26 Andrey Belevantsev <abel@ispras.ru>
135
136 PR rtl-optimization/48144
137 * gcc.dg/pr48144.c: New test.
138
1392011-04-07 Andrey Belevantsev <abel@ispras.ru>
140
141 Backport from mainline
142 2011-01-13 Andrey Belevantsev <abel@ispras.ru>
143
144 PR rtl-optimization/45352
145 * gcc.dg/pr45352-3.c: New.
146
147 Backport from mainline
148 2010-12-22 Andrey Belevantsev <abel@ispras.ru>
149
150 PR rtl-optimization/45352
151 PR rtl-optimization/46521
152 PR rtl-optimization/46522
153 * gcc.dg/pr46521.c: New.
154 * gcc.dg/pr46522.c: New.
155
156 Backport from mainline
157 2010-11-08 Andrey Belevantsev <abel@ispras.ru>
158
159 PR rtl-optimization/45352
160 gcc.dg/pr45352.c, gcc.dg/pr45352-1.c, gcc.dg/pr45352-2.c: New tests.
161 gcc.target/i386/pr45352.c, gcc.target/i386/pr45352-1.c,
162 gcc.target/i386/pr45352-2.c: New tests.
163
1642011-04-07 Andrey Belevantsev <abel@ispras.ru>
165
166 Backport from mainline
167 2010-12-24 Alexander Monakov <amonakov@ispras.ru>
168
169 PR rtl-optimization/47036
170 * g++.dg/opt/pr47036.C: New.
171
1722011-04-07 Andrey Belevantsev <abel@ispras.ru>
173
174 Backport from mainline
175 2010-12-15 Alexander Monakov <amonakov@ispras.ru>
176
177 PR rtl-optimization/46649
178 * g++.dg/opt/pr46649.C: New.
179
1802011-04-07 Andrey Belevantsev <abel@ispras.ru>
181
182 Backport from mainline
183 2010-12-14 Alexander Monakov <amonakov@ispras.ru>
184
185 PR rtl-optimization/46875
186 * gcc.dg/pr46875.c: New.
187
1882011-04-07 Andrey Belevantsev <abel@ispras.ru>
189
190 Backport from mainline
191 2010-12-07 Andrey Belevantsev <abel@ispras.ru>
192
193 PR target/43603
194 * gcc.target/ia64/pr43603.c: New.
195 * gcc/testsuite/g++.dg/opt/pr46640.C: New.
196
1972011-04-07 Andrey Belevantsev <abel@ispras.ru>
198
199 Backport from mainline
200 2010-12-03 Alexander Monakov <amonakov@ispras.ru>
201
202 PR rtl-optimization/45354
203 * gcc.dg/tree-prof/pr45354.c: New.
204
2052011-04-07 Andrey Belevantsev <abel@ispras.ru>
206
207 Backport from mainline
208 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
209
210 PR rtl-optimization/46585
211 * gcc.dg/pr46585.c: New.
212
2132011-04-07 Andrey Belevantsev <abel@ispras.ru>
214
215 Backport from mainline
216 2010-11-22 Alexander Monakov <amonakov@ispras.ru>
217
218 PR rtl-optimization/45652
219 * gcc.dg/pr45652.c: New.
220
2212011-04-07 Andrey Belevantsev <abel@ispras.ru>
222
223 Backport from mainline
224 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
225 PR rtl-optimization/45570
226 * gcc.dg/pr45570.c: New test.
227
12011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2282011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2229
3 PR target/16292230 PR target/16292
4231
=== added file 'gcc/testsuite/c-c++-common/raw-string-11.c'
--- gcc/testsuite/c-c++-common/raw-string-11.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/c-c++-common/raw-string-11.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,13 @@
1// PR preprocessor/48740
2// { dg-options "-std=gnu99 -trigraphs -save-temps" { target c } }
3// { dg-options "-std=c++0x -save-temps" { target c++ } }
4// { dg-do run }
5
6int main ()
7{
8 return __builtin_memcmp (R"raw(foo%sbar%sfred%sbob?????)raw",
9 "foo%sbar%sfred%sbob?""?""?""?""?",
10 sizeof ("foo%sbar%sfred%sbob?""?""?""?""?"));
11}
12
13// { dg-final { cleanup-saved-temps } }
014
=== added file 'gcc/testsuite/g++.dg/conversion/cast2.C'
--- gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/conversion/cast2.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,10 @@
1// Contributed by Dodji Seketeli <dodji@redhat.com>
2// Origin: PR c++/42260
3// { dg-do compile }
4
5struct A
6{
7 template<typename T> operator T*();
8};
9
10int i = *A();// { dg-error "no match" }
011
=== removed file 'gcc/testsuite/g++.dg/conversion/cast2.C'
--- gcc/testsuite/g++.dg/conversion/cast2.C 2009-12-23 00:31:33 +0000
+++ gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
1// Contributed by Dodji Seketeli <dodji@redhat.com>
2// Origin: PR c++/42260
3// { dg-do compile }
4
5struct A
6{
7 template<typename T> operator T*();
8};
9
10int i = *A();// { dg-error "no match" }
11
120
=== added file 'gcc/testsuite/g++.dg/conversion/cast3.C'
--- gcc/testsuite/g++.dg/conversion/cast3.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/conversion/cast3.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,14 @@
1// Origin: PR c++/46824
2
3class Incomplete;
4struct Ptr
5{
6 operator Incomplete*();
7};
8
9int
10main()
11{
12 Ptr p;
13 *p;
14}
015
=== added file 'gcc/testsuite/g++.dg/conversion/cond4.C'
--- gcc/testsuite/g++.dg/conversion/cond4.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/conversion/cond4.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,31 @@
1// Origin: PR c++/45383
2// { dg-do run }
3
4struct null {
5 null() {}
6 template<class T>
7 operator T*() const {
8 return 0;
9 }
10
11 template<class C, class T>
12 operator T C::*() const {
13 return 0;
14 }
15private:
16 null(const null&);
17 null& operator=(const null&);
18 void operator&() const;
19};
20
21static struct null null;
22
23int
24main()
25{
26 int* ptr = null;
27 if (ptr == null)
28 return 0;
29 if (ptr != null)
30 return 1;
31}
032
=== added file 'gcc/testsuite/g++.dg/ext/attrib41.C'
--- gcc/testsuite/g++.dg/ext/attrib41.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/ext/attrib41.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,19 @@
1// PR c++/45267
2// { dg-options "-O" }
3
4template<typename T> struct Vector {
5 Vector(long long x);
6 inline Vector<T> operator<<(int x) const __attribute__((always_inline));
7};
8long long bar (long long);
9template<> inline Vector<int> Vector<int>::operator<<(int x) const {
10 return bar(x);
11}
12bool b;
13int main() {
14 Vector<int> a(1);
15 if ((a << 2), b) {
16 a << 2;
17 throw 1;
18 }
19}
020
=== added file 'gcc/testsuite/g++.dg/ext/complex7.C'
--- gcc/testsuite/g++.dg/ext/complex7.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/ext/complex7.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,6 @@
1// { dg-options "" }
2
3class A
4{
5 static const _Complex double x = 1.0 + 2.0i;
6};
07
=== added file 'gcc/testsuite/g++.dg/gomp/pr47963.C'
--- gcc/testsuite/g++.dg/gomp/pr47963.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/gomp/pr47963.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,11 @@
1// PR c/47963
2// { dg-do compile }
3// { dg-options "-fopenmp" }
4
5void
6foo (float n)
7{
8 int A[n][n]; // { dg-error "has non-integral type" }
9#pragma omp parallel private(A)
10 ;
11}
012
=== added file 'gcc/testsuite/g++.dg/inherit/virtual8.C'
--- gcc/testsuite/g++.dg/inherit/virtual8.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/inherit/virtual8.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,48 @@
1// PR c++/48035
2// { dg-do run }
3
4#include <new>
5#include <cstring>
6#include <cstdlib>
7
8struct A
9{
10 virtual void foo (void) {}
11 virtual ~A () {}
12};
13
14struct B : public A
15{
16 virtual ~B () {}
17};
18
19struct C
20{
21 virtual ~C () {}
22 int c;
23};
24
25struct D : public virtual B, public C
26{
27 virtual ~D () {}
28};
29
30struct E : public virtual D
31{
32 virtual ~E () {}
33};
34
35int
36main ()
37{
38 char *v = new char[sizeof (E) + 16];
39 memset (v, 0x55, sizeof (E) + 16);
40 E *e = new (v) E ();
41 e->~E ();
42
43 for (unsigned i = sizeof (E); i < sizeof (E) + 16; ++i)
44 if (v[i] != 0x55)
45 abort ();
46
47 delete[] v;
48}
049
=== added file 'gcc/testsuite/g++.dg/lookup/koenig13.C'
--- gcc/testsuite/g++.dg/lookup/koenig13.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/lookup/koenig13.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,16 @@
1// PR c++/42687
2// DR 705
3
4namespace N
5{
6 struct S { };
7 void f(const S &) { }
8}
9
10void f(const N::S &) { }
11
12int main()
13{
14 N::S v;
15 (f)(v); // no ambiguity: ADL is prevented with (), only ::f is considered
16}
017
=== added file 'gcc/testsuite/g++.dg/opt/pr46640.C'
--- gcc/testsuite/g++.dg/opt/pr46640.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/opt/pr46640.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,44 @@
1// { dg-do compile { target x86_64-*-* } }
2// { dg-options "-fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2 -fno-exceptions -O" }
3
4struct QBasicAtomicInt
5{
6 int i, j;
7 bool deref ()
8 {
9 asm volatile ("":"=m" (i), "=qm" (j));
10 }
11};
12
13struct Data
14{
15 QBasicAtomicInt ref;
16 void *data;
17};
18
19struct QByteArray
20{
21 Data * d;
22 ~QByteArray ()
23 {
24 d->ref.deref ();
25 }
26};
27
28int indexOf (unsigned);
29int stat (void *, int *);
30QByteArray encodeName ();
31
32bool makeDir (unsigned len)
33{
34 unsigned i = 0;
35 while (len)
36 {
37 int st;
38 int pos = indexOf (i);
39 QByteArray baseEncoded = encodeName ();
40 if (stat (baseEncoded.d->data, &st) && stat (baseEncoded.d, &st))
41 return false;
42 i = pos;
43 }
44}
045
=== added file 'gcc/testsuite/g++.dg/opt/pr46649.C'
--- gcc/testsuite/g++.dg/opt/pr46649.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/opt/pr46649.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,9 @@
1// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } }
2// { dg-options "-fschedule-insns -fselective-scheduling" }
3
4void foo ()
5{
6 for (;;)
7 for (;;({break;}))
8 ;
9}
010
=== added file 'gcc/testsuite/g++.dg/opt/pr47036.C'
--- gcc/testsuite/g++.dg/opt/pr47036.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/opt/pr47036.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,10 @@
1// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } }
2// { dg-options "-fschedule-insns -fselective-scheduling -fno-dce" }
3
4
5void foo ()
6{
7 for (;;)
8 for (;;({break;}));
9}
10
011
=== added file 'gcc/testsuite/g++.dg/template/operator11.C'
--- gcc/testsuite/g++.dg/template/operator11.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/operator11.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,25 @@
1// PR c++/48594
2// Test for uses of (X->*Y)() that don't actually involve a
3// pointer to member function.
4
5struct A { } a;
6struct B { } b;
7struct C * cp;
8
9struct Func { void operator()(); };
10Func operator->* (A, int);
11
12typedef void (*pfn)();
13pfn operator->* (B, int);
14
15pfn C::*cpfn;
16Func C::*cfunc;
17
18template <class T>
19void f()
20{
21 (a->*1)();
22 (b->*1)();
23 (cp->*cpfn)();
24 (cp->*cfunc)();
25}
026
=== added file 'gcc/testsuite/g++.dg/torture/pr46364.C'
--- gcc/testsuite/g++.dg/torture/pr46364.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/torture/pr46364.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,20 @@
1// { dg-do compile }
2#include <string>
3
4void a() throw (int);
5void b(std::string const &);
6
7void c(std::string *e)
8{
9 b("");
10
11 try {
12 a();
13 } catch (...) {
14 *e = "";
15 }
16}
17
18void d() {
19 c(0);
20}
021
=== added file 'gcc/testsuite/g++.dg/torture/pr47290.C'
--- gcc/testsuite/g++.dg/torture/pr47290.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/torture/pr47290.C 2011-04-28 16:44:05 +0000
@@ -0,0 +1,19 @@
1// PR tree-optimization/47290
2// { dg-do compile }
3
4struct V
5{
6 V (int = 0);
7 ~V ()
8 {
9 for (;;)
10 ;
11 }
12 int size ();
13};
14
15struct S
16{
17 V a, b;
18 S () : b (a.size ()) {}
19} s;
020
=== modified file 'gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog'
--- gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2010-12-16 12:32:45 +0000
+++ gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'gcc/testsuite/gcc.dg/attr-alias-5.c'
--- gcc/testsuite/gcc.dg/attr-alias-5.c 2009-05-04 11:23:50 +0000
+++ gcc/testsuite/gcc.dg/attr-alias-5.c 2011-04-28 16:44:05 +0000
@@ -3,6 +3,7 @@
3/* { dg-do compile } */3/* { dg-do compile } */
4/* { dg-options "-std=gnu99" } */4/* { dg-options "-std=gnu99" } */
5/* { dg-require-alias "" } */5/* { dg-require-alias "" } */
6/* { dg-require-ascii-locale "" } */
67
7void f0 (void) __attribute__((alias("\xa1"))); /* { dg-error "undefined symbol '\\\\241'" } */8void f0 (void) __attribute__((alias("\xa1"))); /* { dg-error "undefined symbol '\\\\241'" } */
8void f1 (void) __attribute__((alias("\u00e9"))); /* { dg-error "undefined symbol '\\\\U000000e9'" } */9void f1 (void) __attribute__((alias("\u00e9"))); /* { dg-error "undefined symbol '\\\\U000000e9'" } */
910
=== added file 'gcc/testsuite/gcc.dg/dfp/pr48204.c'
--- gcc/testsuite/gcc.dg/dfp/pr48204.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/dfp/pr48204.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,10 @@
1/* PR debug/48204 */
2/* { dg-do compile } */
3/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g" } */
4
5void
6foo (void)
7{
8 float cf = 3.0f;
9 _Decimal64 d64 = cf;
10}
011
=== added file 'gcc/testsuite/gcc.dg/gomp/pr47963.c'
--- gcc/testsuite/gcc.dg/gomp/pr47963.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/gomp/pr47963.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,11 @@
1/* PR c/47963 */
2/* { dg-do compile } */
3/* { dg-options "-fopenmp" } */
4
5void
6foo (float n)
7{
8 int A[n][n]; /* { dg-error "has non-integer type" } */
9#pragma omp parallel private(A)
10 ;
11}
012
=== added file 'gcc/testsuite/gcc.dg/guality/pr36977.c'
--- gcc/testsuite/gcc.dg/guality/pr36977.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/guality/pr36977.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,32 @@
1/* PR debug/36977 */
2/* { dg-do run } */
3/* { dg-options "-g" } */
4/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
5
6void
7foo ()
8{
9}
10
11int
12main ()
13{
14 struct { char c[100]; } cbig;
15 struct { int i[800]; } ibig;
16 struct { long l[900]; } lbig;
17 struct { float f[200]; } fbig;
18 struct { double d[300]; } dbig;
19 struct { short s[400]; } sbig;
20
21 ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */
22 ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */
23 cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */
24 cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */
25 fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */
26 dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */
27 sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */
28 lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */
29
30 foo ();
31 return 0;
32}
033
=== added file 'gcc/testsuite/gcc.dg/guality/pr48466.c'
--- gcc/testsuite/gcc.dg/guality/pr48466.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/guality/pr48466.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,41 @@
1/* PR debug/48466 */
2/* { dg-do run } */
3/* { dg-options "-g" } */
4/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
5
6struct S { unsigned int a; unsigned int *b; };
7struct T { struct S a; struct S b; };
8struct U { const char *u; };
9int n[10];
10volatile int v;
11
12struct U
13foo (const char *s)
14{
15 struct U r;
16 r.u = s;
17 return r;
18}
19
20void
21bar (struct T *s, int a, int b)
22{
23 s->a.a = a;
24 s->a.b = &s->a.a;
25 s->b.a = b;
26 s->b.b = &s->b.a;
27}
28
29int
30main ()
31{
32 struct T t;
33 struct U x = foo ("this is x");
34 struct S y, z;
35 y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */
36 y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */
37 bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */
38 v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */
39 z = y;
40 return 0;
41}
042
=== added file 'gcc/testsuite/gcc.dg/pr45352-1.c'
--- gcc/testsuite/gcc.dg/pr45352-1.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45352-1.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,13 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-O3 -fschedule-insns -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining -funroll-loops -fprefetch-loop-arrays" } */
3
4void main1 (float *pa, float *pc)
5{
6 int i;
7 float b[256];
8 float c[256];
9 for (i = 0; i < 256; i++)
10 b[i] = c[i] = pc[i];
11 for (i = 0; i < 256; i++)
12 pa[i] = b[i] * c[i];
13}
014
=== added file 'gcc/testsuite/gcc.dg/pr45352-2.c'
--- gcc/testsuite/gcc.dg/pr45352-2.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45352-2.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,17 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-O1 -freorder-blocks -fschedule-insns2 -funswitch-loops -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
3void
4foo1 (int *s)
5{
6 s[0] = s[1];
7 while (s[6] - s[8])
8 {
9 s[6] -= s[8];
10 if (s[8] || s[0])
11 {
12 s[3] += s[0];
13 s[4] += s[1];
14 }
15 s[7]++;
16 }
17}
018
=== added file 'gcc/testsuite/gcc.dg/pr45352-3.c'
--- gcc/testsuite/gcc.dg/pr45352-3.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45352-3.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,16 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-O -fprofile-generate -fgcse -fno-gcse-lm -fgcse-sm -fno-ivopts -fno-tree-loop-im -ftree-pre -funroll-loops -fno-web -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining" } */
3
4extern volatile float f[];
5
6void foo (void)
7{
8 int i;
9 for (i = 0; i < 100; i++)
10 f[i] = 0;
11 for (i = 0; i < 100; i++)
12 f[i] = 0;
13 for (i = 0; i < 100; i++)
14 if (f[i])
15 __builtin_abort ();
16}
017
=== added file 'gcc/testsuite/gcc.dg/pr45352.c'
--- gcc/testsuite/gcc.dg/pr45352.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45352.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,24 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate" } */
3
4static inline void
5bmp_iter_next (int *bi, int *bit_no)
6{
7 *bi >>= 1;
8 *bit_no += 1;
9}
10
11int bmp_iter_set (int *bi, int *bit_no);
12void bitmap_initialize_stat (int, ...);
13void bitmap_clear (void);
14
15void
16df_md_alloc (int bi, int bb_index, void *bb_info)
17{
18 for (; bmp_iter_set (&bi, &bb_index); bmp_iter_next (&bi, &bb_index))
19
20 if (bb_info)
21 bitmap_clear ();
22 else
23 bitmap_initialize_stat (0);
24}
025
=== added file 'gcc/testsuite/gcc.dg/pr45570.c'
--- gcc/testsuite/gcc.dg/pr45570.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45570.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,28 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
2/* { dg-options "-O3 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -ftracer" } */
3void
4parser_get_next_char (char c, int qm, char *p)
5{
6 int quote_mode = 0;
7 for (; *p; p++)
8 {
9 if (qm)
10 {
11 if (quote_mode == 0 && *p == '"' && *(p - 1))
12 {
13 quote_mode = 1;
14 continue;
15 }
16 if (quote_mode && *p == '"' && *(p - 1))
17 quote_mode = 0;
18 }
19 if (quote_mode == 0 && *p == c && *(p - 1))
20 break;
21 }
22}
23
24void
25parser_get_next_parameter (char *p)
26{
27 parser_get_next_char (':', 1, p);
28}
029
=== added file 'gcc/testsuite/gcc.dg/pr45652.c'
--- gcc/testsuite/gcc.dg/pr45652.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr45652.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,39 @@
1/* { dg-do run { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-O2 -fselective-scheduling2" } */
3
4struct S {
5 double i[2];
6};
7
8void __attribute__ ((noinline)) checkcd (struct S x)
9{
10 if (x.i[0] != 7.0 || x.i[1] != 8.0)
11 __builtin_abort ();
12}
13
14void __attribute__ ((noinline)) testvacd (int n, ...)
15{
16 int i;
17 __builtin_va_list ap;
18 __builtin_va_start (ap, n);
19 for (i = 0; i < n; i++)
20 {
21 struct S t = __builtin_va_arg (ap, struct S);
22 checkcd (t);
23 }
24 __builtin_va_end (ap);
25}
26
27void
28testitcd (void)
29{
30 struct S x = { { 7.0, 8.0 } };
31 testvacd (2, x, x);
32}
33
34int
35main ()
36{
37 testitcd ();
38 return 0;
39}
040
=== added file 'gcc/testsuite/gcc.dg/pr46521.c'
--- gcc/testsuite/gcc.dg/pr46521.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr46521.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,20 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate -fno-early-inlining" } */
3
4static void bmp_iter_next (int *bi)
5{
6 *bi >>= 1;
7}
8
9int bmp_iter_set (int *, int);
10void bitmap_clear (void);
11void bitmap_initialize_stat (void);
12
13void df_md_alloc (int bi, int bb_index, int bb_info)
14{
15 for (; bmp_iter_set (&bi, bb_index); bmp_iter_next (&bi))
16 if (bb_info)
17 bitmap_clear ();
18 else
19 bitmap_initialize_stat ();
20}
021
=== added file 'gcc/testsuite/gcc.dg/pr46522.c'
--- gcc/testsuite/gcc.dg/pr46522.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr46522.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,33 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-O3 -fkeep-inline-functions -fsel-sched-pipelining -fselective-scheduling2 -funroll-loops" } */
3
4struct S
5{
6 unsigned i, j;
7};
8
9static inline void
10bar (struct S *s)
11{
12 if (s->i++ == 1)
13 {
14 s->i = 0;
15 s->j++;
16 }
17}
18
19void
20foo1 (struct S *s)
21{
22 bar (s);
23}
24
25void
26foo2 (struct S s1, struct S s2, int i)
27{
28 while (s1.i != s2.i) {
29 if (i)
30 *(unsigned *) 0 |= (1U << s1.i);
31 bar (&s1);
32 }
33}
034
=== added file 'gcc/testsuite/gcc.dg/pr46585.c'
--- gcc/testsuite/gcc.dg/pr46585.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr46585.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,11 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
2/* { dg-options "-fno-dce -fschedule-insns -fselective-scheduling" } */
3void
4foo (void)
5{
6 switch (0)
7 {
8 default:
9 break;
10 }
11}
012
=== added file 'gcc/testsuite/gcc.dg/pr46875.c'
--- gcc/testsuite/gcc.dg/pr46875.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr46875.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,27 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
2/* { dg-options "-Os -fselective-scheduling2" } */
3
4long
5foo (int x, long *y)
6{
7 long a = 0;
8 switch (x)
9 {
10 case 0:
11 a = *y;
12 break;
13 case 1:
14 a = *y;
15 break;
16 case 2:
17 a = *y;
18 break;
19 case 3:
20 a = *y;
21 break;
22 case 4:
23 a = *y;
24 break;
25 }
26 return a;
27}
028
=== added file 'gcc/testsuite/gcc.dg/pr47391.c'
--- gcc/testsuite/gcc.dg/pr47391.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr47391.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,22 @@
1/* PR tree-optimization/47391 */
2/* { dg-do compile } */
3/* { dg-options "-O2 -fdump-tree-optimized" } */
4
5const volatile int v = 1;
6int i = 0;
7
8void
9foo (void)
10{
11 i = v;
12}
13
14int
15main (void)
16{
17 foo ();
18 return 0;
19}
20
21/* { dg-final { scan-tree-dump-not "i = 1;" "optimized" } } */
22/* { dg-final { cleanup-tree-dump "optimized" } } */
023
=== added file 'gcc/testsuite/gcc.dg/pr47899.c'
--- gcc/testsuite/gcc.dg/pr47899.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr47899.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,26 @@
1/* PR rtl-optimization/47899 */
2/* { dg-do compile } */
3/* { dg-options "-O -funroll-loops" } */
4
5extern unsigned int a, b, c;
6extern int d;
7
8static int
9foo (void)
10{
11lab:
12 if (b)
13 for (d = 0; d >= 0; d--)
14 if (a || c)
15 for (; c; c++)
16 ;
17 else
18 goto lab;
19}
20
21int
22main ()
23{
24 foo ();
25 return 0;
26}
027
=== added file 'gcc/testsuite/gcc.dg/pr48141.c'
--- gcc/testsuite/gcc.dg/pr48141.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr48141.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,17 @@
1/* PR rtl-optimization/48141 */
2/* { dg-do compile } */
3/* { dg-options "-O -fno-tree-fre" } */
4
5#define A i = 0;
6#define B A A A A A A A A A A
7#define C B B B B B B B B B B
8#define D C C C C C C C C C C
9#define E D D D D D D D D D D
10
11int
12foo (void)
13{
14 volatile int i = 0;
15 E E E E E E E E E E E
16 return 0;
17}
018
=== added file 'gcc/testsuite/gcc.dg/pr48144.c'
--- gcc/testsuite/gcc.dg/pr48144.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/pr48144.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,16 @@
1/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
2/* { dg-options "-O -frerun-cse-after-loop -fschedule-insns2 -fselective-scheduling2 -fno-tree-ch -funroll-loops --param=max-sched-extend-regions-iters=2 --param=max-sched-region-blocks=15" } */
3extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n);
4
5void bar (void *, void *, void *);
6
7void foo
8 (void *p, char *data, unsigned data_len)
9{
10 int buffer[8];
11 int buf2[8];
12 unsigned i;
13 for (i = 0; i + 8 <= data_len; i += 8)
14 bar (p, buffer, data + i);
15 memcpy (buf2, data + i, data_len);
16}
017
=== added file 'gcc/testsuite/gcc.dg/torture/pr47473.c'
--- gcc/testsuite/gcc.dg/torture/pr47473.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr47473.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,14 @@
1/* PR c/47473 */
2/* { dg-do run } */
3/* { dg-options "-std=c99" } */
4
5int
6main (void)
7{
8 long double _Complex w = 0.2L - 0.3iL;
9 w = w * (0.3L - (0.0F + 1.0iF) * 0.9L);
10 if (__builtin_fabsl (__real__ w + 0.21L) > 0.001L
11 || __builtin_fabsl (__imag__ w + 0.27L) > 0.001L)
12 __builtin_abort ();
13 return 0;
14}
015
=== added file 'gcc/testsuite/gcc.dg/tree-prof/pr45354.c'
--- gcc/testsuite/gcc.dg/tree-prof/pr45354.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/tree-prof/pr45354.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,43 @@
1/* { dg-require-effective-target freorder } */
2/* { dg-options "-O -freorder-blocks-and-partition -fschedule-insns -fselective-scheduling" { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3
4extern void abort (void);
5
6int ifelse_val2;
7
8int __attribute__((noinline))
9test_ifelse2 (int i)
10{
11 int result = 0;
12 if (!i) /* count(6) */
13 result = 1; /* count(1) */
14 if (i == 1) /* count(6) */
15 result = 1024;
16 if (i == 2) /* count(6) */
17 result = 2; /* count(3) */
18 if (i == 3) /* count(6) */
19 return 8; /* count(2) */
20 if (i == 4) /* count(4) */
21 return 2048;
22 return result; /* count(4) */
23}
24
25void __attribute__((noinline))
26call_ifelse ()
27{
28 ifelse_val2 += test_ifelse2 (0);
29 ifelse_val2 += test_ifelse2 (2);
30 ifelse_val2 += test_ifelse2 (2);
31 ifelse_val2 += test_ifelse2 (2);
32 ifelse_val2 += test_ifelse2 (3);
33 ifelse_val2 += test_ifelse2 (3);
34}
35
36int
37main()
38{
39 call_ifelse ();
40 if (ifelse_val2 != 23)
41 abort ();
42 return 0;
43}
044
=== modified file 'gcc/testsuite/gcc.dg/ucnid-10.c'
--- gcc/testsuite/gcc.dg/ucnid-10.c 2009-05-04 19:24:22 +0000
+++ gcc/testsuite/gcc.dg/ucnid-10.c 2011-04-28 16:44:05 +0000
@@ -2,6 +2,7 @@
2 locale). Test #pragma pack diagnostics. */2 locale). Test #pragma pack diagnostics. */
3/* { dg-do compile { target *-*-linux* *-*-cygwin* powerpc*-*-eabi* } } */3/* { dg-do compile { target *-*-linux* *-*-cygwin* powerpc*-*-eabi* } } */
4/* { dg-options "-std=gnu99 -fextended-identifiers" } */4/* { dg-options "-std=gnu99 -fextended-identifiers" } */
5/* { dg-require-ascii-locale "" } */
56
6#pragma pack(push)7#pragma pack(push)
7#pragma pack(pop, \u00f3) /* { dg-warning "pop, \\\\U000000f3.*push, \\\\U000000f3" } */8#pragma pack(pop, \u00f3) /* { dg-warning "pop, \\\\U000000f3.*push, \\\\U000000f3" } */
89
=== modified file 'gcc/testsuite/gcc.dg/ucnid-13.c'
--- gcc/testsuite/gcc.dg/ucnid-13.c 2009-05-04 22:44:36 +0000
+++ gcc/testsuite/gcc.dg/ucnid-13.c 2011-04-28 16:44:05 +0000
@@ -2,6 +2,7 @@
2 locale). Miscellaneous diagnostics. */2 locale). Miscellaneous diagnostics. */
3/* { dg-do compile } */3/* { dg-do compile } */
4/* { dg-options "-std=gnu99 -fextended-identifiers -Wpacked" } */4/* { dg-options "-std=gnu99 -fextended-identifiers -Wpacked" } */
5/* { dg-require-ascii-locale "" } */
56
6int a __attribute__((\u00c0)); /* { dg-warning "'\\\\U000000c0' attribute directive ignored" } */7int a __attribute__((\u00c0)); /* { dg-warning "'\\\\U000000c0' attribute directive ignored" } */
78
89
=== modified file 'gcc/testsuite/gcc.dg/ucnid-7.c'
--- gcc/testsuite/gcc.dg/ucnid-7.c 2009-05-04 11:23:50 +0000
+++ gcc/testsuite/gcc.dg/ucnid-7.c 2011-04-28 16:44:05 +0000
@@ -2,6 +2,7 @@
2 locale). */2 locale). */
3/* { dg-do compile } */3/* { dg-do compile } */
4/* { dg-options "-std=c99 -fextended-identifiers" } */4/* { dg-options "-std=c99 -fextended-identifiers" } */
5/* { dg-require-ascii-locale "" } */
56
6void *p = &\u00e9; /* { dg-error "'\\\\U000000e9' undeclared" } */7void *p = &\u00e9; /* { dg-error "'\\\\U000000e9' undeclared" } */
7void *q = &\u1e00; /* { dg-error "'\\\\U00001e00' undeclared" } */8void *q = &\u1e00; /* { dg-error "'\\\\U00001e00' undeclared" } */
89
=== modified file 'gcc/testsuite/gcc.dg/ucnid-8.c'
--- gcc/testsuite/gcc.dg/ucnid-8.c 2009-05-04 19:24:22 +0000
+++ gcc/testsuite/gcc.dg/ucnid-8.c 2011-04-28 16:44:05 +0000
@@ -2,6 +2,7 @@
2 locale). Further tests of C front-end diagnostics. */2 locale). Further tests of C front-end diagnostics. */
3/* { dg-do compile } */3/* { dg-do compile } */
4/* { dg-options "-std=gnu99 -fextended-identifiers -Wvla" } */4/* { dg-options "-std=gnu99 -fextended-identifiers -Wvla" } */
5/* { dg-require-ascii-locale "" } */
56
6int a __attribute__((__mode__(\u00e9))); /* { dg-error "unknown machine mode '\\\\U000000e9'" } */7int a __attribute__((__mode__(\u00e9))); /* { dg-error "unknown machine mode '\\\\U000000e9'" } */
7struct s1 { int \u00e9 : 0; }; /* { dg-error "zero width for bit-field '\\\\U000000e9'" } */8struct s1 { int \u00e9 : 0; }; /* { dg-error "zero width for bit-field '\\\\U000000e9'" } */
@@ -11,4 +12,4 @@
11void g (static int \u00e9); /* { dg-error "storage class specified for parameter '\\\\U000000e9'" } */12void g (static int \u00e9); /* { dg-error "storage class specified for parameter '\\\\U000000e9'" } */
1213
13struct s2 { int \u00e1; } \u00e9 = { { 0 } }; /* { dg-warning "braces around scalar initializer" } */14struct s2 { int \u00e1; } \u00e9 = { { 0 } }; /* { dg-warning "braces around scalar initializer" } */
14/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 13 } */15/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 14 } */
1516
=== added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c'
--- gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,8 @@
1/* { dg-do run { target ilp32 } } */
2/* { dg-require-effective-target avx } */
3/* { dg-options "-O2 -mfpmath=sse -mavx -mtune=geode" } */
4
5#define CHECK_H "avx-check.h"
6#define TEST avx_test
7
8#include "sse4_1-insertps-3.c"
09
=== added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c'
--- gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,8 @@
1/* { dg-do run } */
2/* { dg-require-effective-target avx } */
3/* { dg-options "-O2 -mfpmath=sse -mavx" } */
4
5#define CHECK_H "avx-check.h"
6#define TEST avx_test
7
8#include "sse4_1-insertps-4.c"
09
=== added file 'gcc/testsuite/gcc.target/i386/pr45352-1.c'
--- gcc/testsuite/gcc.target/i386/pr45352-1.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/pr45352-1.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,19 @@
1/* { dg-do compile } */
2/* { dg-options "-mtune=amdfam10 -O3 -fpeel-loops -fselective-scheduling2 -fsel-sched-pipelining -fPIC" } */
3
4static int FIR_Tab_16[16][16];
5
6void
7V_Pass_Avrg_16_C_ref (int *Dst, int *Src, int W, int BpS, int Rnd)
8{
9 while (W-- > 0)
10 {
11 int i, k;
12 int Sums[16] = { };
13 for (i = 0; i < 16; ++i)
14 for (k = 0; k < 16; ++k)
15 Sums[k] += FIR_Tab_16[i][k] * Src[i];
16 for (i = 0; i < 16; ++i)
17 Dst[i] = Sums[i] + Src[i];
18 }
19}
020
=== added file 'gcc/testsuite/gcc.target/i386/pr45352-2.c'
--- gcc/testsuite/gcc.target/i386/pr45352-2.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/pr45352-2.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,109 @@
1/* { dg-do compile } */
2/* { dg-options "-O1 -mtune=amdfam10 -fexpensive-optimizations -fgcse -foptimize-register-move -freorder-blocks -fschedule-insns2 -funswitch-loops -fgcse-las -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
3
4typedef char uint8_t;
5typedef uint32_t;
6typedef vo_frame_t;
7struct vo_frame_s
8{
9 uint8_t base[3];
10 int pitches[3];};
11typedef struct
12{
13void
14 (*proc_macro_block)
15 (void);
16}
17xine_xvmc_t;
18typedef struct
19{
20 uint8_t ref[2][3];
21int pmv;
22}
23motion_t;
24typedef struct
25{
26 uint32_t bitstream_buf;
27 int bitstream_bits;
28 uint8_t * bitstream_ptr;
29 uint8_t dest[3];
30 int pitches[3];
31 int offset;
32 motion_t b_motion;
33 motion_t f_motion;
34 int v_offset;
35 int coded_picture_width;
36 int picture_structure;
37struct vo_frame_s *current_frame;}
38picture_t;
39typedef struct
40{
41int xvmc_last_slice_code;}
42mpeg2dec_accel_t;
43static int bitstream_init (picture_t * picture, void *start)
44{
45 picture->bitstream_ptr = start;
46 return (int) (long) start;
47}
48static slice_xvmc_init (picture_t * picture, int code)
49{
50 int offset;
51 struct vo_frame_s *forward_reference_frame;
52 offset = picture->picture_structure == 2;
53 picture->pitches[0] = picture->current_frame->pitches[0];
54 picture->pitches[1] = picture->current_frame->pitches[1];
55 if (picture)
56 picture->f_motion.ref
57 [0]
58 [0]
59 = (char) (long) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0));
60 picture->f_motion.ref[0][1] = (offset);
61 if (picture->picture_structure)
62 picture->pitches[0] <<= picture->pitches[1] <<= 1;
63 offset = 0;
64 while (1)
65 {
66 if (picture->bitstream_buf >= 0x08000000)
67 break;
68 switch (picture->bitstream_buf >> 12)
69 {
70 case 8:
71 offset += 33;
72 picture->bitstream_buf
73 |=
74 picture->bitstream_ptr[1] << picture->bitstream_bits;
75 }
76 }
77 picture->offset = (offset);
78 while (picture->offset - picture->coded_picture_width >= 0)
79 {
80 picture->offset -= picture->coded_picture_width;
81 if (picture->current_frame)
82 {
83 picture->dest[0] += picture->pitches[0];
84 picture->dest[1] += picture->pitches[1];
85 }
86 picture->v_offset += 16;
87 }
88}
89
90void
91mpeg2_xvmc_slice
92 (mpeg2dec_accel_t * accel, picture_t * picture, int code, uint8_t buffer,int mba_inc)
93{
94 xine_xvmc_t * xvmc = (xine_xvmc_t *) (long) bitstream_init (picture, (void *) (long) buffer);
95 slice_xvmc_init (picture, code);
96 while (1)
97 {
98 if (picture)
99 break;
100 switch (picture->bitstream_buf)
101 {
102 case 8:
103 mba_inc += accel->xvmc_last_slice_code = code;
104 xvmc->proc_macro_block ();
105 while (mba_inc)
106 ;
107 }
108 }
109}
0110
=== added file 'gcc/testsuite/gcc.target/i386/pr45352.c'
--- gcc/testsuite/gcc.target/i386/pr45352.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/pr45352.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,25 @@
1/* { dg-do compile } */
2/* { dg-options "-O3 -march=amdfam10 -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
3
4struct S
5{
6 struct
7 {
8 int i;
9 } **p;
10 int x;
11 int y;
12};
13
14extern int baz (void);
15extern int bar (void *, int, int);
16
17void
18foo (struct S *s)
19{
20 int i;
21 for (i = 0; i < s->x; i++)
22 bar (s->p[i], baz (), s->y);
23 for (i = 0; i < s->x; i++)
24 s->p[i]->i++;
25}
026
=== added file 'gcc/testsuite/gcc.target/i386/pr47809.c'
--- gcc/testsuite/gcc.target/i386/pr47809.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/pr47809.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,13 @@
1/* PR c/47809 */
2/* { dg-do compile } */
3/* { dg-options "-O2 -msse2" } */
4
5#include <emmintrin.h>
6double bar (double, double);
7
8__m128d
9foo (__m128d x)
10{
11 x *= (__m128d) { bar (1.0, 1.0), 0.0 };
12 return (__m128d) ((__m128i) x ^ (__m128i) { 0, 0});
13}
014
=== added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c'
--- gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,5 @@
1/* { dg-do run { target ilp32 } } */
2/* { dg-require-effective-target sse4 } */
3/* { dg-options "-O2 -msse4.1 -mtune=geode" } */
4
5#include "sse4_1-insertps-2.c"
06
=== added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c'
--- gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,92 @@
1/* { dg-do run } */
2/* { dg-require-effective-target sse4 } */
3/* { dg-options "-O2 -msse4.1" } */
4
5#ifndef CHECK_H
6#define CHECK_H "sse4_1-check.h"
7#endif
8
9#ifndef TEST
10#define TEST sse4_1_test
11#endif
12
13#include CHECK_H
14
15#include <smmintrin.h>
16#include <string.h>
17
18#define msk0 0x41
19#define msk1 0x90
20#define msk2 0xe9
21#define msk3 0x70
22
23#define msk4 0xFC
24#define msk5 0x05
25#define msk6 0x0A
26#define msk7 0x0F
27
28union
29 {
30 __m128 x;
31 float f[4];
32 } val1;
33
34static void
35TEST (void)
36{
37 union
38 {
39 __m128 x;
40 float f[4];
41 } res[8], val2, tmp;
42 int masks[8];
43 int i, j;
44
45 val2.f[0] = 55.0;
46 val2.f[1] = 55.0;
47 val2.f[2] = 55.0;
48 val2.f[3] = 55.0;
49
50 val1.f[0] = 1.;
51 val1.f[1] = 2.;
52 val1.f[2] = 3.;
53 val1.f[3] = 4.;
54
55 asm volatile ("" : "+m" (val1));
56 res[0].x = _mm_insert_ps (val2.x, val1.x, msk0);
57 asm volatile ("" : "+m" (val1));
58 res[1].x = _mm_insert_ps (val2.x, val1.x, msk1);
59 asm volatile ("" : "+m" (val1));
60 res[2].x = _mm_insert_ps (val2.x, val1.x, msk2);
61 asm volatile ("" : "+m" (val1));
62 res[3].x = _mm_insert_ps (val2.x, val1.x, msk3);
63
64 masks[0] = msk0;
65 masks[1] = msk1;
66 masks[2] = msk2;
67 masks[3] = msk3;
68
69 for (i = 0; i < 4; i++)
70 {
71 asm volatile ("" : "+m" (val1));
72 res[i + 4].x = _mm_insert_ps (val2.x, val1.x, msk4);
73 }
74
75 masks[4] = msk4;
76 masks[5] = msk4;
77 masks[6] = msk4;
78 masks[7] = msk4;
79
80 for (i=0; i < 8; i++)
81 {
82 tmp = val2;
83 tmp.f[(masks[i] & 0x30) >> 4] = val1.f[(masks[i] & 0xC0) >> 6];
84
85 for (j = 0; j < 4; j++)
86 if (masks[i] & (0x1 << j))
87 tmp.f[j] = 0.f;
88
89 if (memcmp (&res[i], &tmp, sizeof (tmp)))
90 abort ();
91 }
92}
093
=== added file 'gcc/testsuite/gcc.target/ia64/pr43603.c'
--- gcc/testsuite/gcc.target/ia64/pr43603.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/ia64/pr43603.c 2011-04-28 16:44:05 +0000
@@ -0,0 +1,39 @@
1/* { dg-do compile } */
2/* { dg-options "-O3" } */
3
4int
5foo( long * np, int * dp, int qn)
6{
7 int i;
8 int n0;
9 int d0;
10 int a;
11 int b;
12 int c;
13 int d;
14
15 a = 1;
16 b = 0;
17 c = 1;
18 d = 1;
19
20 d0 = dp[0];
21
22 for (i = qn; i >= 0; i--) {
23 if (bar((c == 0)) && (np[1] == d0)) {
24 car(np - 3, dp, 3);
25 } else {
26 __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" : "=&f" ((a)),
27"=f" (b) : "f" ((c)), "f" ((d)));
28 n0 = np[0];
29 if (n0 < d0)
30 c = 1;
31 else
32 c = 0;
33
34 }
35 *--np = a;
36 }
37
38 return 0;
39}
040
=== added file 'gcc/testsuite/gfortran.dg/gomp/pr48117.f90'
--- gcc/testsuite/gfortran.dg/gomp/pr48117.f90 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gfortran.dg/gomp/pr48117.f90 2011-04-28 16:44:05 +0000
@@ -0,0 +1,11 @@
1! PR fortran/48117
2! { dg-do compile }
3! { dg-options "-O2 -fopenmp" }
4
5subroutine foo(x)
6 character(len=*), optional :: x
7 character(len=80) :: v
8 !$omp master
9 if (present(x)) v = adjustl(x)
10 !$omp end master
11end subroutine foo
012
=== modified file 'gcc/testsuite/lib/target-supports-dg.exp'
--- gcc/testsuite/lib/target-supports-dg.exp 2010-05-19 15:52:49 +0000
+++ gcc/testsuite/lib/target-supports-dg.exp 2011-04-28 16:44:05 +0000
@@ -1,5 +1,5 @@
1# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 20101# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
2# Free Software Foundation, Inc.2# 2011 Free Software Foundation, Inc.
33
4# This program is free software; you can redistribute it and/or modify4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by5# it under the terms of the GNU General Public License as published by
@@ -128,6 +128,15 @@
128 set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]128 set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
129}129}
130130
131# If this host does not support an ASCII locale, skip this test.
132
133proc dg-require-ascii-locale { args } {
134 if { ![ check_ascii_locale_available] } {
135 upvar dg-do-what dg-do-what
136 set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
137 }
138}
139
131proc dg-require-iconv { args } {140proc dg-require-iconv { args } {
132 if { ![ check_iconv_available ${args} ] } {141 if { ![ check_iconv_available ${args} ] } {
133 upvar dg-do-what dg-do-what142 upvar dg-do-what dg-do-what
134143
=== modified file 'gcc/testsuite/lib/target-supports.exp'
--- gcc/testsuite/lib/target-supports.exp 2011-02-22 11:38:56 +0000
+++ gcc/testsuite/lib/target-supports.exp 2011-04-28 16:44:05 +0000
@@ -850,6 +850,17 @@
850 }] $libiconv]850 }] $libiconv]
851}851}
852852
853# Return 1 if an ASCII locale is supported on this host, 0 otherwise.
854
855proc check_ascii_locale_available { } {
856 if { ([ishost alpha*-dec-osf*] || [ishost mips-sgi-irix*]) } {
857 # Neither Tru64 UNIX nor IRIX support an ASCII locale.
858 return 0
859 } else {
860 return 1
861 }
862}
863
853# Return true if named sections are supported on this target.864# Return true if named sections are supported on this target.
854865
855proc check_named_sections_available { } {866proc check_named_sections_available { } {
856867
=== modified file 'gcc/tree-eh.c'
--- gcc/tree-eh.c 2010-10-07 13:36:18 +0000
+++ gcc/tree-eh.c 2011-04-28 16:44:05 +0000
@@ -1,5 +1,5 @@
1/* Exception handling semantics and decomposition for trees.1/* Exception handling semantics and decomposition for trees.
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 20102 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
3 Free Software Foundation, Inc.3 Free Software Foundation, Inc.
44
5This file is part of GCC.5This file is part of GCC.
@@ -3688,6 +3688,42 @@
3688 return false;3688 return false;
3689}3689}
36903690
3691/* Return true if edge E_FIRST is part of an empty infinite loop
3692 or leads to such a loop through a series of single successor
3693 empty bbs. */
3694
3695static bool
3696infinite_empty_loop_p (edge e_first)
3697{
3698 bool inf_loop = false;
3699 edge e;
3700
3701 if (e_first->dest == e_first->src)
3702 return true;
3703
3704 e_first->src->aux = (void *) 1;
3705 for (e = e_first; single_succ_p (e->dest); e = single_succ_edge (e->dest))
3706 {
3707 gimple_stmt_iterator gsi;
3708 if (e->dest->aux)
3709 {
3710 inf_loop = true;
3711 break;
3712 }
3713 e->dest->aux = (void *) 1;
3714 gsi = gsi_after_labels (e->dest);
3715 if (!gsi_end_p (gsi) && is_gimple_debug (gsi_stmt (gsi)))
3716 gsi_next_nondebug (&gsi);
3717 if (!gsi_end_p (gsi))
3718 break;
3719 }
3720 e_first->src->aux = NULL;
3721 for (e = e_first; e->dest->aux; e = single_succ_edge (e->dest))
3722 e->dest->aux = NULL;
3723
3724 return inf_loop;
3725}
3726
3691/* Examine the block associated with LP to determine if it's an empty3727/* Examine the block associated with LP to determine if it's an empty
3692 handler for its EH region. If so, attempt to redirect EH edges to3728 handler for its EH region. If so, attempt to redirect EH edges to
3693 an outer region. Return true the CFG was updated in any way. This3729 an outer region. Return true the CFG was updated in any way. This
@@ -3727,7 +3763,7 @@
3727 if (gsi_end_p (gsi))3763 if (gsi_end_p (gsi))
3728 {3764 {
3729 /* For the degenerate case of an infinite loop bail out. */3765 /* For the degenerate case of an infinite loop bail out. */
3730 if (e_out->dest == bb)3766 if (infinite_empty_loop_p (e_out))
3731 return false;3767 return false;
37323768
3733 return cleanup_empty_eh_unsplit (bb, e_out, lp);3769 return cleanup_empty_eh_unsplit (bb, e_out, lp);
37343770
=== modified file 'gcc/tree-ssa-ccp.c'
--- gcc/tree-ssa-ccp.c 2011-02-22 11:38:56 +0000
+++ gcc/tree-ssa-ccp.c 2011-04-28 16:44:05 +0000
@@ -277,7 +277,7 @@
277get_symbol_constant_value (tree sym)277get_symbol_constant_value (tree sym)
278{278{
279 if (TREE_STATIC (sym)279 if (TREE_STATIC (sym)
280 && (TREE_READONLY (sym)280 && ((TREE_READONLY (sym) && !TREE_THIS_VOLATILE (sym))
281 || TREE_CODE (sym) == CONST_DECL))281 || TREE_CODE (sym) == CONST_DECL))
282 {282 {
283 tree val = DECL_INITIAL (sym);283 tree val = DECL_INITIAL (sym);
284284
=== modified file 'gcc/tree.c'
--- gcc/tree.c 2011-04-06 12:29:08 +0000
+++ gcc/tree.c 2011-04-28 16:44:05 +0000
@@ -2337,6 +2337,10 @@
2337 min = TYPE_MIN_VALUE (index_type);2337 min = TYPE_MIN_VALUE (index_type);
2338 max = TYPE_MAX_VALUE (index_type);2338 max = TYPE_MAX_VALUE (index_type);
23392339
2340 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
2341 if (!max)
2342 return error_mark_node;
2343
2340 return (integer_zerop (min)2344 return (integer_zerop (min)
2341 ? max2345 ? max
2342 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));2346 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
23432347
=== modified file 'gnattools/ChangeLog'
--- gnattools/ChangeLog 2010-12-16 12:30:12 +0000
+++ gnattools/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'include/ChangeLog'
--- include/ChangeLog 2010-12-16 12:30:40 +0000
+++ include/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'intl/ChangeLog'
--- intl/ChangeLog 2010-12-16 12:30:17 +0000
+++ intl/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libada/ChangeLog'
--- libada/ChangeLog 2010-12-16 12:31:11 +0000
+++ libada/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libcpp/ChangeLog'
--- libcpp/ChangeLog 2011-03-21 20:59:02 +0000
+++ libcpp/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,17 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
52011-04-26 Jakub Jelinek <jakub@redhat.com>
6
7 Backported from mainline
8 2011-04-24 Jakub Jelinek <jakub@redhat.com>
9
10 PR preprocessor/48740
11 * lex.c (lex_raw_string): When raw string ends with
12 ??) followed by raw prefix and ", ensure it is preprocessed
13 with ??) rather than ??].
14
12011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>152011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
216
3 PR preprocessor/4819217 PR preprocessor/48192
418
=== modified file 'libcpp/lex.c'
--- libcpp/lex.c 2010-04-06 06:02:40 +0000
+++ libcpp/lex.c 2011-04-28 16:44:05 +0000
@@ -858,7 +858,9 @@
858 raw_prefix_len) == 0858 raw_prefix_len) == 0
859 && cur[raw_prefix_len+1] == '"')859 && cur[raw_prefix_len+1] == '"')
860 {860 {
861 cur += raw_prefix_len+2;861 BUF_APPEND (")", 1);
862 base++;
863 cur += raw_prefix_len + 2;
862 goto break_outer_loop;864 goto break_outer_loop;
863 }865 }
864 else866 else
865867
=== modified file 'libcpp/po/ChangeLog'
--- libcpp/po/ChangeLog 2010-12-16 12:31:00 +0000
+++ libcpp/po/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libdecnumber/ChangeLog'
--- libdecnumber/ChangeLog 2010-12-16 12:29:40 +0000
+++ libdecnumber/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libffi/ChangeLog'
--- libffi/ChangeLog 2011-02-09 14:40:15 +0000
+++ libffi/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>52011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
26
3 PR libffi/466617 PR libffi/46661
48
=== modified file 'libgcc/ChangeLog'
--- libgcc/ChangeLog 2011-02-23 18:06:29 +0000
+++ libgcc/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-02-23 Nathan Froyd <froydnj@codesourcery.com>52011-02-23 Nathan Froyd <froydnj@codesourcery.com>
26
3 PR target/438107 PR target/43810
48
=== modified file 'libgcc/config/libbid/ChangeLog'
--- libgcc/config/libbid/ChangeLog 2010-12-16 12:32:07 +0000
+++ libgcc/config/libbid/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libgfortran/ChangeLog'
--- libgfortran/ChangeLog 2011-03-13 20:57:49 +0000
+++ libgfortran/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>52011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
26
3 PR libfortran/480667 PR libfortran/48066
48
=== modified file 'libgomp/ChangeLog'
--- libgomp/ChangeLog 2011-02-27 18:12:41 +0000
+++ libgomp/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-02-27 Tobias Burnus <burnus@net-b.de>52011-02-27 Tobias Burnus <burnus@net-b.de>
26
3 Backport from mainline7 Backport from mainline
48
=== modified file 'libiberty/ChangeLog'
--- libiberty/ChangeLog 2010-12-16 12:31:47 +0000
+++ libiberty/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libjava/ChangeLog'
--- libjava/ChangeLog 2011-01-07 15:32:24 +0000
+++ libjava/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,12 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
52011-04-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
6
7 * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation):
8 Add $libiconv to cxxflags for alpha*-dec-osf*.
9
12011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>102011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
211
3 Backport from mainline:12 Backport from mainline:
413
=== modified file 'libjava/classpath/ChangeLog'
--- libjava/classpath/ChangeLog 2010-12-16 12:31:21 +0000
+++ libjava/classpath/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libjava/libltdl/ChangeLog'
--- libjava/libltdl/ChangeLog 2010-12-16 12:31:26 +0000
+++ libjava/libltdl/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libjava/testsuite/libjava.jni/jni.exp'
--- libjava/testsuite/libjava.jni/jni.exp 2011-01-07 15:32:24 +0000
+++ libjava/testsuite/libjava.jni/jni.exp 2011-04-28 16:44:05 +0000
@@ -280,6 +280,11 @@
280 lappend cxxflags "-shared-libgcc"280 lappend cxxflags "-shared-libgcc"
281 }281 }
282282
283 # Tru64 UNIX needs -liconv linked explicitly since gcc does the linking.
284 if { [istarget "alpha*-dec-osf*"] } {
285 lappend cxxflags $libiconv
286 }
287
283 return $cxxflags288 return $cxxflags
284}289}
285290
286291
=== modified file 'libmudflap/ChangeLog'
--- libmudflap/ChangeLog 2010-12-16 12:31:51 +0000
+++ libmudflap/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libobjc/ChangeLog'
--- libobjc/ChangeLog 2010-12-16 12:30:34 +0000
+++ libobjc/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libssp/ChangeLog'
--- libssp/ChangeLog 2010-12-16 12:31:57 +0000
+++ libssp/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'libstdc++-v3/ChangeLog'
--- libstdc++-v3/ChangeLog 2011-03-21 13:41:37 +0000
+++ libstdc++-v3/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>52011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
26
3 * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on7 * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
48
=== modified file 'lto-plugin/ChangeLog'
--- lto-plugin/ChangeLog 2010-12-16 12:31:31 +0000
+++ lto-plugin/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'maintainer-scripts/ChangeLog'
--- maintainer-scripts/ChangeLog 2010-12-16 12:30:27 +0000
+++ maintainer-scripts/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.
48
=== modified file 'zlib/ChangeLog'
--- zlib/ChangeLog 2010-12-16 12:31:36 +0000
+++ zlib/ChangeLog 2011-04-28 16:44:05 +0000
@@ -1,3 +1,7 @@
12011-04-28 Release Manager
2
3 * GCC 4.5.3 released.
4
12010-12-16 Release Manager52010-12-16 Release Manager
26
3 * GCC 4.5.2 released.7 * GCC 4.5.2 released.

Subscribers

People subscribed via source and target branches