Merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3 into lp:gcc-linaro/4.5
- merge-fsf-4.5.3
- Merge into 4.5
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ulrich Weigand (community) | Approve | ||
Review via email:
|
Commit message
Description of the change
Merge from FSF GCC 4.5.3 release.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Linaro Toolchain Builder (cbuild) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on i686-lucid-
The build results are available at:
http://
The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
+PASS: c-c++-common/
+PASS: c-c++-common/
-PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+UNSUPPORTED: gcc.dg/
+UNSUPPORTED: gcc.dg/
...and 122 more
The full testsuite results are at:
http://
cbuild-checked: i686-lucid-
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on x86_64-
The build results are available at:
http://
The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
+PASS: c-c++-common/
+PASS: c-c++-common/
-PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+UNSUPPORTED: gcc.dg/
+UNSUPPORTED: gcc.dg/
...and 121 more
The full testsuite results are at:
http://
cbuild-checked: x86_64-
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on armv7l-
The build results are available at:
http://
The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
+PASS: c-c++-common/
+PASS: c-c++-common/
-PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+PASS: gcc.dg/
+UNSUPPORTED: gcc.dg/
+UNSUPPORTED: gcc.dg/
+UNSUPPORTED: gcc.dg/
...and 115 more
The full testsuite results are at:
http://
cbuild-checked: armv7l-
Preview Diff
1 | === modified file 'ChangeLog' |
2 | --- ChangeLog 2011-01-25 15:49:54 +0000 |
3 | +++ ChangeLog 2011-04-28 16:44:05 +0000 |
4 | @@ -1,3 +1,7 @@ |
5 | +2011-04-28 Release Manager |
6 | + |
7 | + * GCC 4.5.3 released. |
8 | + |
9 | 2011-01-25 Richard Guenther <rguenther@suse.de> |
10 | |
11 | Backport from mainline |
12 | |
13 | === modified file 'ChangeLog.linaro' |
14 | --- ChangeLog.linaro 2011-04-26 09:24:25 +0000 |
15 | +++ ChangeLog.linaro 2011-04-28 16:44:05 +0000 |
16 | @@ -1,3 +1,7 @@ |
17 | +2011-04-28 Andrew Stubbs <ams@codesourcery.com> |
18 | + |
19 | + Merge from FSF 4.5 branch r173113 (4.5.3 release). |
20 | + |
21 | 2011-04-26 Chung-Lin Tang <cltang@codesourcery.com> |
22 | |
23 | Backport from mainline: |
24 | |
25 | === modified file 'boehm-gc/ChangeLog' |
26 | --- boehm-gc/ChangeLog 2010-12-16 12:30:55 +0000 |
27 | +++ boehm-gc/ChangeLog 2011-04-28 16:44:05 +0000 |
28 | @@ -1,3 +1,7 @@ |
29 | +2011-04-28 Release Manager |
30 | + |
31 | + * GCC 4.5.3 released. |
32 | + |
33 | 2010-12-16 Release Manager |
34 | |
35 | * GCC 4.5.2 released. |
36 | |
37 | === modified file 'config/ChangeLog' |
38 | --- config/ChangeLog 2010-12-16 12:32:12 +0000 |
39 | +++ config/ChangeLog 2011-04-28 16:44:05 +0000 |
40 | @@ -1,3 +1,7 @@ |
41 | +2011-04-28 Release Manager |
42 | + |
43 | + * GCC 4.5.3 released. |
44 | + |
45 | 2010-12-16 Release Manager |
46 | |
47 | * GCC 4.5.2 released. |
48 | |
49 | === modified file 'contrib/ChangeLog' |
50 | --- contrib/ChangeLog 2010-12-16 12:29:50 +0000 |
51 | +++ contrib/ChangeLog 2011-04-28 16:44:05 +0000 |
52 | @@ -1,3 +1,7 @@ |
53 | +2011-04-28 Release Manager |
54 | + |
55 | + * GCC 4.5.3 released. |
56 | + |
57 | 2010-12-16 Release Manager |
58 | |
59 | * GCC 4.5.2 released. |
60 | |
61 | === modified file 'contrib/reghunt/ChangeLog' |
62 | --- contrib/reghunt/ChangeLog 2010-12-16 12:29:55 +0000 |
63 | +++ contrib/reghunt/ChangeLog 2011-04-28 16:44:05 +0000 |
64 | @@ -1,3 +1,7 @@ |
65 | +2011-04-28 Release Manager |
66 | + |
67 | + * GCC 4.5.3 released. |
68 | + |
69 | 2010-12-16 Release Manager |
70 | |
71 | * GCC 4.5.2 released. |
72 | |
73 | === modified file 'contrib/regression/ChangeLog' |
74 | --- contrib/regression/ChangeLog 2010-12-16 12:29:45 +0000 |
75 | +++ contrib/regression/ChangeLog 2011-04-28 16:44:05 +0000 |
76 | @@ -1,3 +1,7 @@ |
77 | +2011-04-28 Release Manager |
78 | + |
79 | + * GCC 4.5.3 released. |
80 | + |
81 | 2010-12-16 Release Manager |
82 | |
83 | * GCC 4.5.2 released. |
84 | |
85 | === modified file 'fixincludes/ChangeLog' |
86 | --- fixincludes/ChangeLog 2010-12-16 12:30:44 +0000 |
87 | +++ fixincludes/ChangeLog 2011-04-28 16:44:05 +0000 |
88 | @@ -1,3 +1,7 @@ |
89 | +2011-04-28 Release Manager |
90 | + |
91 | + * GCC 4.5.3 released. |
92 | + |
93 | 2010-12-16 Release Manager |
94 | |
95 | * GCC 4.5.2 released. |
96 | |
97 | === modified file 'gcc/ChangeLog' |
98 | --- gcc/ChangeLog 2011-03-30 10:48:07 +0000 |
99 | +++ gcc/ChangeLog 2011-04-28 16:44:05 +0000 |
100 | @@ -1,3 +1,397 @@ |
101 | +2011-04-28 Release Manager |
102 | + |
103 | + * GCC 4.5.3 released. |
104 | + |
105 | +2011-04-21 Richard Guenther <rguenther@suse.de> |
106 | + |
107 | + PR middle-end/48712 |
108 | + Backport from 4.6 branch |
109 | + 2011-03-07 Zdenek Dvorak <ook@ucw.cz> |
110 | + |
111 | + PR bootstrap/48000 |
112 | + * cfgloopmanip.c (fix_bb_placements): Return immediately |
113 | + if FROM is BASE_LOOP's header. |
114 | + |
115 | +2011-04-20 Richard Guenther <rguenther@suse.de> |
116 | + |
117 | + Backport from 4.6 branch |
118 | + 2011-04-19 Bernd Schmidt <bernds@codesourcery.com> |
119 | + |
120 | + PR fortran/47976 |
121 | + * reload1.c (inc_for_reload): Return void. All callers changed. |
122 | + (emit_input_reload_insns): Don't try to delete previous output |
123 | + reloads to a register, or record spill_reg_store for autoincs. |
124 | + |
125 | +2011-04-19 Richard Guenther <rguenther@suse.de> |
126 | + |
127 | + Backported from 4.6 branch |
128 | + 2011-03-29 Jakub Jelinek <jakub@redhat.com> |
129 | + |
130 | + PR preprocessor/48248 |
131 | + * c-ppoutput.c (print): Add src_file field. |
132 | + (init_pp_output): Initialize it. |
133 | + (maybe_print_line): Don't optimize by adding up to 8 newlines |
134 | + if map->to_file and print.src_file are different file. |
135 | + (print_line): Update print.src_file. |
136 | + |
137 | + 2011-04-18 Richard Guenther <rguenther@suse.de> |
138 | + |
139 | + PR preprocessor/48248 |
140 | + * c-ppoutput.c (maybe_print_line): Avoid changing -P behavior. |
141 | + |
142 | +2011-04-19 Richard Guenther <rguenther@suse.de> |
143 | + |
144 | + PR tree-optimization/46188 |
145 | + Backported from 4.6 branch |
146 | + 2010-05-26 Jan Hubicka <jh@suse.cz> |
147 | + |
148 | + * cgraphunit.c (clone_of_p): Remove. |
149 | + (verify_cgraph_node): Do not verify clones. |
150 | + (cgraph_materialize_all_clones): Do no redirection here. |
151 | + * ipa-inline.c (inline_transform): Do redirection here. |
152 | + |
153 | +2011-04-18 Eric Botcazou <ebotcazou@adacore.com> |
154 | + |
155 | + * dwarf2out.c (is_redundant_typedef): Add 'inline' to prototype. |
156 | + |
157 | +2011-04-18 Richard Guenther <rguenther@suse.de> |
158 | + |
159 | + Backported from 4.6 branch |
160 | + 2011-01-19 Jakub Jelinek <jakub@redhat.com> |
161 | + |
162 | + PR tree-optimization/47290 |
163 | + * tree-eh.c (infinite_empty_loop_p): New function. |
164 | + (cleanup_empty_eh): Use it. |
165 | + |
166 | + 2010-05-29 Jan Hubicka <jh@suse.cz> |
167 | + |
168 | + PR tree-optimization/46364 |
169 | + * cgraphunit.c (cgraph_materialize_clone): Only remove calles, refs |
170 | + and body; |
171 | + not the whole node for masters of materialized clones. |
172 | + |
173 | +2011-04-18 Richard Guenther <rguenther@suse.de> |
174 | + |
175 | + Backported from 4.6 branch |
176 | + 2011-03-05 Zdenek Dvorak <ook@ucw.cz> |
177 | + |
178 | + PR rtl-optimization/47899 |
179 | + * cfgloopmanip.c (fix_bb_placements): Fix first argument |
180 | + to flow_loop_nested_p when moving the loop upward. |
181 | + |
182 | + 2011-03-15 Richard Guenther <rguenther@suse.de> |
183 | + |
184 | + PR middle-end/48031 |
185 | + * fold-const.c (fold_indirect_ref_1): Do not create new variable-sized |
186 | + or variable-indexed array accesses when in gimple form. |
187 | + |
188 | +2011-04-16 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> |
189 | + |
190 | + * config/pa/pa.h (REGISTER_MOVE_COST): Increase to 18 cost of |
191 | + move from floating point to shift amount register. |
192 | + |
193 | + Backport from mainline: |
194 | + 2011-04-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> |
195 | + |
196 | + PR target/48366 |
197 | + * config/pa/pa.c (emit_move_sequence): Remove secondary reload |
198 | + support for floating point to shift amount amount register copies. |
199 | + (pa_secondary_reload): Return GENERAL_REGS for floating point/shift |
200 | + amount register copies. |
201 | + * config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): For shift amount |
202 | + register, return false if mode isn't a scalar integer mode. |
203 | + * config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Likewise. |
204 | + |
205 | +2011-04-16 Jakub Jelinek <jakub@redhat.com> |
206 | + |
207 | + Backported from 4.6 branch |
208 | + 2011-04-15 Jakub Jelinek <jakub@redhat.com> |
209 | + |
210 | + PR target/48605 |
211 | + * config/i386/sse.md (avx_insertps, sse4_1_insertps): If operands[2] |
212 | + is a MEM, offset it as needed based on top 2 bits in operands[3], |
213 | + change MEM mode to SFmode and mask those 2 bits away from operands[3]. |
214 | + |
215 | +2011-04-13 Nick Clifton <nickc@redhat.com> |
216 | + |
217 | + * config/rx/rx.md (movmemsi): Do not use this pattern when |
218 | + volatile pointers are involved. |
219 | + |
220 | +2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
221 | + |
222 | + Backport from mainline: |
223 | + 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
224 | + |
225 | + PR testsuite/47400 |
226 | + * doc/sourcebuild.texi (Require Support): Document |
227 | + dg-require-ascii-locale. |
228 | + |
229 | +2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> |
230 | + |
231 | + Backport from mainline: |
232 | + 2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> |
233 | + PR target/48090 |
234 | + * config/arm/arm.md (*arm_negdi2): Fix early clobber constraints. |
235 | + |
236 | +2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
237 | + |
238 | + Backport from mainline: |
239 | + 2011-04-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
240 | + |
241 | + * config/alpha/osf.h (MAX_OFILE_ALIGNMENT): Define. |
242 | + |
243 | +2011-04-09 Duncan Sands <baldrick@free.fr> |
244 | + |
245 | + * tree.c (array_type_nelts): Bail out if TYPE_MAX_VALUE not set. |
246 | + |
247 | +2011-04-07 Uros Bizjak <ubizjak@gmail.com> |
248 | + |
249 | + * config/i386/sse.md (avx_cmps<ssemodesuffixf2c><mode>3): Add |
250 | + missing output register constraint. |
251 | + (*vec_concatv2sf_avx): Fix wrong register constraint in |
252 | + alternative 3 of operand 1. |
253 | + (*vec_set<mode>_0_avx): Avoid combining registers from different |
254 | + units in a single alternative. |
255 | + (*vec_set<mode>_0_sse4_1): Ditto. |
256 | + (*vec_set<mode>_0_sse2): Ditto. |
257 | + (vec_set<mode>_0): Ditto. |
258 | + (sse2_storehpd): Ditto. |
259 | + (sse2_loadhpd): Ditto. |
260 | + (sse4_1_insertps): Use nonimmediate_operand for operand 2. |
261 | + * config/i386/predicates.md (sse_comparison_operator): Do not |
262 | + define as special predicate. |
263 | + |
264 | +2011-04-07 Jakub Jelinek <jakub@redhat.com> |
265 | + |
266 | + Backported from mainline |
267 | + 2011-04-06 Jakub Jelinek <jakub@redhat.com> |
268 | + |
269 | + PR debug/48466 |
270 | + * dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use |
271 | + as base_reg whatever register reg has been eliminated to, instead |
272 | + of hardcoding STACK_POINTER_REGNUM. |
273 | + |
274 | + 2011-03-24 Jakub Jelinek <jakub@redhat.com> |
275 | + |
276 | + PR debug/48204 |
277 | + * simplify-rtx.c (simplify_const_unary_operation): Call |
278 | + real_convert when changing mode class with FLOAT_EXTEND. |
279 | + |
280 | + 2011-03-17 Jakub Jelinek <jakub@redhat.com> |
281 | + |
282 | + PR rtl-optimization/48141 |
283 | + * dse.c (record_store): If no positions are needed in an insn |
284 | + that cannot be deleted, at least unchain it from active_local_stores. |
285 | + |
286 | + 2011-03-03 Jakub Jelinek <jakub@redhat.com> |
287 | + |
288 | + PR c/47963 |
289 | + * gimplify.c (omp_add_variable): Only call omp_notice_variable |
290 | + on TYPE_SIZE_UNIT if it is a DECL. |
291 | + |
292 | + 2011-02-19 Jakub Jelinek <jakub@redhat.com> |
293 | + |
294 | + PR c/47809 |
295 | + * c-common.c (c_fully_fold_internal): Handle VIEW_CONVERT_EXPR. |
296 | + |
297 | + 2011-01-26 Jakub Jelinek <jakub@redhat.com> |
298 | + |
299 | + PR c/47473 |
300 | + * c-lex.c (interpret_float): If CPP_N_IMAGINARY, ensure |
301 | + EXCESS_PRECISION_EXPR is created with COMPLEX_TYPE instead of |
302 | + REAL_TYPE. |
303 | + |
304 | +2011-04-07 Jakub Jelinek <jakub@redhat.com> |
305 | + |
306 | + PR tree-optimization/47391 |
307 | + * tree-ssa-ccp.c (get_symbol_constant_value): Don't optimize |
308 | + if sym is volatile. |
309 | + |
310 | + Backported from mainline |
311 | + 2010-07-01 Richard Guenther <rguenther@suse.de> |
312 | + |
313 | + * omp-low.c (scan_omp_1_op): Don't change type of INTEGER_CSTs |
314 | + directly. |
315 | + |
316 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
317 | + |
318 | + Backport from mainline |
319 | + 2011-03-26 Andrey Belevantsev <abel@ispras.ru> |
320 | + |
321 | + PR rtl-optimization/48144 |
322 | + * sel-sched-ir.c (merge_history_vect): Factor out from ... |
323 | + (merge_expr_data): ... here. |
324 | + (av_set_intersect): Rename to av_set_code_motion_filter. |
325 | + Update all callers. Call merge_history_vect when an expression |
326 | + is found in both sets. |
327 | + * sel-sched-ir.h (av_set_code_motion_filter): Add prototype. |
328 | + |
329 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
330 | + |
331 | + Backport from mainline |
332 | + 2011-01-13 Andrey Belevantsev <abel@ispras.ru> |
333 | + |
334 | + PR rtl-optimization/45352 |
335 | + * sel-sched.c: Update copyright years. |
336 | + (reset_sched_cycles_in_current_ebb): Also recheck the DFA state |
337 | + in the advancing loop when we have issued issue_rate insns. |
338 | + |
339 | + Backport from mainline |
340 | + 2010-12-22 Andrey Belevantsev <abel@ispras.ru> |
341 | + |
342 | + PR rtl-optimization/45352 |
343 | + PR rtl-optimization/46521 |
344 | + PR rtl-optimization/46522 |
345 | + * sel-sched.c (reset_sched_cycles_in_current_ebb): Recheck the DFA state |
346 | + on the last iteration of the advancing loop. |
347 | + (sel_sched_region_1): Propagate the rescheduling bit to the next block |
348 | + also for empty blocks. |
349 | + |
350 | + Backport from mainline |
351 | + 2010-11-08 Andrey Belevantsev <abel@ispras.ru> |
352 | + |
353 | + PR rtl-optimization/45352 |
354 | + * sel-sched.c (find_best_expr): Do not set pneed_stall when |
355 | + the variable_issue hook is not implemented. |
356 | + (fill_insns): Remove dead variable stall_iterations. |
357 | + (init_seqno_1): Force EBB start for resetting sched cycles on any |
358 | + successor blocks of the rescheduled region. |
359 | + (sel_sched_region_1): Use bitmap_bit_p instead of bitmap_clear_bit. |
360 | + (reset_sched_cycles_in_current_ebb): Add debug printing. |
361 | + New variable issued_insns. Advance state when we have issued |
362 | + issue_rate insns. |
363 | + |
364 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
365 | + |
366 | + Backport from mainline |
367 | + 2010-12-24 Alexander Monakov <amonakov@ispras.ru> |
368 | + |
369 | + PR rtl-optimization/47036 |
370 | + * sel-sched-ir.c (fallthru_bb_of_jump): Remove special support for |
371 | + unconditional jumps. |
372 | + * sel-sched.c (moveup_expr): Ditto. |
373 | + |
374 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
375 | + |
376 | + Backport from mainline |
377 | + 2010-12-15 Alexander Monakov <amonakov@ispras.ru> |
378 | + |
379 | + PR rtl-optimization/46649 |
380 | + * sel-sched-ir.c (purge_empty_blocks): Unconditionally skip the first |
381 | + basic block in the region. |
382 | + |
383 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
384 | + |
385 | + Backport from mainline |
386 | + 2010-12-14 Alexander Monakov <amonakov@ispras.ru> |
387 | + |
388 | + PR rtl-optimization/46875 |
389 | + * sched-vis.c (print_pattern): Dump "sequence" for ADDR_VECs. |
390 | + * sel-sched-ir.c (bb_has_removable_jump_to_p): Forbid table jumps. |
391 | + |
392 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
393 | + |
394 | + Backport from mainline |
395 | + 2010-12-07 Andrey Belevantsev <abel@ispras.ru> |
396 | + PR target/43603 |
397 | + * haifa-sched.c (sched_create_recovery_edges): Update |
398 | + dominator info. |
399 | + * sel-sched-ir.c (maybe_tidy_empty_bb): Update dominator info |
400 | + after deleting an empty block. |
401 | + (tidy_control_flow): Also verify dominators. |
402 | + (sel_remove_bb): Update dominator info after removing a block. |
403 | + (sel_redirect_edge_and_branch_force): Assert that no unreachable |
404 | + blocks will be created. Update dominator info. |
405 | + (sel_redirect_edge_and_branch): Update dominator info when |
406 | + basic blocks do not become unreachable. |
407 | + (sel_remove_loop_preheader): Update dominator info. |
408 | + |
409 | + 2010-10-14 Andrey Belevantsev <abel@ispras.ru> |
410 | + |
411 | + * sel-sched-ir.c (maybe_tidy_empty_bb): Simplify comment. |
412 | + (tidy_control_flow): Tidy vertical space. |
413 | + (sel_remove_bb): New variable idx. Use it to remember the basic |
414 | + block index before deleting the block. |
415 | + (sel_remove_empty_bb): Remove dead code, simplify and insert to ... |
416 | + (sel_merge_blocks): ... here. |
417 | + * sel-sched-ir.h (sel_remove_empty_bb): Remove prototype. |
418 | + |
419 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
420 | + |
421 | + Backport from mainline |
422 | + 2010-12-03 Alexander Monakov <amonakov@ispras.ru> |
423 | + |
424 | + PR rtl-optimization/45354 |
425 | + * sel-sched-ir.c (jump_leads_only_to_bb_p): Rename to ... |
426 | + (bb_has_removable_jump_to_p): This. Update all callers. Make static. |
427 | + Allow BBs ending with a conditional jump. Forbid EDGE_CROSSING jumps. |
428 | + * sel-sched-ir.h (jump_leads_only_to_bb_p): Delete prototype. |
429 | + |
430 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
431 | + |
432 | + Backport from mainline |
433 | + 2010-11-25 Alexander Monakov <amonakov@ispras.ru> |
434 | + |
435 | + PR rtl-optimization/46585 |
436 | + * sel-sched-ir.c (return_regset_to_pool): Verify that RS is not NULL. |
437 | + (vinsn_init): Skip computation of dependencies for local NOPs. |
438 | + (vinsn_delete): Don't try to free regsets for local NOPs. |
439 | + (setup_nop_and_exit_insns): Change definition of nop_pattern. |
440 | + |
441 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
442 | + |
443 | + Backport from mainline |
444 | + 2010-11-25 Alexander Monakov <amonakov@ispras.ru> |
445 | + |
446 | + PR rtl-optimization/46602 |
447 | + * sel-sched-ir.c (maybe_tidy_empty_bb): Move checking ... |
448 | + (tidy_control_flow): Here. |
449 | + |
450 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
451 | + |
452 | + Backport from mainline |
453 | + 2010-11-22 Alexander Monakov <amonakov@ispras.ru> |
454 | + |
455 | + PR rtl-optimization/45652 |
456 | + * alias.c (get_reg_base_value): New. |
457 | + * rtl.h (get_reg_base_value): Add prototype. |
458 | + * sel-sched.c (init_regs_for_mode): Use it. Don't use registers with |
459 | + non-null REG_BASE_VALUE for renaming. |
460 | + |
461 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
462 | + |
463 | + Backport from mainline |
464 | + 2010-11-18 Alexander Monakov <amonakov@ispras.ru> |
465 | + |
466 | + PR middle-end/46518 |
467 | + * sel-sched-ir.c (init_expr): Use the correct type for |
468 | + target_available. |
469 | + * sel-sched.c (fill_vec_av_set): Use explicitly signed char type. |
470 | + |
471 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
472 | + |
473 | + Backport from mainline |
474 | + 2010-11-12 Alexander Monakov <amonakov@ispras.ru> |
475 | + |
476 | + PR rtl-optimization/46204 |
477 | + sel-sched-ir.c (maybe_tidy_empty_bb): Remove second argument. |
478 | + pdate all callers. Do not recompute topological order. Adjust |
479 | + allthrough edges following a degenerate conditional jump. |
480 | + |
481 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
482 | + |
483 | + Backport from mainline |
484 | + 2010-10-14 Andrey Belevantsev <abel@ispras.ru> |
485 | + |
486 | + PR rtl-optimization/45570 |
487 | + * sel-sched-ir.c (cfg_preds_1): When walking out of the region, |
488 | + assert that we are pipelining outer loops. Allow returning |
489 | + zero predecessors. |
490 | + |
491 | +2011-04-06 Joseph Myers <joseph@codesourcery.com> |
492 | + |
493 | + * gcov-io.c: Use GCC Runtime Library Exception. |
494 | + |
495 | 2011-03-30 H.J. Lu <hongjiu.lu@intel.com> |
496 | |
497 | Backport from mainline |
498 | |
499 | === modified file 'gcc/DATESTAMP' |
500 | --- gcc/DATESTAMP 2011-04-06 00:18:18 +0000 |
501 | +++ gcc/DATESTAMP 2011-04-28 16:44:05 +0000 |
502 | @@ -1,1 +1,1 @@ |
503 | -20110406 |
504 | +20110428 |
505 | |
506 | === modified file 'gcc/DEV-PHASE' |
507 | --- gcc/DEV-PHASE 2011-02-22 11:38:56 +0000 |
508 | +++ gcc/DEV-PHASE 2011-04-28 16:44:05 +0000 |
509 | @@ -1,1 +0,0 @@ |
510 | -prerelease |
511 | |
512 | === modified file 'gcc/ada/ChangeLog' |
513 | --- gcc/ada/ChangeLog 2011-02-12 19:22:17 +0000 |
514 | +++ gcc/ada/ChangeLog 2011-04-28 16:44:05 +0000 |
515 | @@ -1,3 +1,7 @@ |
516 | +2011-04-28 Release Manager |
517 | + |
518 | + * GCC 4.5.3 released. |
519 | + |
520 | 2011-02-12 Gerald Pfeifer <gerald@pfeifer.com> |
521 | |
522 | * gnat_ugn.texi (Compiling Different Versions of Ada): Update |
523 | |
524 | === modified file 'gcc/alias.c' |
525 | --- gcc/alias.c 2010-05-26 10:29:20 +0000 |
526 | +++ gcc/alias.c 2011-04-28 16:44:05 +0000 |
527 | @@ -1228,6 +1228,14 @@ |
528 | reg_seen[regno] = 1; |
529 | } |
530 | |
531 | +/* Return REG_BASE_VALUE for REGNO. Selective scheduler uses this to avoid |
532 | + using hard registers with non-null REG_BASE_VALUE for renaming. */ |
533 | +rtx |
534 | +get_reg_base_value (unsigned int regno) |
535 | +{ |
536 | + return VEC_index (rtx, reg_base_value, regno); |
537 | +} |
538 | + |
539 | /* If a value is known for REGNO, return it. */ |
540 | |
541 | rtx |
542 | |
543 | === modified file 'gcc/c-common.c' |
544 | --- gcc/c-common.c 2011-01-06 11:02:44 +0000 |
545 | +++ gcc/c-common.c 2011-04-28 16:44:05 +0000 |
546 | @@ -1352,6 +1352,7 @@ |
547 | case FIX_TRUNC_EXPR: |
548 | case FLOAT_EXPR: |
549 | CASE_CONVERT: |
550 | + case VIEW_CONVERT_EXPR: |
551 | case NON_LVALUE_EXPR: |
552 | case NEGATE_EXPR: |
553 | case BIT_NOT_EXPR: |
554 | |
555 | === modified file 'gcc/c-lex.c' |
556 | --- gcc/c-lex.c 2009-11-25 10:55:54 +0000 |
557 | +++ gcc/c-lex.c 2011-04-28 16:44:05 +0000 |
558 | @@ -739,8 +739,15 @@ |
559 | /* Create a node with determined type and value. */ |
560 | value = build_real (const_type, real); |
561 | if (flags & CPP_N_IMAGINARY) |
562 | - value = build_complex (NULL_TREE, convert (const_type, integer_zero_node), |
563 | - value); |
564 | + { |
565 | + value = build_complex (NULL_TREE, convert (const_type, |
566 | + integer_zero_node), value); |
567 | + if (type != const_type) |
568 | + { |
569 | + const_type = TREE_TYPE (value); |
570 | + type = build_complex_type (type); |
571 | + } |
572 | + } |
573 | |
574 | if (type != const_type) |
575 | value = build1 (EXCESS_PRECISION_EXPR, type, value); |
576 | |
577 | === modified file 'gcc/c-ppoutput.c' |
578 | --- gcc/c-ppoutput.c 2009-10-09 18:55:34 +0000 |
579 | +++ gcc/c-ppoutput.c 2011-04-28 16:44:05 +0000 |
580 | @@ -37,6 +37,7 @@ |
581 | int src_line; /* Line number currently being written. */ |
582 | unsigned char printed; /* Nonzero if something output at line. */ |
583 | bool first_time; /* pp_file_change hasn't been called yet. */ |
584 | + const char *src_file; /* Current source file. */ |
585 | } print; |
586 | |
587 | /* Defined and undefined macros being queued for output with -dU at |
588 | @@ -154,6 +155,7 @@ |
589 | print.prev = 0; |
590 | print.outf = out_stream; |
591 | print.first_time = 1; |
592 | + print.src_file = ""; |
593 | } |
594 | |
595 | /* Writes out the preprocessed file, handling spacing and paste |
596 | @@ -313,7 +315,9 @@ |
597 | print.printed = 0; |
598 | } |
599 | |
600 | - if (src_line >= print.src_line && src_line < print.src_line + 8) |
601 | + if (src_line >= print.src_line |
602 | + && src_line < print.src_line + 8 |
603 | + && (flag_no_line_commands || strcmp (map->to_file, print.src_file) == 0)) |
604 | { |
605 | while (src_line > print.src_line) |
606 | { |
607 | @@ -345,6 +349,7 @@ |
608 | unsigned char *p; |
609 | |
610 | print.src_line = SOURCE_LINE (map, src_loc); |
611 | + print.src_file = map->to_file; |
612 | |
613 | /* cpp_quote_string does not nul-terminate, so we have to do it |
614 | ourselves. */ |
615 | |
616 | === modified file 'gcc/cfgloopmanip.c' |
617 | --- gcc/cfgloopmanip.c 2010-11-11 20:33:18 +0000 |
618 | +++ gcc/cfgloopmanip.c 2011-04-28 16:44:05 +0000 |
619 | @@ -174,7 +174,7 @@ |
620 | { |
621 | sbitmap in_queue; |
622 | basic_block *queue, *qtop, *qbeg, *qend; |
623 | - struct loop *base_loop; |
624 | + struct loop *base_loop, *target_loop; |
625 | edge e; |
626 | |
627 | /* We pass through blocks back-reachable from FROM, testing whether some |
628 | @@ -185,7 +185,11 @@ |
629 | fix_loop_placement. */ |
630 | |
631 | base_loop = from->loop_father; |
632 | - if (base_loop == current_loops->tree_root) |
633 | + /* If we are already in the outermost loop, the basic blocks cannot be moved |
634 | + outside of it. If FROM is the header of the base loop, it cannot be moved |
635 | + outside of it, either. In both cases, we can end now. */ |
636 | + if (base_loop == current_loops->tree_root |
637 | + || from == base_loop->header) |
638 | return; |
639 | |
640 | in_queue = sbitmap_alloc (last_basic_block); |
641 | @@ -214,12 +218,14 @@ |
642 | /* Subloop header, maybe move the loop upward. */ |
643 | if (!fix_loop_placement (from->loop_father)) |
644 | continue; |
645 | + target_loop = loop_outer (from->loop_father); |
646 | } |
647 | else |
648 | { |
649 | /* Ordinary basic block. */ |
650 | if (!fix_bb_placement (from)) |
651 | continue; |
652 | + target_loop = from->loop_father; |
653 | } |
654 | |
655 | FOR_EACH_EDGE (e, ei, from->succs) |
656 | @@ -248,9 +254,12 @@ |
657 | && (nca == base_loop |
658 | || nca != pred->loop_father)) |
659 | pred = pred->loop_father->header; |
660 | - else if (!flow_loop_nested_p (from->loop_father, pred->loop_father)) |
661 | + else if (!flow_loop_nested_p (target_loop, pred->loop_father)) |
662 | { |
663 | - /* No point in processing it. */ |
664 | + /* If PRED is already higher in the loop hierarchy than the |
665 | + TARGET_LOOP to that we moved FROM, the change of the position |
666 | + of FROM does not affect the position of PRED, so there is no |
667 | + point in processing it. */ |
668 | continue; |
669 | } |
670 | |
671 | |
672 | === modified file 'gcc/cgraphunit.c' |
673 | --- gcc/cgraphunit.c 2010-06-30 12:17:35 +0000 |
674 | +++ gcc/cgraphunit.c 2011-04-28 16:44:05 +0000 |
675 | @@ -553,15 +553,6 @@ |
676 | cgraph_mark_needed_node (node); |
677 | } |
678 | |
679 | -/* Return TRUE if NODE2 is equivalent to NODE or its clone. */ |
680 | -static bool |
681 | -clone_of_p (struct cgraph_node *node, struct cgraph_node *node2) |
682 | -{ |
683 | - while (node != node2 && node2) |
684 | - node2 = node2->clone_of; |
685 | - return node2 != NULL; |
686 | -} |
687 | - |
688 | /* Verify cgraph nodes of given cgraph node. */ |
689 | void |
690 | verify_cgraph_node (struct cgraph_node *node) |
691 | @@ -777,16 +768,6 @@ |
692 | debug_tree (e->callee->decl); |
693 | error_found = true; |
694 | } |
695 | - else if (!node->global.inlined_to |
696 | - && !e->callee->global.inlined_to |
697 | - && !clone_of_p (cgraph_node (decl), e->callee)) |
698 | - { |
699 | - error ("edge points to wrong declaration:"); |
700 | - debug_tree (e->callee->decl); |
701 | - fprintf (stderr," Instead of:"); |
702 | - debug_tree (decl); |
703 | - error_found = true; |
704 | - } |
705 | e->aux = (void *)1; |
706 | } |
707 | else |
708 | @@ -2259,7 +2240,10 @@ |
709 | node->next_sibling_clone = NULL; |
710 | node->prev_sibling_clone = NULL; |
711 | if (!node->clone_of->analyzed && !node->clone_of->clones) |
712 | - cgraph_remove_node (node->clone_of); |
713 | + { |
714 | + cgraph_release_function_body (node->clone_of); |
715 | + cgraph_node_remove_callees (node->clone_of); |
716 | + } |
717 | node->clone_of = NULL; |
718 | bitmap_obstack_release (NULL); |
719 | } |
720 | @@ -2394,30 +2378,7 @@ |
721 | if (!node->analyzed && node->callees) |
722 | cgraph_node_remove_callees (node); |
723 | if (cgraph_dump_file) |
724 | - fprintf (cgraph_dump_file, "Updating call sites\n"); |
725 | - for (node = cgraph_nodes; node; node = node->next) |
726 | - if (node->analyzed && !node->clone_of |
727 | - && gimple_has_body_p (node->decl)) |
728 | - { |
729 | - struct cgraph_edge *e; |
730 | - |
731 | - current_function_decl = node->decl; |
732 | - push_cfun (DECL_STRUCT_FUNCTION (node->decl)); |
733 | - for (e = node->callees; e; e = e->next_callee) |
734 | - cgraph_redirect_edge_call_stmt_to_callee (e); |
735 | - pop_cfun (); |
736 | - current_function_decl = NULL; |
737 | -#ifdef ENABLE_CHECKING |
738 | - verify_cgraph_node (node); |
739 | -#endif |
740 | - } |
741 | - if (cgraph_dump_file) |
742 | fprintf (cgraph_dump_file, "Materialization Call site updates done.\n"); |
743 | - /* All changes to parameters have been performed. In order not to |
744 | - incorrectly repeat them, we simply dispose of the bitmaps that drive the |
745 | - changes. */ |
746 | - for (node = cgraph_nodes; node; node = node->next) |
747 | - node->clone.combined_args_to_skip = NULL; |
748 | #ifdef ENABLE_CHECKING |
749 | verify_cgraph (); |
750 | #endif |
751 | |
752 | === modified file 'gcc/config/alpha/osf.h' |
753 | --- gcc/config/alpha/osf.h 2010-12-03 12:54:16 +0000 |
754 | +++ gcc/config/alpha/osf.h 2011-04-28 16:44:05 +0000 |
755 | @@ -1,6 +1,6 @@ |
756 | /* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1. |
757 | Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003, |
758 | - 2004, 2007, 2009, 2010 Free Software Foundation, Inc. |
759 | + 2004, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. |
760 | Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) |
761 | |
762 | This file is part of GCC. |
763 | @@ -199,6 +199,10 @@ |
764 | #define LD_INIT_SWITCH "-init" |
765 | #define LD_FINI_SWITCH "-fini" |
766 | |
767 | +/* From Tru64 UNIX Object File and Symbol Table Format Specification, |
768 | + 2.3.5 Alignment, p.19. */ |
769 | +#define MAX_OFILE_ALIGNMENT (64 * 1024 * BITS_PER_UNIT) |
770 | + |
771 | /* Select a format to encode pointers in exception handling data. CODE |
772 | is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is |
773 | true if the symbol may be affected by dynamic relocations. |
774 | |
775 | === modified file 'gcc/config/i386/predicates.md' |
776 | --- gcc/config/i386/predicates.md 2010-06-21 13:52:07 +0000 |
777 | +++ gcc/config/i386/predicates.md 2011-04-28 16:44:05 +0000 |
778 | @@ -990,13 +990,8 @@ |
779 | ;; Return 1 if OP is a comparison that can be used in the CMPSS/CMPPS insns. |
780 | ;; The first set are supported directly; the second set can't be done with |
781 | ;; full IEEE support, i.e. NaNs. |
782 | -;; |
783 | -;; ??? It would seem that we have a lot of uses of this predicate that pass |
784 | -;; it the wrong mode. We got away with this because the old function didn't |
785 | -;; check the mode at all. Mirror that for now by calling this a special |
786 | -;; predicate. |
787 | |
788 | -(define_special_predicate "sse_comparison_operator" |
789 | +(define_predicate "sse_comparison_operator" |
790 | (match_code "eq,lt,le,unordered,ne,unge,ungt,ordered")) |
791 | |
792 | ;; Return 1 if OP is a comparison operator that can be issued by |
793 | |
794 | === modified file 'gcc/config/i386/sse.md' |
795 | --- gcc/config/i386/sse.md 2011-03-03 21:11:16 +0000 |
796 | +++ gcc/config/i386/sse.md 2011-04-28 16:44:05 +0000 |
797 | @@ -1484,7 +1484,7 @@ |
798 | (set_attr "mode" "<MODE>")]) |
799 | |
800 | (define_insn "avx_cmps<ssemodesuffixf2c><mode>3" |
801 | - [(set (match_operand:SSEMODEF2P 0 "register_operand" "") |
802 | + [(set (match_operand:SSEMODEF2P 0 "register_operand" "=x") |
803 | (vec_merge:SSEMODEF2P |
804 | (unspec:SSEMODEF2P |
805 | [(match_operand:SSEMODEF2P 1 "register_operand" "x") |
806 | @@ -3934,7 +3934,7 @@ |
807 | (define_insn "*vec_concatv2sf_avx" |
808 | [(set (match_operand:V2SF 0 "register_operand" "=x,x,x,*y ,*y") |
809 | (vec_concat:V2SF |
810 | - (match_operand:SF 1 "nonimmediate_operand" " x,x,m, x , m") |
811 | + (match_operand:SF 1 "nonimmediate_operand" " x,x,m, 0 , m") |
812 | (match_operand:SF 2 "vector_move_operand" " x,m,C,*ym, C")))] |
813 | "TARGET_AVX" |
814 | "@ |
815 | @@ -4023,13 +4023,15 @@ |
816 | DONE; |
817 | }) |
818 | |
819 | +;; Avoid combining registers from different units in a single alternative, |
820 | +;; see comment above inline_secondary_memory_needed function in i386.c |
821 | (define_insn "*vec_set<mode>_0_avx" |
822 | - [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m") |
823 | + [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m, m,m") |
824 | (vec_merge:SSEMODE4S |
825 | (vec_duplicate:SSEMODE4S |
826 | (match_operand:<ssescalarmode> 2 |
827 | - "general_operand" " x,m,*r,x,*rm,x*rfF")) |
828 | - (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0") |
829 | + "general_operand" " x,m,*r,x,*rm,x,*r,fF")) |
830 | + (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0, 0,0") |
831 | (const_int 1)))] |
832 | "TARGET_AVX" |
833 | "@ |
834 | @@ -4038,20 +4040,24 @@ |
835 | vmovd\t{%2, %0|%0, %2} |
836 | vmovss\t{%2, %1, %0|%0, %1, %2} |
837 | vpinsrd\t{$0, %2, %1, %0|%0, %1, %2, 0} |
838 | + # |
839 | + # |
840 | #" |
841 | - [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*") |
842 | - (set_attr "prefix_extra" "*,*,*,*,1,*") |
843 | - (set_attr "length_immediate" "*,*,*,*,1,*") |
844 | + [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*,*") |
845 | + (set_attr "prefix_extra" "*,*,*,*,1,*,*,*") |
846 | + (set_attr "length_immediate" "*,*,*,*,1,*,*,*") |
847 | (set_attr "prefix" "vex") |
848 | - (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")]) |
849 | + (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*,*")]) |
850 | |
851 | +;; Avoid combining registers from different units in a single alternative, |
852 | +;; see comment above inline_secondary_memory_needed function in i386.c |
853 | (define_insn "*vec_set<mode>_0_sse4_1" |
854 | - [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m") |
855 | + [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x, m,m") |
856 | (vec_merge:SSEMODE4S |
857 | (vec_duplicate:SSEMODE4S |
858 | (match_operand:<ssescalarmode> 2 |
859 | - "general_operand" " x,m,*r,x,*rm,*rfF")) |
860 | - (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0,0") |
861 | + "general_operand" " x,m,*r,x,*rm,*r,fF")) |
862 | + (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0, 0,0") |
863 | (const_int 1)))] |
864 | "TARGET_SSE4_1" |
865 | "@ |
866 | @@ -4060,44 +4066,53 @@ |
867 | movd\t{%2, %0|%0, %2} |
868 | movss\t{%2, %0|%0, %2} |
869 | pinsrd\t{$0, %2, %0|%0, %2, 0} |
870 | + # |
871 | #" |
872 | - [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*") |
873 | - (set_attr "prefix_extra" "*,*,*,*,1,*") |
874 | - (set_attr "length_immediate" "*,*,*,*,1,*") |
875 | - (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")]) |
876 | + [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*") |
877 | + (set_attr "prefix_extra" "*,*,*,*,1,*,*") |
878 | + (set_attr "length_immediate" "*,*,*,*,1,*,*") |
879 | + (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*")]) |
880 | |
881 | +;; Avoid combining registers from different units in a single alternative, |
882 | +;; see comment above inline_secondary_memory_needed function in i386.c |
883 | (define_insn "*vec_set<mode>_0_sse2" |
884 | - [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m") |
885 | + [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m, m,m") |
886 | (vec_merge:SSEMODE4S |
887 | (vec_duplicate:SSEMODE4S |
888 | (match_operand:<ssescalarmode> 2 |
889 | - "general_operand" " m,*r,x,x*rfF")) |
890 | - (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0") |
891 | + "general_operand" " m,*r,x,x,*r,fF")) |
892 | + (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0, 0,0") |
893 | (const_int 1)))] |
894 | "TARGET_SSE2" |
895 | "@ |
896 | mov<ssescalarmodesuffix2s>\t{%2, %0|%0, %2} |
897 | movd\t{%2, %0|%0, %2} |
898 | movss\t{%2, %0|%0, %2} |
899 | + # |
900 | + # |
901 | #" |
902 | [(set_attr "type" "ssemov") |
903 | - (set_attr "mode" "<ssescalarmode>,SI,SF,*")]) |
904 | + (set_attr "mode" "<ssescalarmode>,SI,SF,*,*,*")]) |
905 | |
906 | +;; Avoid combining registers from different units in a single alternative, |
907 | +;; see comment above inline_secondary_memory_needed function in i386.c |
908 | (define_insn "vec_set<mode>_0" |
909 | - [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m") |
910 | + [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m, m,m") |
911 | (vec_merge:SSEMODE4S |
912 | (vec_duplicate:SSEMODE4S |
913 | (match_operand:<ssescalarmode> 2 |
914 | - "general_operand" " m,x,x*rfF")) |
915 | - (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0") |
916 | + "general_operand" " m,x,x,*r,fF")) |
917 | + (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0, 0,0") |
918 | (const_int 1)))] |
919 | "TARGET_SSE" |
920 | "@ |
921 | movss\t{%2, %0|%0, %2} |
922 | movss\t{%2, %0|%0, %2} |
923 | + # |
924 | + # |
925 | #" |
926 | [(set_attr "type" "ssemov") |
927 | - (set_attr "mode" "SF")]) |
928 | + (set_attr "mode" "SF,SF,*,*,*")]) |
929 | |
930 | ;; A subset is vec_setv4sf. |
931 | (define_insn "*vec_setv4sf_avx" |
932 | @@ -4143,7 +4158,16 @@ |
933 | (match_operand:SI 3 "const_0_to_255_operand" "n")] |
934 | UNSPEC_INSERTPS))] |
935 | "TARGET_AVX" |
936 | - "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}"; |
937 | +{ |
938 | + if (MEM_P (operands[2])) |
939 | + { |
940 | + unsigned count_s = INTVAL (operands[3]) >> 6; |
941 | + if (count_s) |
942 | + operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f); |
943 | + operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4); |
944 | + } |
945 | + return "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}"; |
946 | +} |
947 | [(set_attr "type" "sselog") |
948 | (set_attr "prefix" "vex") |
949 | (set_attr "prefix_extra" "1") |
950 | @@ -4152,12 +4176,21 @@ |
951 | |
952 | (define_insn "sse4_1_insertps" |
953 | [(set (match_operand:V4SF 0 "register_operand" "=x") |
954 | - (unspec:V4SF [(match_operand:V4SF 2 "register_operand" "x") |
955 | + (unspec:V4SF [(match_operand:V4SF 2 "nonimmediate_operand" "xm") |
956 | (match_operand:V4SF 1 "register_operand" "0") |
957 | (match_operand:SI 3 "const_0_to_255_operand" "n")] |
958 | UNSPEC_INSERTPS))] |
959 | "TARGET_SSE4_1" |
960 | - "insertps\t{%3, %2, %0|%0, %2, %3}"; |
961 | +{ |
962 | + if (MEM_P (operands[2])) |
963 | + { |
964 | + unsigned count_s = INTVAL (operands[3]) >> 6; |
965 | + if (count_s) |
966 | + operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f); |
967 | + operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4); |
968 | + } |
969 | + return "insertps\t{%3, %2, %0|%0, %2, %3}"; |
970 | +} |
971 | [(set_attr "type" "sselog") |
972 | (set_attr "prefix_data16" "1") |
973 | (set_attr "prefix_extra" "1") |
974 | @@ -4823,6 +4856,8 @@ |
975 | (set_attr "prefix" "vex") |
976 | (set_attr "mode" "V1DF,V2DF,DF,DF,DF")]) |
977 | |
978 | +;; Avoid combining registers from different units in a single alternative, |
979 | +;; see comment above inline_secondary_memory_needed function in i386.c |
980 | (define_insn "sse2_storehpd" |
981 | [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x,*f,r") |
982 | (vec_select:DF |
983 | @@ -4926,6 +4961,8 @@ |
984 | (set_attr "prefix" "vex") |
985 | (set_attr "mode" "V1DF,V2DF,DF,DF,DF")]) |
986 | |
987 | +;; Avoid combining registers from different units in a single alternative, |
988 | +;; see comment above inline_secondary_memory_needed function in i386.c |
989 | (define_insn "sse2_loadhpd" |
990 | [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o") |
991 | (vec_concat:V2DF |
992 | @@ -4999,6 +5036,8 @@ |
993 | (set_attr "prefix" "vex") |
994 | (set_attr "mode" "DF,V1DF,V1DF,V1DF,DF,DF,DF")]) |
995 | |
996 | +;; Avoid combining registers from different units in a single alternative, |
997 | +;; see comment above inline_secondary_memory_needed function in i386.c |
998 | (define_insn "sse2_loadlpd" |
999 | [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,x,m,m,m") |
1000 | (vec_concat:V2DF |
1001 | |
1002 | === modified file 'gcc/config/pa/pa.c' |
1003 | --- gcc/config/pa/pa.c 2010-12-19 19:50:17 +0000 |
1004 | +++ gcc/config/pa/pa.c 2011-04-28 16:44:05 +0000 |
1005 | @@ -1635,15 +1635,12 @@ |
1006 | return 1; |
1007 | } |
1008 | /* Handle secondary reloads for SAR. These occur when trying to load |
1009 | - the SAR from memory, FP register, or with a constant. */ |
1010 | + the SAR from memory or a constant. */ |
1011 | else if (scratch_reg |
1012 | && GET_CODE (operand0) == REG |
1013 | && REGNO (operand0) < FIRST_PSEUDO_REGISTER |
1014 | && REGNO_REG_CLASS (REGNO (operand0)) == SHIFT_REGS |
1015 | - && (GET_CODE (operand1) == MEM |
1016 | - || GET_CODE (operand1) == CONST_INT |
1017 | - || (GET_CODE (operand1) == REG |
1018 | - && FP_REG_CLASS_P (REGNO_REG_CLASS (REGNO (operand1)))))) |
1019 | + && (GET_CODE (operand1) == MEM || GET_CODE (operand1) == CONST_INT)) |
1020 | { |
1021 | /* D might not fit in 14 bits either; for such cases load D into |
1022 | scratch reg. */ |
1023 | @@ -5697,6 +5694,10 @@ |
1024 | fputc ('\n', asm_out_file); |
1025 | } |
1026 | |
1027 | |
1028 | +/* Inform reload about cases where moving X with a mode MODE to a register in |
1029 | + RCLASS requires an extra scratch or immediate register. Return the class |
1030 | + needed for the immediate register. */ |
1031 | + |
1032 | static enum reg_class |
1033 | pa_secondary_reload (bool in_p, rtx x, enum reg_class rclass, |
1034 | enum machine_mode mode, secondary_reload_info *sri) |
1035 | @@ -5796,20 +5797,27 @@ |
1036 | return NO_REGS; |
1037 | } |
1038 | |
1039 | - /* We need a secondary register (GPR) for copies between the SAR |
1040 | - and anything other than a general register. */ |
1041 | - if (rclass == SHIFT_REGS && (regno <= 0 || regno >= 32)) |
1042 | + /* A SAR<->FP register copy requires an intermediate general register |
1043 | + and secondary memory. We need a secondary reload with a general |
1044 | + scratch register for spills. */ |
1045 | + if (rclass == SHIFT_REGS) |
1046 | { |
1047 | - sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode]; |
1048 | - return NO_REGS; |
1049 | + /* Handle spill. */ |
1050 | + if (regno >= FIRST_PSEUDO_REGISTER || regno < 0) |
1051 | + { |
1052 | + sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode]; |
1053 | + return NO_REGS; |
1054 | + } |
1055 | + |
1056 | + /* Handle FP copy. */ |
1057 | + if (FP_REG_CLASS_P (REGNO_REG_CLASS (regno))) |
1058 | + return GENERAL_REGS; |
1059 | } |
1060 | |
1061 | - /* A SAR<->FP register copy requires a secondary register (GPR) as |
1062 | - well as secondary memory. */ |
1063 | if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER |
1064 | - && (REGNO_REG_CLASS (regno) == SHIFT_REGS |
1065 | - && FP_REG_CLASS_P (rclass))) |
1066 | - sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode]; |
1067 | + && REGNO_REG_CLASS (regno) == SHIFT_REGS |
1068 | + && FP_REG_CLASS_P (rclass)) |
1069 | + return GENERAL_REGS; |
1070 | |
1071 | return NO_REGS; |
1072 | } |
1073 | |
1074 | === modified file 'gcc/config/pa/pa.h' |
1075 | --- gcc/config/pa/pa.h 2010-08-08 18:55:40 +0000 |
1076 | +++ gcc/config/pa/pa.h 2011-04-28 16:44:05 +0000 |
1077 | @@ -1360,6 +1360,7 @@ |
1078 | Other copies are reasonably cheap. */ |
1079 | #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ |
1080 | (CLASS1 == SHIFT_REGS ? 0x100 \ |
1081 | + : CLASS2 == SHIFT_REGS && FP_REG_CLASS_P (CLASS1) ? 18 \ |
1082 | : FP_REG_CLASS_P (CLASS1) && ! FP_REG_CLASS_P (CLASS2) ? 16 \ |
1083 | : FP_REG_CLASS_P (CLASS2) && ! FP_REG_CLASS_P (CLASS1) ? 16 \ |
1084 | : 2) |
1085 | |
1086 | === modified file 'gcc/config/pa/pa32-regs.h' |
1087 | --- gcc/config/pa/pa32-regs.h 2009-04-21 18:03:23 +0000 |
1088 | +++ gcc/config/pa/pa32-regs.h 2011-04-28 16:44:05 +0000 |
1089 | @@ -226,6 +226,7 @@ |
1090 | registers. */ |
1091 | #define HARD_REGNO_MODE_OK(REGNO, MODE) \ |
1092 | ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \ |
1093 | + : (REGNO) == 88 ? SCALAR_INT_MODE_P (MODE) \ |
1094 | : !TARGET_PA_11 && FP_REGNO_P (REGNO) \ |
1095 | ? (VALID_FP_MODE_P (MODE) \ |
1096 | && (GET_MODE_SIZE (MODE) <= 8 \ |
1097 | |
1098 | === modified file 'gcc/config/pa/pa64-regs.h' |
1099 | --- gcc/config/pa/pa64-regs.h 2009-02-20 15:20:38 +0000 |
1100 | +++ gcc/config/pa/pa64-regs.h 2011-04-28 16:44:05 +0000 |
1101 | @@ -161,10 +161,11 @@ |
1102 | |
1103 | /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. |
1104 | On the HP-PA, the cpu registers can hold any mode. We |
1105 | - force this to be an even register is it cannot hold the full mode. */ |
1106 | + force this to be an even register if it cannot hold the full mode. */ |
1107 | #define HARD_REGNO_MODE_OK(REGNO, MODE) \ |
1108 | ((REGNO) == 0 \ |
1109 | ? (MODE) == CCmode || (MODE) == CCFPmode \ |
1110 | + : (REGNO) == 60 ? SCALAR_INT_MODE_P (MODE) \ |
1111 | /* Make wide modes be in aligned registers. */ \ |
1112 | : FP_REGNO_P (REGNO) \ |
1113 | ? (VALID_FP_MODE_P (MODE) \ |
1114 | |
1115 | === modified file 'gcc/config/rx/rx.md' |
1116 | --- gcc/config/rx/rx.md 2011-03-16 11:47:59 +0000 |
1117 | +++ gcc/config/rx/rx.md 2011-04-28 16:44:05 +0000 |
1118 | @@ -2031,6 +2031,14 @@ |
1119 | rtx addr2 = gen_rtx_REG (SImode, 2); |
1120 | rtx len = gen_rtx_REG (SImode, 3); |
1121 | |
1122 | + /* Do not use when the source or destination are volatile - the SMOVF |
1123 | + instruction will read and write in word sized blocks, which may be |
1124 | + outside of the valid address range. */ |
1125 | + if (MEM_P (operands[0]) && MEM_VOLATILE_P (operands[0])) |
1126 | + FAIL; |
1127 | + if (MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1])) |
1128 | + FAIL; |
1129 | + |
1130 | if (REG_P (operands[0]) && (REGNO (operands[0]) == 2 |
1131 | || REGNO (operands[0]) == 3)) |
1132 | FAIL; |
1133 | @@ -2040,6 +2048,7 @@ |
1134 | if (REG_P (operands[2]) && (REGNO (operands[2]) == 1 |
1135 | || REGNO (operands[2]) == 2)) |
1136 | FAIL; |
1137 | + |
1138 | emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX)); |
1139 | emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX)); |
1140 | emit_move_insn (len, force_operand (operands[2], NULL_RTX)); |
1141 | |
1142 | === modified file 'gcc/cp/ChangeLog' |
1143 | --- gcc/cp/ChangeLog 2011-03-28 15:06:28 +0000 |
1144 | +++ gcc/cp/ChangeLog 2011-04-28 16:44:05 +0000 |
1145 | @@ -1,3 +1,50 @@ |
1146 | +2011-04-28 Release Manager |
1147 | + |
1148 | + * GCC 4.5.3 released. |
1149 | + |
1150 | +2011-04-26 Dodji Seketeli <dodji@redhat.com> |
1151 | + |
1152 | + PR c++/46824 |
1153 | + * call.c (add_builtin_candidate)<case INDIRECT_REF>: The type of |
1154 | + the argument of the indirection operator should not be dependent. |
1155 | + Fix the comment. |
1156 | + |
1157 | +2011-04-26 Jason Merrill <jason@redhat.com> |
1158 | + |
1159 | + PR c++/42687 |
1160 | + * parser.c (cp_parser_primary_expression): Set *idk to |
1161 | + CP_ID_KIND_NONE for a parenthesized identifier. |
1162 | + |
1163 | +2011-04-20 Jason Merrill <jason@redhat.com> |
1164 | + |
1165 | + PR c++/48594 |
1166 | + * decl2.c (build_offset_ref_call_from_tree): Fix calling a functor |
1167 | + or pointer to (non-member) function. |
1168 | + |
1169 | +2011-04-19 Jason Merrill <jason@redhat.com> |
1170 | + |
1171 | + PR c++/46304 |
1172 | + * typeck.c (cp_build_binary_op): Fold COMPLEX_EXPR. |
1173 | + |
1174 | +2011-04-19 Jason Merrill <jason@redhat.com> |
1175 | + |
1176 | + PR c++/45267 |
1177 | + * decl.c (duplicate_decls): Keep always_inline attribute |
1178 | + in sync with DECL_DISREGARD_INLINE_LIMITS. |
1179 | + |
1180 | +2011-04-18 Richard Guenther <rguenther@suse.de> |
1181 | + |
1182 | + Backported from 4.6 branch |
1183 | + 2011-03-11 Jakub Jelinek <jakub@redhat.com> |
1184 | + |
1185 | + PR c++/48035 |
1186 | + * init.c (build_zero_init_1): Extracted from build_zero_init. |
1187 | + Add FIELD_SIZE argument, if non-NULL and field bit_position |
1188 | + as not smaller than that, don't add that field's initializer. |
1189 | + Pass DECL_SIZE as last argument to build_zero_init_1 |
1190 | + for DECL_FIELD_IS_BASE fields. |
1191 | + (build_zero_init): Use build_zero_init_1. |
1192 | + |
1193 | 2011-03-28 Jason Merrill <jason@redhat.com> |
1194 | |
1195 | Revert: |
1196 | |
1197 | === modified file 'gcc/cp/call.c' |
1198 | --- gcc/cp/call.c 2010-09-07 15:47:57 +0000 |
1199 | +++ gcc/cp/call.c 2011-04-28 16:44:05 +0000 |
1200 | @@ -1023,7 +1023,7 @@ |
1201 | if (!expr) |
1202 | return NULL; |
1203 | |
1204 | - conversions = lookup_conversions (s, /*lookup_template_convs_p=*/true); |
1205 | + conversions = lookup_conversions (s); |
1206 | if (!conversions) |
1207 | return NULL; |
1208 | |
1209 | @@ -1925,7 +1925,7 @@ |
1210 | } |
1211 | return; |
1212 | |
1213 | -/* 7 For every cv-qualified or cv-unqualified complete object type T, there |
1214 | +/* 7 For every cv-qualified or cv-unqualified object type T, there |
1215 | exist candidate operator functions of the form |
1216 | |
1217 | T& operator*(T*); |
1218 | @@ -1936,6 +1936,7 @@ |
1219 | |
1220 | case INDIRECT_REF: |
1221 | if (TREE_CODE (type1) == POINTER_TYPE |
1222 | + && !uses_template_parms (TREE_TYPE (type1)) |
1223 | && (TYPE_PTROB_P (type1) |
1224 | || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)) |
1225 | break; |
1226 | @@ -2376,8 +2377,7 @@ |
1227 | if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR) |
1228 | return; |
1229 | |
1230 | - convs = lookup_conversions (argtypes[i], |
1231 | - /*lookup_template_convs_p=*/false); |
1232 | + convs = lookup_conversions (argtypes[i]); |
1233 | |
1234 | if (code == COND_EXPR) |
1235 | { |
1236 | @@ -2867,8 +2867,7 @@ |
1237 | reference to it)... */ |
1238 | } |
1239 | else |
1240 | - conv_fns = lookup_conversions (fromtype, |
1241 | - /*lookup_template_convs_p=*/true); |
1242 | + conv_fns = lookup_conversions (fromtype); |
1243 | } |
1244 | |
1245 | candidates = 0; |
1246 | @@ -3402,7 +3401,7 @@ |
1247 | } |
1248 | } |
1249 | |
1250 | - convs = lookup_conversions (type, /*lookup_template_convs_p=*/true); |
1251 | + convs = lookup_conversions (type); |
1252 | |
1253 | for (; convs; convs = TREE_CHAIN (convs)) |
1254 | { |
1255 | |
1256 | === modified file 'gcc/cp/cp-tree.h' |
1257 | --- gcc/cp/cp-tree.h 2010-04-27 22:03:06 +0000 |
1258 | +++ gcc/cp/cp-tree.h 2011-04-28 16:44:05 +0000 |
1259 | @@ -5026,7 +5026,7 @@ |
1260 | extern bool at_class_scope_p (void); |
1261 | extern bool at_namespace_scope_p (void); |
1262 | extern tree context_for_name_lookup (tree); |
1263 | -extern tree lookup_conversions (tree, bool); |
1264 | +extern tree lookup_conversions (tree); |
1265 | extern tree binfo_from_vbase (tree); |
1266 | extern tree binfo_for_vbase (tree, tree); |
1267 | extern tree look_for_overrides_here (tree, tree); |
1268 | |
1269 | === modified file 'gcc/cp/cvt.c' |
1270 | --- gcc/cp/cvt.c 2010-02-20 21:32:06 +0000 |
1271 | +++ gcc/cp/cvt.c 2011-04-28 16:44:05 +0000 |
1272 | @@ -1199,9 +1199,7 @@ |
1273 | if (!TYPE_HAS_CONVERSION (basetype)) |
1274 | return NULL_TREE; |
1275 | |
1276 | - for (conv = lookup_conversions (basetype, /*lookup_template_convs_p=*/true); |
1277 | - conv; |
1278 | - conv = TREE_CHAIN (conv)) |
1279 | + for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv)) |
1280 | { |
1281 | int win = 0; |
1282 | tree candidate; |
1283 | |
1284 | === modified file 'gcc/cp/decl.c' |
1285 | --- gcc/cp/decl.c 2011-04-06 12:29:08 +0000 |
1286 | +++ gcc/cp/decl.c 2011-04-28 16:44:05 +0000 |
1287 | @@ -1975,6 +1975,19 @@ |
1288 | |
1289 | /* [temp.expl.spec/14] We don't inline explicit specialization |
1290 | just because the primary template says so. */ |
1291 | + |
1292 | + /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with |
1293 | + the always_inline attribute. */ |
1294 | + if (DECL_DISREGARD_INLINE_LIMITS (olddecl) |
1295 | + && !DECL_DISREGARD_INLINE_LIMITS (newdecl)) |
1296 | + { |
1297 | + if (DECL_DECLARED_INLINE_P (newdecl)) |
1298 | + DECL_DISREGARD_INLINE_LIMITS (newdecl) = true; |
1299 | + else |
1300 | + DECL_ATTRIBUTES (newdecl) |
1301 | + = remove_attribute ("always_inline", |
1302 | + DECL_ATTRIBUTES (newdecl)); |
1303 | + } |
1304 | } |
1305 | else if (new_defines_function && DECL_INITIAL (olddecl)) |
1306 | { |
1307 | |
1308 | === modified file 'gcc/cp/decl2.c' |
1309 | --- gcc/cp/decl2.c 2010-03-23 22:29:53 +0000 |
1310 | +++ gcc/cp/decl2.c 2011-04-28 16:44:05 +0000 |
1311 | @@ -3911,9 +3911,12 @@ |
1312 | because we depend on the form of FN. */ |
1313 | make_args_non_dependent (*args); |
1314 | object = build_non_dependent_expr (object); |
1315 | - if (TREE_CODE (fn) == DOTSTAR_EXPR) |
1316 | - object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error); |
1317 | - VEC_safe_insert (tree, gc, *args, 0, object); |
1318 | + if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE) |
1319 | + { |
1320 | + if (TREE_CODE (fn) == DOTSTAR_EXPR) |
1321 | + object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error); |
1322 | + VEC_safe_insert (tree, gc, *args, 0, object); |
1323 | + } |
1324 | /* Now that the arguments are done, transform FN. */ |
1325 | fn = build_non_dependent_expr (fn); |
1326 | } |
1327 | @@ -3933,7 +3936,10 @@ |
1328 | VEC_safe_insert (tree, gc, *args, 0, object_addr); |
1329 | } |
1330 | |
1331 | - expr = cp_build_function_call_vec (fn, args, tf_warning_or_error); |
1332 | + if (CLASS_TYPE_P (TREE_TYPE (fn))) |
1333 | + expr = build_op_call (fn, args, tf_warning_or_error); |
1334 | + else |
1335 | + expr = cp_build_function_call_vec (fn, args, tf_warning_or_error); |
1336 | if (processing_template_decl && expr != error_mark_node) |
1337 | expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args); |
1338 | |
1339 | |
1340 | === modified file 'gcc/cp/init.c' |
1341 | --- gcc/cp/init.c 2010-08-23 06:39:42 +0000 |
1342 | +++ gcc/cp/init.c 2011-04-28 16:44:05 +0000 |
1343 | @@ -143,10 +143,13 @@ |
1344 | is the number of elements in the array. If STATIC_STORAGE_P is |
1345 | TRUE, initializers are only generated for entities for which |
1346 | zero-initialization does not simply mean filling the storage with |
1347 | - zero bytes. */ |
1348 | + zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field, |
1349 | + subfields with bit positions at or above that bit size shouldn't |
1350 | + be added. */ |
1351 | |
1352 | -tree |
1353 | -build_zero_init (tree type, tree nelts, bool static_storage_p) |
1354 | +static tree |
1355 | +build_zero_init_1 (tree type, tree nelts, bool static_storage_p, |
1356 | + tree field_size) |
1357 | { |
1358 | tree init = NULL_TREE; |
1359 | |
1360 | @@ -191,15 +194,32 @@ |
1361 | if (TREE_CODE (field) != FIELD_DECL) |
1362 | continue; |
1363 | |
1364 | + /* Don't add virtual bases for base classes if they are beyond |
1365 | + the size of the current field, that means it is present |
1366 | + somewhere else in the object. */ |
1367 | + if (field_size) |
1368 | + { |
1369 | + tree bitpos = bit_position (field); |
1370 | + if (TREE_CODE (bitpos) == INTEGER_CST |
1371 | + && !tree_int_cst_lt (bitpos, field_size)) |
1372 | + continue; |
1373 | + } |
1374 | + |
1375 | /* Note that for class types there will be FIELD_DECLs |
1376 | corresponding to base classes as well. Thus, iterating |
1377 | over TYPE_FIELDs will result in correct initialization of |
1378 | all of the subobjects. */ |
1379 | if (!static_storage_p || !zero_init_p (TREE_TYPE (field))) |
1380 | { |
1381 | - tree value = build_zero_init (TREE_TYPE (field), |
1382 | - /*nelts=*/NULL_TREE, |
1383 | - static_storage_p); |
1384 | + tree new_field_size |
1385 | + = (DECL_FIELD_IS_BASE (field) |
1386 | + && DECL_SIZE (field) |
1387 | + && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST) |
1388 | + ? DECL_SIZE (field) : NULL_TREE; |
1389 | + tree value = build_zero_init_1 (TREE_TYPE (field), |
1390 | + /*nelts=*/NULL_TREE, |
1391 | + static_storage_p, |
1392 | + new_field_size); |
1393 | if (value) |
1394 | CONSTRUCTOR_APPEND_ELT(v, field, value); |
1395 | } |
1396 | @@ -247,9 +267,9 @@ |
1397 | ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node, |
1398 | max_index); |
1399 | |
1400 | - ce->value = build_zero_init (TREE_TYPE (type), |
1401 | - /*nelts=*/NULL_TREE, |
1402 | - static_storage_p); |
1403 | + ce->value = build_zero_init_1 (TREE_TYPE (type), |
1404 | + /*nelts=*/NULL_TREE, |
1405 | + static_storage_p, NULL_TREE); |
1406 | } |
1407 | |
1408 | /* Build a constructor to contain the initializations. */ |
1409 | @@ -267,6 +287,24 @@ |
1410 | return init; |
1411 | } |
1412 | |
1413 | +/* Return an expression for the zero-initialization of an object with |
1414 | + type T. This expression will either be a constant (in the case |
1415 | + that T is a scalar), or a CONSTRUCTOR (in the case that T is an |
1416 | + aggregate), or NULL (in the case that T does not require |
1417 | + initialization). In either case, the value can be used as |
1418 | + DECL_INITIAL for a decl of the indicated TYPE; it is a valid static |
1419 | + initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS |
1420 | + is the number of elements in the array. If STATIC_STORAGE_P is |
1421 | + TRUE, initializers are only generated for entities for which |
1422 | + zero-initialization does not simply mean filling the storage with |
1423 | + zero bytes. */ |
1424 | + |
1425 | +tree |
1426 | +build_zero_init (tree type, tree nelts, bool static_storage_p) |
1427 | +{ |
1428 | + return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE); |
1429 | +} |
1430 | + |
1431 | /* Return a suitable initializer for value-initializing an object of type |
1432 | TYPE, as described in [dcl.init]. */ |
1433 | |
1434 | |
1435 | === modified file 'gcc/cp/parser.c' |
1436 | --- gcc/cp/parser.c 2011-03-02 18:46:01 +0000 |
1437 | +++ gcc/cp/parser.c 2011-04-28 16:44:05 +0000 |
1438 | @@ -3325,6 +3325,12 @@ |
1439 | `&A::B' might be a pointer-to-member, but `&(A::B)' is |
1440 | not. */ |
1441 | finish_parenthesized_expr (expr); |
1442 | + /* DR 705: Wrapping an unqualified name in parentheses |
1443 | + suppresses arg-dependent lookup. We want to pass back |
1444 | + CP_ID_KIND_QUALIFIED for suppressing vtable lookup |
1445 | + (c++/37862), but none of the others. */ |
1446 | + if (*idk != CP_ID_KIND_QUALIFIED) |
1447 | + *idk = CP_ID_KIND_NONE; |
1448 | } |
1449 | /* The `>' token might be the end of a template-id or |
1450 | template-parameter-list now. */ |
1451 | |
1452 | === modified file 'gcc/cp/search.c' |
1453 | --- gcc/cp/search.c 2010-02-10 07:37:37 +0000 |
1454 | +++ gcc/cp/search.c 2011-04-28 16:44:05 +0000 |
1455 | @@ -2420,13 +2420,10 @@ |
1456 | functions in this node were selected. This function is effectively |
1457 | performing a set of member lookups as lookup_fnfield does, but |
1458 | using the type being converted to as the unique key, rather than the |
1459 | - field name. |
1460 | - If LOOKUP_TEMPLATE_CONVS_P is TRUE, the returned TREE_LIST contains |
1461 | - the non-hidden user-defined template conversion functions too. */ |
1462 | + field name. */ |
1463 | |
1464 | tree |
1465 | -lookup_conversions (tree type, |
1466 | - bool lookup_template_convs_p) |
1467 | +lookup_conversions (tree type) |
1468 | { |
1469 | tree convs, tpl_convs; |
1470 | tree list = NULL_TREE; |
1471 | @@ -2453,9 +2450,6 @@ |
1472 | } |
1473 | } |
1474 | |
1475 | - if (lookup_template_convs_p == false) |
1476 | - tpl_convs = NULL_TREE; |
1477 | - |
1478 | for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs)) |
1479 | { |
1480 | tree probe, next; |
1481 | |
1482 | === modified file 'gcc/cp/typeck.c' |
1483 | --- gcc/cp/typeck.c 2010-10-04 00:50:43 +0000 |
1484 | +++ gcc/cp/typeck.c 2011-04-28 16:44:05 +0000 |
1485 | @@ -4336,7 +4336,11 @@ |
1486 | gcc_unreachable(); |
1487 | } |
1488 | } |
1489 | - return build2 (COMPLEX_EXPR, result_type, real, imag); |
1490 | + real = fold_if_not_in_template (real); |
1491 | + imag = fold_if_not_in_template (imag); |
1492 | + result = build2 (COMPLEX_EXPR, result_type, real, imag); |
1493 | + result = fold_if_not_in_template (result); |
1494 | + return result; |
1495 | } |
1496 | |
1497 | /* For certain operations (which identify themselves by shorten != 0) |
1498 | |
1499 | === modified file 'gcc/doc/sourcebuild.texi' |
1500 | --- gcc/doc/sourcebuild.texi 2011-01-06 11:02:44 +0000 |
1501 | +++ gcc/doc/sourcebuild.texi 2011-04-28 16:44:05 +0000 |
1502 | @@ -1,4 +1,4 @@ |
1503 | -@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 |
1504 | +@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 |
1505 | @c Free Software Foundation, Inc. |
1506 | @c This is part of the GCC manual. |
1507 | @c For copying conditions, see the file gcc.texi. |
1508 | @@ -1941,6 +1941,9 @@ |
1509 | @item dg-require-alias "" |
1510 | Skip the test if the target does not support the @samp{alias} attribute. |
1511 | |
1512 | +@item dg-require-ascii-locale "" |
1513 | +Skip the test if the host does not support an ASCII locale. |
1514 | + |
1515 | @item dg-require-compat-dfp "" |
1516 | Skip this test unless both compilers in a @file{compat} testsuite |
1517 | support decimal floating point. |
1518 | |
1519 | === modified file 'gcc/dse.c' |
1520 | --- gcc/dse.c 2010-03-16 10:50:42 +0000 |
1521 | +++ gcc/dse.c 2011-04-28 16:44:05 +0000 |
1522 | @@ -1592,8 +1592,7 @@ |
1523 | |
1524 | /* An insn can be deleted if every position of every one of |
1525 | its s_infos is zero. */ |
1526 | - if (any_positions_needed_p (s_info) |
1527 | - || ptr->cannot_delete) |
1528 | + if (any_positions_needed_p (s_info)) |
1529 | del = false; |
1530 | |
1531 | if (del) |
1532 | @@ -1605,7 +1604,8 @@ |
1533 | else |
1534 | active_local_stores = ptr->next_local_store; |
1535 | |
1536 | - delete_dead_store_insn (insn_to_delete); |
1537 | + if (!insn_to_delete->cannot_delete) |
1538 | + delete_dead_store_insn (insn_to_delete); |
1539 | } |
1540 | else |
1541 | last = ptr; |
1542 | |
1543 | === modified file 'gcc/dwarf2out.c' |
1544 | --- gcc/dwarf2out.c 2011-03-28 09:43:50 +0000 |
1545 | +++ gcc/dwarf2out.c 2011-04-28 16:44:05 +0000 |
1546 | @@ -6188,7 +6188,7 @@ |
1547 | static void gen_type_die (tree, dw_die_ref); |
1548 | static void gen_block_die (tree, dw_die_ref, int); |
1549 | static void decls_for_scope (tree, dw_die_ref, int); |
1550 | -static int is_redundant_typedef (const_tree); |
1551 | +static inline int is_redundant_typedef (const_tree); |
1552 | static inline dw_die_ref get_context_die (tree); |
1553 | static void gen_namespace_die (tree, dw_die_ref); |
1554 | static void gen_decl_die (tree, tree, dw_die_ref); |
1555 | @@ -12824,7 +12824,7 @@ |
1556 | int base_reg |
1557 | = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM) |
1558 | ? HARD_FRAME_POINTER_REGNUM |
1559 | - : STACK_POINTER_REGNUM); |
1560 | + : REGNO (elim)); |
1561 | return new_reg_loc_descr (base_reg, offset); |
1562 | } |
1563 | |
1564 | |
1565 | === modified file 'gcc/fold-const.c' |
1566 | --- gcc/fold-const.c 2010-11-26 12:03:32 +0000 |
1567 | +++ gcc/fold-const.c 2011-04-28 16:44:05 +0000 |
1568 | @@ -16165,12 +16165,17 @@ |
1569 | } |
1570 | /* *(foo *)&fooarray => fooarray[0] */ |
1571 | else if (TREE_CODE (optype) == ARRAY_TYPE |
1572 | - && type == TREE_TYPE (optype)) |
1573 | + && type == TREE_TYPE (optype) |
1574 | + && (!in_gimple_form |
1575 | + || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)) |
1576 | { |
1577 | tree type_domain = TYPE_DOMAIN (optype); |
1578 | tree min_val = size_zero_node; |
1579 | if (type_domain && TYPE_MIN_VALUE (type_domain)) |
1580 | min_val = TYPE_MIN_VALUE (type_domain); |
1581 | + if (in_gimple_form |
1582 | + && TREE_CODE (min_val) != INTEGER_CST) |
1583 | + return NULL_TREE; |
1584 | op0 = build4 (ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE); |
1585 | SET_EXPR_LOCATION (op0, loc); |
1586 | return op0; |
1587 | @@ -16241,7 +16246,9 @@ |
1588 | |
1589 | /* *(foo *)fooarrptr => (*fooarrptr)[0] */ |
1590 | if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE |
1591 | - && type == TREE_TYPE (TREE_TYPE (subtype))) |
1592 | + && type == TREE_TYPE (TREE_TYPE (subtype)) |
1593 | + && (!in_gimple_form |
1594 | + || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)) |
1595 | { |
1596 | tree type_domain; |
1597 | tree min_val = size_zero_node; |
1598 | @@ -16249,6 +16256,9 @@ |
1599 | type_domain = TYPE_DOMAIN (TREE_TYPE (sub)); |
1600 | if (type_domain && TYPE_MIN_VALUE (type_domain)) |
1601 | min_val = TYPE_MIN_VALUE (type_domain); |
1602 | + if (in_gimple_form |
1603 | + && TREE_CODE (min_val) != INTEGER_CST) |
1604 | + return NULL_TREE; |
1605 | op0 = build4 (ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE); |
1606 | SET_EXPR_LOCATION (op0, loc); |
1607 | return op0; |
1608 | |
1609 | === modified file 'gcc/fortran/ChangeLog' |
1610 | --- gcc/fortran/ChangeLog 2011-04-05 10:59:38 +0000 |
1611 | +++ gcc/fortran/ChangeLog 2011-04-28 16:44:05 +0000 |
1612 | @@ -1,3 +1,7 @@ |
1613 | +2011-04-28 Release Manager |
1614 | + |
1615 | + * GCC 4.5.3 released. |
1616 | + |
1617 | 2011-04-05 Duncan Sands <baldrick@free.fr> |
1618 | |
1619 | * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter |
1620 | |
1621 | === modified file 'gcc/gcov-io.c' |
1622 | --- gcc/gcov-io.c 2009-11-25 10:55:54 +0000 |
1623 | +++ gcc/gcov-io.c 2011-04-28 16:44:05 +0000 |
1624 | @@ -16,8 +16,13 @@ |
1625 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
1626 | for more details. |
1627 | |
1628 | -You should have received a copy of the GNU General Public License |
1629 | -along with GCC; see the file COPYING3. If not see |
1630 | +Under Section 7 of GPL version 3, you are granted additional |
1631 | +permissions described in the GCC Runtime Library Exception, version |
1632 | +3.1, as published by the Free Software Foundation. |
1633 | + |
1634 | +You should have received a copy of the GNU General Public License and |
1635 | +a copy of the GCC Runtime Library Exception along with this program; |
1636 | +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
1637 | <http://www.gnu.org/licenses/>. */ |
1638 | |
1639 | /* Routines declared in gcov-io.h. This file should be #included by |
1640 | |
1641 | === modified file 'gcc/gimplify.c' |
1642 | --- gcc/gimplify.c 2010-11-11 20:36:49 +0000 |
1643 | +++ gcc/gimplify.c 2011-04-28 16:44:05 +0000 |
1644 | @@ -5438,7 +5438,8 @@ |
1645 | For local variables TYPE_SIZE_UNIT might not be gimplified yet, |
1646 | in this case omp_notice_variable will be called later |
1647 | on when it is gimplified. */ |
1648 | - else if (! (flags & GOVD_LOCAL)) |
1649 | + else if (! (flags & GOVD_LOCAL) |
1650 | + && DECL_P (TYPE_SIZE_UNIT (TREE_TYPE (decl)))) |
1651 | omp_notice_variable (ctx, TYPE_SIZE_UNIT (TREE_TYPE (decl)), true); |
1652 | } |
1653 | else if (lang_hooks.decls.omp_privatize_by_reference (decl)) |
1654 | |
1655 | === modified file 'gcc/haifa-sched.c' |
1656 | --- gcc/haifa-sched.c 2011-02-08 10:51:58 +0000 |
1657 | +++ gcc/haifa-sched.c 2011-04-28 16:44:05 +0000 |
1658 | @@ -4442,6 +4442,8 @@ |
1659 | edge_flags = 0; |
1660 | |
1661 | make_single_succ_edge (rec, second_bb, edge_flags); |
1662 | + if (dom_info_available_p (CDI_DOMINATORS)) |
1663 | + set_immediate_dominator (CDI_DOMINATORS, rec, first_bb); |
1664 | } |
1665 | |
1666 | /* This function creates recovery code for INSN. If MUTATE_P is nonzero, |
1667 | |
1668 | === modified file 'gcc/ipa-inline.c' |
1669 | --- gcc/ipa-inline.c 2010-11-24 08:43:48 +0000 |
1670 | +++ gcc/ipa-inline.c 2011-04-28 16:44:05 +0000 |
1671 | @@ -2092,6 +2092,7 @@ |
1672 | { |
1673 | unsigned int todo = 0; |
1674 | struct cgraph_edge *e; |
1675 | + bool inline_p = false; |
1676 | |
1677 | /* FIXME: Currently the passmanager is adding inline transform more than once to some |
1678 | clones. This needs revisiting after WPA cleanups. */ |
1679 | @@ -2104,10 +2105,13 @@ |
1680 | save_inline_function_body (node); |
1681 | |
1682 | for (e = node->callees; e; e = e->next_callee) |
1683 | - if (!e->inline_failed || warn_inline) |
1684 | - break; |
1685 | + { |
1686 | + cgraph_redirect_edge_call_stmt_to_callee (e); |
1687 | + if (!e->inline_failed || warn_inline) |
1688 | + inline_p = true; |
1689 | + } |
1690 | |
1691 | - if (e) |
1692 | + if (inline_p) |
1693 | { |
1694 | timevar_push (TV_INTEGRATION); |
1695 | todo = optimize_inline_calls (current_function_decl); |
1696 | |
1697 | === modified file 'gcc/java/ChangeLog' |
1698 | --- gcc/java/ChangeLog 2010-12-16 12:32:23 +0000 |
1699 | +++ gcc/java/ChangeLog 2011-04-28 16:44:05 +0000 |
1700 | @@ -1,3 +1,7 @@ |
1701 | +2011-04-28 Release Manager |
1702 | + |
1703 | + * GCC 4.5.3 released. |
1704 | + |
1705 | 2010-12-16 Release Manager |
1706 | |
1707 | * GCC 4.5.2 released. |
1708 | |
1709 | === modified file 'gcc/lto/ChangeLog' |
1710 | --- gcc/lto/ChangeLog 2010-12-16 12:32:50 +0000 |
1711 | +++ gcc/lto/ChangeLog 2011-04-28 16:44:05 +0000 |
1712 | @@ -1,3 +1,7 @@ |
1713 | +2011-04-28 Release Manager |
1714 | + |
1715 | + * GCC 4.5.3 released. |
1716 | + |
1717 | 2010-12-16 Release Manager |
1718 | |
1719 | * GCC 4.5.2 released. |
1720 | |
1721 | === modified file 'gcc/objc/ChangeLog' |
1722 | --- gcc/objc/ChangeLog 2010-12-16 12:33:00 +0000 |
1723 | +++ gcc/objc/ChangeLog 2011-04-28 16:44:05 +0000 |
1724 | @@ -1,3 +1,7 @@ |
1725 | +2011-04-28 Release Manager |
1726 | + |
1727 | + * GCC 4.5.3 released. |
1728 | + |
1729 | 2010-12-16 Release Manager |
1730 | |
1731 | * GCC 4.5.2 released. |
1732 | |
1733 | === modified file 'gcc/objcp/ChangeLog' |
1734 | --- gcc/objcp/ChangeLog 2010-12-16 12:33:13 +0000 |
1735 | +++ gcc/objcp/ChangeLog 2011-04-28 16:44:05 +0000 |
1736 | @@ -1,3 +1,7 @@ |
1737 | +2011-04-28 Release Manager |
1738 | + |
1739 | + * GCC 4.5.3 released. |
1740 | + |
1741 | 2010-12-16 Release Manager |
1742 | |
1743 | * GCC 4.5.2 released. |
1744 | |
1745 | === modified file 'gcc/omp-low.c' |
1746 | --- gcc/omp-low.c 2010-04-21 13:01:30 +0000 |
1747 | +++ gcc/omp-low.c 2011-04-28 16:44:05 +0000 |
1748 | @@ -1930,7 +1930,18 @@ |
1749 | { |
1750 | *walk_subtrees = 1; |
1751 | if (ctx) |
1752 | - TREE_TYPE (t) = remap_type (TREE_TYPE (t), &ctx->cb); |
1753 | + { |
1754 | + tree tem = remap_type (TREE_TYPE (t), &ctx->cb); |
1755 | + if (tem != TREE_TYPE (t)) |
1756 | + { |
1757 | + if (TREE_CODE (t) == INTEGER_CST) |
1758 | + *tp = build_int_cst_wide (tem, |
1759 | + TREE_INT_CST_LOW (t), |
1760 | + TREE_INT_CST_HIGH (t)); |
1761 | + else |
1762 | + TREE_TYPE (t) = tem; |
1763 | + } |
1764 | + } |
1765 | } |
1766 | break; |
1767 | } |
1768 | |
1769 | === modified file 'gcc/po/ChangeLog' |
1770 | --- gcc/po/ChangeLog 2010-12-16 12:32:28 +0000 |
1771 | +++ gcc/po/ChangeLog 2011-04-28 16:44:05 +0000 |
1772 | @@ -1,3 +1,7 @@ |
1773 | +2011-04-28 Release Manager |
1774 | + |
1775 | + * GCC 4.5.3 released. |
1776 | + |
1777 | 2010-12-16 Release Manager |
1778 | |
1779 | * GCC 4.5.2 released. |
1780 | |
1781 | === modified file 'gcc/reload1.c' |
1782 | --- gcc/reload1.c 2011-03-02 13:30:06 +0000 |
1783 | +++ gcc/reload1.c 2011-04-28 16:44:05 +0000 |
1784 | @@ -461,7 +461,7 @@ |
1785 | static void delete_output_reload (rtx, int, int, rtx); |
1786 | static void delete_address_reloads (rtx, rtx); |
1787 | static void delete_address_reloads_1 (rtx, rtx, rtx); |
1788 | -static rtx inc_for_reload (rtx, rtx, rtx, int); |
1789 | +static void inc_for_reload (rtx, rtx, rtx, int); |
1790 | #ifdef AUTO_INC_DEC |
1791 | static void add_auto_inc_notes (rtx, rtx); |
1792 | #endif |
1793 | @@ -7150,22 +7150,12 @@ |
1794 | |
1795 | old = XEXP (rl->in_reg, 0); |
1796 | |
1797 | - if (optimize && REG_P (oldequiv) |
1798 | - && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER |
1799 | - && spill_reg_store[REGNO (oldequiv)] |
1800 | - && REG_P (old) |
1801 | - && (dead_or_set_p (insn, |
1802 | - spill_reg_stored_to[REGNO (oldequiv)]) |
1803 | - || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)], |
1804 | - old))) |
1805 | - delete_output_reload (insn, j, REGNO (oldequiv), reloadreg); |
1806 | - |
1807 | /* Prevent normal processing of this reload. */ |
1808 | special = 1; |
1809 | - /* Output a special code sequence for this case. */ |
1810 | - new_spill_reg_store[REGNO (reloadreg)] |
1811 | - = inc_for_reload (reloadreg, oldequiv, rl->out, |
1812 | - rl->inc); |
1813 | + /* Output a special code sequence for this case, and forget about |
1814 | + spill reg information. */ |
1815 | + new_spill_reg_store[REGNO (reloadreg)] = NULL; |
1816 | + inc_for_reload (reloadreg, oldequiv, rl->out, rl->inc); |
1817 | } |
1818 | |
1819 | /* If we are reloading a pseudo-register that was set by the previous |
1820 | @@ -8975,11 +8965,9 @@ |
1821 | IN is either identical to VALUE, or some cheaper place to reload from. |
1822 | |
1823 | INC_AMOUNT is the number to increment or decrement by (always positive). |
1824 | - This cannot be deduced from VALUE. |
1825 | - |
1826 | - Return the instruction that stores into RELOADREG. */ |
1827 | - |
1828 | -static rtx |
1829 | + This cannot be deduced from VALUE. */ |
1830 | + |
1831 | +static void |
1832 | inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount) |
1833 | { |
1834 | /* REG or MEM to be copied and incremented. */ |
1835 | @@ -8991,7 +8979,6 @@ |
1836 | rtx inc; |
1837 | rtx add_insn; |
1838 | int code; |
1839 | - rtx store; |
1840 | rtx real_in = in == value ? incloc : in; |
1841 | |
1842 | /* No hard register is equivalent to this register after |
1843 | @@ -9039,9 +9026,8 @@ |
1844 | be used as an address. */ |
1845 | |
1846 | if (! post) |
1847 | - add_insn = emit_insn (gen_move_insn (reloadreg, incloc)); |
1848 | - |
1849 | - return add_insn; |
1850 | + emit_insn (gen_move_insn (reloadreg, incloc)); |
1851 | + return; |
1852 | } |
1853 | } |
1854 | delete_insns_since (last); |
1855 | @@ -9057,7 +9043,7 @@ |
1856 | if (in != reloadreg) |
1857 | emit_insn (gen_move_insn (reloadreg, real_in)); |
1858 | emit_insn (gen_add2_insn (reloadreg, inc)); |
1859 | - store = emit_insn (gen_move_insn (incloc, reloadreg)); |
1860 | + emit_insn (gen_move_insn (incloc, reloadreg)); |
1861 | } |
1862 | else |
1863 | { |
1864 | @@ -9071,14 +9057,12 @@ |
1865 | the original value. */ |
1866 | |
1867 | emit_insn (gen_add2_insn (reloadreg, inc)); |
1868 | - store = emit_insn (gen_move_insn (incloc, reloadreg)); |
1869 | + emit_insn (gen_move_insn (incloc, reloadreg)); |
1870 | if (CONST_INT_P (inc)) |
1871 | emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc)))); |
1872 | else |
1873 | emit_insn (gen_sub2_insn (reloadreg, inc)); |
1874 | } |
1875 | - |
1876 | - return store; |
1877 | } |
1878 | |
1879 | |
1880 | #ifdef AUTO_INC_DEC |
1881 | |
1882 | === modified file 'gcc/rtl.h' |
1883 | --- gcc/rtl.h 2011-02-08 10:51:58 +0000 |
1884 | +++ gcc/rtl.h 2011-04-28 16:44:05 +0000 |
1885 | @@ -2418,6 +2418,7 @@ |
1886 | extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int); |
1887 | extern rtx get_reg_known_value (unsigned int); |
1888 | extern bool get_reg_known_equiv_p (unsigned int); |
1889 | +extern rtx get_reg_base_value (unsigned int); |
1890 | |
1891 | #ifdef STACK_REGS |
1892 | extern int stack_regs_mentioned (const_rtx insn); |
1893 | |
1894 | === modified file 'gcc/sched-vis.c' |
1895 | --- gcc/sched-vis.c 2011-02-08 10:51:58 +0000 |
1896 | +++ gcc/sched-vis.c 2011-04-28 16:44:05 +0000 |
1897 | @@ -603,7 +603,7 @@ |
1898 | sprintf (buf, "asm {%s}", XSTR (x, 0)); |
1899 | break; |
1900 | case ADDR_VEC: |
1901 | - break; |
1902 | + /* Fall through. */ |
1903 | case ADDR_DIFF_VEC: |
1904 | print_value (buf, XEXP (x, 0), verbose); |
1905 | break; |
1906 | |
1907 | === modified file 'gcc/sel-sched-ir.c' |
1908 | --- gcc/sel-sched-ir.c 2011-02-08 10:51:58 +0000 |
1909 | +++ gcc/sel-sched-ir.c 2011-04-28 16:44:05 +0000 |
1910 | @@ -152,7 +152,9 @@ |
1911 | |
1912 | static void move_bb_info (basic_block, basic_block); |
1913 | static void remove_empty_bb (basic_block, bool); |
1914 | +static void sel_merge_blocks (basic_block, basic_block); |
1915 | static void sel_remove_loop_preheader (void); |
1916 | +static bool bb_has_removable_jump_to_p (basic_block, basic_block); |
1917 | |
1918 | static bool insn_is_the_only_one_in_bb_p (insn_t); |
1919 | static void create_initial_data_sets (basic_block); |
1920 | @@ -939,6 +941,7 @@ |
1921 | void |
1922 | return_regset_to_pool (regset rs) |
1923 | { |
1924 | + gcc_assert (rs); |
1925 | regset_pool.diff--; |
1926 | |
1927 | if (regset_pool.n == regset_pool.s) |
1928 | @@ -1172,6 +1175,9 @@ |
1929 | VINSN_COUNT (vi) = 0; |
1930 | vi->cost = -1; |
1931 | |
1932 | + if (INSN_NOP_P (insn)) |
1933 | + return; |
1934 | + |
1935 | if (DF_INSN_UID_SAFE_GET (INSN_UID (insn)) != NULL) |
1936 | init_id_from_df (VINSN_ID (vi), insn, force_unique_p); |
1937 | else |
1938 | @@ -1253,9 +1259,12 @@ |
1939 | { |
1940 | gcc_assert (VINSN_COUNT (vi) == 0); |
1941 | |
1942 | - return_regset_to_pool (VINSN_REG_SETS (vi)); |
1943 | - return_regset_to_pool (VINSN_REG_USES (vi)); |
1944 | - return_regset_to_pool (VINSN_REG_CLOBBERS (vi)); |
1945 | + if (!INSN_NOP_P (VINSN_INSN_RTX (vi))) |
1946 | + { |
1947 | + return_regset_to_pool (VINSN_REG_SETS (vi)); |
1948 | + return_regset_to_pool (VINSN_REG_USES (vi)); |
1949 | + return_regset_to_pool (VINSN_REG_CLOBBERS (vi)); |
1950 | + } |
1951 | |
1952 | free (vi); |
1953 | } |
1954 | @@ -1555,6 +1564,20 @@ |
1955 | *pvect = NULL; |
1956 | } |
1957 | |
1958 | +/* Merge vector FROM to PVECT. */ |
1959 | +static void |
1960 | +merge_history_vect (VEC (expr_history_def, heap) **pvect, |
1961 | + VEC (expr_history_def, heap) *from) |
1962 | +{ |
1963 | + expr_history_def *phist; |
1964 | + int i; |
1965 | + |
1966 | + /* We keep this vector sorted. */ |
1967 | + for (i = 0; VEC_iterate (expr_history_def, from, i, phist); i++) |
1968 | + insert_in_history_vect (pvect, phist->uid, phist->type, |
1969 | + phist->old_expr_vinsn, phist->new_expr_vinsn, |
1970 | + phist->spec_ds); |
1971 | +} |
1972 | |
1973 | /* Compare two vinsns as rhses if possible and as vinsns otherwise. */ |
1974 | bool |
1975 | @@ -1592,7 +1615,7 @@ |
1976 | init_expr (expr_t expr, vinsn_t vi, int spec, int use, int priority, |
1977 | int sched_times, int orig_bb_index, ds_t spec_done_ds, |
1978 | ds_t spec_to_check_ds, int orig_sched_cycle, |
1979 | - VEC(expr_history_def, heap) *history, bool target_available, |
1980 | + VEC(expr_history_def, heap) *history, signed char target_available, |
1981 | bool was_substituted, bool was_renamed, bool needs_spec_check_p, |
1982 | bool cant_move) |
1983 | { |
1984 | @@ -1787,9 +1810,6 @@ |
1985 | void |
1986 | merge_expr_data (expr_t to, expr_t from, insn_t split_point) |
1987 | { |
1988 | - int i; |
1989 | - expr_history_def *phist; |
1990 | - |
1991 | /* For now, we just set the spec of resulting expr to be minimum of the specs |
1992 | of merged exprs. */ |
1993 | if (EXPR_SPEC (to) > EXPR_SPEC (from)) |
1994 | @@ -1813,20 +1833,12 @@ |
1995 | EXPR_ORIG_SCHED_CYCLE (to) = MIN (EXPR_ORIG_SCHED_CYCLE (to), |
1996 | EXPR_ORIG_SCHED_CYCLE (from)); |
1997 | |
1998 | - /* We keep this vector sorted. */ |
1999 | - for (i = 0; |
2000 | - VEC_iterate (expr_history_def, EXPR_HISTORY_OF_CHANGES (from), |
2001 | - i, phist); |
2002 | - i++) |
2003 | - insert_in_history_vect (&EXPR_HISTORY_OF_CHANGES (to), |
2004 | - phist->uid, phist->type, |
2005 | - phist->old_expr_vinsn, phist->new_expr_vinsn, |
2006 | - phist->spec_ds); |
2007 | - |
2008 | EXPR_WAS_SUBSTITUTED (to) |= EXPR_WAS_SUBSTITUTED (from); |
2009 | EXPR_WAS_RENAMED (to) |= EXPR_WAS_RENAMED (from); |
2010 | EXPR_CANT_MOVE (to) |= EXPR_CANT_MOVE (from); |
2011 | |
2012 | + merge_history_vect (&EXPR_HISTORY_OF_CHANGES (to), |
2013 | + EXPR_HISTORY_OF_CHANGES (from)); |
2014 | update_target_availability (to, from, split_point); |
2015 | update_speculative_bits (to, from, split_point); |
2016 | } |
2017 | @@ -2319,16 +2331,24 @@ |
2018 | } |
2019 | |
2020 | /* Leave in AVP only those expressions, which are present in AV, |
2021 | - and return it. */ |
2022 | + and return it, merging history expressions. */ |
2023 | void |
2024 | -av_set_intersect (av_set_t *avp, av_set_t av) |
2025 | +av_set_code_motion_filter (av_set_t *avp, av_set_t av) |
2026 | { |
2027 | av_set_iterator i; |
2028 | - expr_t expr; |
2029 | + expr_t expr, expr2; |
2030 | |
2031 | FOR_EACH_EXPR_1 (expr, i, avp) |
2032 | - if (av_set_lookup (av, EXPR_VINSN (expr)) == NULL) |
2033 | + if ((expr2 = av_set_lookup (av, EXPR_VINSN (expr))) == NULL) |
2034 | av_set_iter_remove (&i); |
2035 | + else |
2036 | + /* When updating av sets in bookkeeping blocks, we can add more insns |
2037 | + there which will be transformed but the upper av sets will not |
2038 | + reflect those transformations. We then fail to undo those |
2039 | + when searching for such insns. So merge the history saved |
2040 | + in the av set of the block we are processing. */ |
2041 | + merge_history_vect (&EXPR_HISTORY_OF_CHANGES (expr), |
2042 | + EXPR_HISTORY_OF_CHANGES (expr2)); |
2043 | } |
2044 | |
2045 | |
2046 | |
2047 | @@ -3539,9 +3559,10 @@ |
2048 | |
2049 | /* Tidy the possibly empty block BB. */ |
2050 | static bool |
2051 | -maybe_tidy_empty_bb (basic_block bb, bool recompute_toporder_p) |
2052 | +maybe_tidy_empty_bb (basic_block bb) |
2053 | { |
2054 | basic_block succ_bb, pred_bb; |
2055 | + VEC (basic_block, heap) *dom_bbs; |
2056 | edge e; |
2057 | edge_iterator ei; |
2058 | bool rescan_p; |
2059 | @@ -3577,6 +3598,7 @@ |
2060 | succ_bb = single_succ (bb); |
2061 | rescan_p = true; |
2062 | pred_bb = NULL; |
2063 | + dom_bbs = NULL; |
2064 | |
2065 | /* Redirect all non-fallthru edges to the next bb. */ |
2066 | while (rescan_p) |
2067 | @@ -3589,20 +3611,44 @@ |
2068 | |
2069 | if (!(e->flags & EDGE_FALLTHRU)) |
2070 | { |
2071 | - recompute_toporder_p |= sel_redirect_edge_and_branch (e, succ_bb); |
2072 | + /* We can not invalidate computed topological order by moving |
2073 | + the edge destination block (E->SUCC) along a fallthru edge. |
2074 | + |
2075 | + We will update dominators here only when we'll get |
2076 | + an unreachable block when redirecting, otherwise |
2077 | + sel_redirect_edge_and_branch will take care of it. */ |
2078 | + if (e->dest != bb |
2079 | + && single_pred_p (e->dest)) |
2080 | + VEC_safe_push (basic_block, heap, dom_bbs, e->dest); |
2081 | + sel_redirect_edge_and_branch (e, succ_bb); |
2082 | rescan_p = true; |
2083 | break; |
2084 | } |
2085 | + /* If the edge is fallthru, but PRED_BB ends in a conditional jump |
2086 | + to BB (so there is no non-fallthru edge from PRED_BB to BB), we |
2087 | + still have to adjust it. */ |
2088 | + else if (single_succ_p (pred_bb) && any_condjump_p (BB_END (pred_bb))) |
2089 | + { |
2090 | + /* If possible, try to remove the unneeded conditional jump. */ |
2091 | + if (INSN_SCHED_TIMES (BB_END (pred_bb)) == 0 |
2092 | + && !IN_CURRENT_FENCE_P (BB_END (pred_bb))) |
2093 | + { |
2094 | + if (!sel_remove_insn (BB_END (pred_bb), false, false)) |
2095 | + tidy_fallthru_edge (e); |
2096 | + } |
2097 | + else |
2098 | + sel_redirect_edge_and_branch (e, succ_bb); |
2099 | + rescan_p = true; |
2100 | + break; |
2101 | + } |
2102 | } |
2103 | } |
2104 | |
2105 | - /* If it is possible - merge BB with its predecessor. */ |
2106 | if (can_merge_blocks_p (bb->prev_bb, bb)) |
2107 | sel_merge_blocks (bb->prev_bb, bb); |
2108 | else |
2109 | - /* Otherwise this is a block without fallthru predecessor. |
2110 | - Just delete it. */ |
2111 | { |
2112 | + /* This is a block without fallthru predecessor. Just delete it. */ |
2113 | gcc_assert (pred_bb != NULL); |
2114 | |
2115 | if (in_current_region_p (pred_bb)) |
2116 | @@ -3610,12 +3656,12 @@ |
2117 | remove_empty_bb (bb, true); |
2118 | } |
2119 | |
2120 | - if (recompute_toporder_p) |
2121 | - sel_recompute_toporder (); |
2122 | - |
2123 | -#ifdef ENABLE_CHECKING |
2124 | - verify_backedges (); |
2125 | -#endif |
2126 | + if (!VEC_empty (basic_block, dom_bbs)) |
2127 | + { |
2128 | + VEC_safe_push (basic_block, heap, dom_bbs, succ_bb); |
2129 | + iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false); |
2130 | + VEC_free (basic_block, heap, dom_bbs); |
2131 | + } |
2132 | |
2133 | return true; |
2134 | } |
2135 | @@ -3630,12 +3676,12 @@ |
2136 | insn_t first, last; |
2137 | |
2138 | /* First check whether XBB is empty. */ |
2139 | - changed = maybe_tidy_empty_bb (xbb, false); |
2140 | + changed = maybe_tidy_empty_bb (xbb); |
2141 | if (changed || !full_tidying) |
2142 | return changed; |
2143 | |
2144 | /* Check if there is a unnecessary jump after insn left. */ |
2145 | - if (jump_leads_only_to_bb_p (BB_END (xbb), xbb->next_bb) |
2146 | + if (bb_has_removable_jump_to_p (xbb, xbb->next_bb) |
2147 | && INSN_SCHED_TIMES (BB_END (xbb)) == 0 |
2148 | && !IN_CURRENT_FENCE_P (BB_END (xbb))) |
2149 | { |
2150 | @@ -3676,7 +3722,7 @@ |
2151 | /* And unconditional jump in previous basic block leads to |
2152 | next basic block of XBB and this jump can be safely removed. */ |
2153 | && in_current_region_p (xbb->prev_bb) |
2154 | - && jump_leads_only_to_bb_p (BB_END (xbb->prev_bb), xbb->next_bb) |
2155 | + && bb_has_removable_jump_to_p (xbb->prev_bb, xbb->next_bb) |
2156 | && INSN_SCHED_TIMES (BB_END (xbb->prev_bb)) == 0 |
2157 | /* Also this jump is not at the scheduling boundary. */ |
2158 | && !IN_CURRENT_FENCE_P (BB_END (xbb->prev_bb))) |
2159 | @@ -3694,11 +3740,16 @@ |
2160 | that contained that jump, becomes empty too. In such case |
2161 | remove it too. */ |
2162 | if (sel_bb_empty_p (xbb->prev_bb)) |
2163 | - changed = maybe_tidy_empty_bb (xbb->prev_bb, recompute_toporder_p); |
2164 | - else if (recompute_toporder_p) |
2165 | + changed = maybe_tidy_empty_bb (xbb->prev_bb); |
2166 | + if (recompute_toporder_p) |
2167 | sel_recompute_toporder (); |
2168 | } |
2169 | |
2170 | +#ifdef ENABLE_CHECKING |
2171 | + verify_backedges (); |
2172 | + verify_dominators (CDI_DOMINATORS); |
2173 | +#endif |
2174 | + |
2175 | return changed; |
2176 | } |
2177 | |
2178 | @@ -3706,14 +3757,14 @@ |
2179 | void |
2180 | purge_empty_blocks (void) |
2181 | { |
2182 | - /* Do not attempt to delete preheader. */ |
2183 | - int i = sel_is_loop_preheader_p (BASIC_BLOCK (BB_TO_BLOCK (0))) ? 1 : 0; |
2184 | + int i; |
2185 | |
2186 | - while (i < current_nr_blocks) |
2187 | + /* Do not attempt to delete the first basic block in the region. */ |
2188 | + for (i = 1; i < current_nr_blocks; ) |
2189 | { |
2190 | basic_block b = BASIC_BLOCK (BB_TO_BLOCK (i)); |
2191 | |
2192 | - if (maybe_tidy_empty_bb (b, false)) |
2193 | + if (maybe_tidy_empty_bb (b)) |
2194 | continue; |
2195 | |
2196 | i++; |
2197 | @@ -4381,9 +4432,6 @@ |
2198 | if (!JUMP_P (jump)) |
2199 | return NULL; |
2200 | |
2201 | - if (any_uncondjump_p (jump)) |
2202 | - return single_succ (BLOCK_FOR_INSN (jump)); |
2203 | - |
2204 | if (!any_condjump_p (jump)) |
2205 | return NULL; |
2206 | |
2207 | @@ -4578,8 +4626,12 @@ |
2208 | basic_block pred_bb = e->src; |
2209 | insn_t bb_end = BB_END (pred_bb); |
2210 | |
2211 | - /* ??? This code is not supposed to walk out of a region. */ |
2212 | - gcc_assert (in_current_region_p (pred_bb)); |
2213 | + if (!in_current_region_p (pred_bb)) |
2214 | + { |
2215 | + gcc_assert (flag_sel_sched_pipelining_outer_loops |
2216 | + && current_loop_nest); |
2217 | + continue; |
2218 | + } |
2219 | |
2220 | if (sel_bb_empty_p (pred_bb)) |
2221 | cfg_preds_1 (pred_bb, preds, n, size); |
2222 | @@ -4592,7 +4644,9 @@ |
2223 | } |
2224 | } |
2225 | |
2226 | - gcc_assert (*n != 0); |
2227 | + gcc_assert (*n != 0 |
2228 | + || (flag_sel_sched_pipelining_outer_loops |
2229 | + && current_loop_nest)); |
2230 | } |
2231 | |
2232 | /* Find all predecessors of BB and record them in PREDS and their number |
2233 | @@ -5018,16 +5072,23 @@ |
2234 | static void |
2235 | sel_remove_bb (basic_block bb, bool remove_from_cfg_p) |
2236 | { |
2237 | + unsigned idx = bb->index; |
2238 | + |
2239 | gcc_assert (bb != NULL && BB_NOTE_LIST (bb) == NULL_RTX); |
2240 | |
2241 | remove_bb_from_region (bb); |
2242 | return_bb_to_pool (bb); |
2243 | - bitmap_clear_bit (blocks_to_reschedule, bb->index); |
2244 | + bitmap_clear_bit (blocks_to_reschedule, idx); |
2245 | |
2246 | if (remove_from_cfg_p) |
2247 | - delete_and_free_basic_block (bb); |
2248 | + { |
2249 | + basic_block succ = single_succ (bb); |
2250 | + delete_and_free_basic_block (bb); |
2251 | + set_immediate_dominator (CDI_DOMINATORS, succ, |
2252 | + recompute_dominator (CDI_DOMINATORS, succ)); |
2253 | + } |
2254 | |
2255 | - rgn_setup_region (CONTAINING_RGN (bb->index)); |
2256 | + rgn_setup_region (CONTAINING_RGN (idx)); |
2257 | } |
2258 | |
2259 | /* Concatenate info of EMPTY_BB to info of MERGE_BB. */ |
2260 | @@ -5042,50 +5103,6 @@ |
2261 | |
2262 | } |
2263 | |
2264 | -/* Remove an empty basic block EMPTY_BB. When MERGE_UP_P is true, we put |
2265 | - EMPTY_BB's note lists into its predecessor instead of putting them |
2266 | - into the successor. When REMOVE_FROM_CFG_P is true, also remove |
2267 | - the empty block. */ |
2268 | -void |
2269 | -sel_remove_empty_bb (basic_block empty_bb, bool merge_up_p, |
2270 | - bool remove_from_cfg_p) |
2271 | -{ |
2272 | - basic_block merge_bb; |
2273 | - |
2274 | - gcc_assert (sel_bb_empty_p (empty_bb)); |
2275 | - |
2276 | - if (merge_up_p) |
2277 | - { |
2278 | - merge_bb = empty_bb->prev_bb; |
2279 | - gcc_assert (EDGE_COUNT (empty_bb->preds) == 1 |
2280 | - && EDGE_PRED (empty_bb, 0)->src == merge_bb); |
2281 | - } |
2282 | - else |
2283 | - { |
2284 | - edge e; |
2285 | - edge_iterator ei; |
2286 | - |
2287 | - merge_bb = bb_next_bb (empty_bb); |
2288 | - |
2289 | - /* Redirect incoming edges (except fallthrough one) of EMPTY_BB to its |
2290 | - successor block. */ |
2291 | - for (ei = ei_start (empty_bb->preds); |
2292 | - (e = ei_safe_edge (ei)); ) |
2293 | - { |
2294 | - if (! (e->flags & EDGE_FALLTHRU)) |
2295 | - sel_redirect_edge_and_branch (e, merge_bb); |
2296 | - else |
2297 | - ei_next (&ei); |
2298 | - } |
2299 | - |
2300 | - gcc_assert (EDGE_COUNT (empty_bb->succs) == 1 |
2301 | - && EDGE_SUCC (empty_bb, 0)->dest == merge_bb); |
2302 | - } |
2303 | - |
2304 | - move_bb_info (merge_bb, empty_bb); |
2305 | - remove_empty_bb (empty_bb, remove_from_cfg_p); |
2306 | -} |
2307 | - |
2308 | /* Remove EMPTY_BB. If REMOVE_FROM_CFG_P is false, remove EMPTY_BB from |
2309 | region, but keep it in CFG. */ |
2310 | static void |
2311 | @@ -5385,12 +5402,16 @@ |
2312 | } |
2313 | |
2314 | /* Merge basic block B into basic block A. */ |
2315 | -void |
2316 | +static void |
2317 | sel_merge_blocks (basic_block a, basic_block b) |
2318 | { |
2319 | - sel_remove_empty_bb (b, true, false); |
2320 | + gcc_assert (sel_bb_empty_p (b) |
2321 | + && EDGE_COUNT (b->preds) == 1 |
2322 | + && EDGE_PRED (b, 0)->src == b->prev_bb); |
2323 | + |
2324 | + move_bb_info (b->prev_bb, b); |
2325 | + remove_empty_bb (b, false); |
2326 | merge_blocks (a, b); |
2327 | - |
2328 | change_loops_latches (b, a); |
2329 | } |
2330 | |
2331 | @@ -5400,12 +5421,15 @@ |
2332 | void |
2333 | sel_redirect_edge_and_branch_force (edge e, basic_block to) |
2334 | { |
2335 | - basic_block jump_bb, src; |
2336 | + basic_block jump_bb, src, orig_dest = e->dest; |
2337 | int prev_max_uid; |
2338 | rtx jump; |
2339 | |
2340 | - gcc_assert (!sel_bb_empty_p (e->src)); |
2341 | - |
2342 | + /* This function is now used only for bookkeeping code creation, where |
2343 | + we'll never get the single pred of orig_dest block and thus will not |
2344 | + hit unreachable blocks when updating dominator info. */ |
2345 | + gcc_assert (!sel_bb_empty_p (e->src) |
2346 | + && !single_pred_p (orig_dest)); |
2347 | src = e->src; |
2348 | prev_max_uid = get_max_uid (); |
2349 | jump_bb = redirect_edge_and_branch_force (e, to); |
2350 | @@ -5422,6 +5446,10 @@ |
2351 | jump = find_new_jump (src, jump_bb, prev_max_uid); |
2352 | if (jump) |
2353 | sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP); |
2354 | + set_immediate_dominator (CDI_DOMINATORS, to, |
2355 | + recompute_dominator (CDI_DOMINATORS, to)); |
2356 | + set_immediate_dominator (CDI_DOMINATORS, orig_dest, |
2357 | + recompute_dominator (CDI_DOMINATORS, orig_dest)); |
2358 | } |
2359 | |
2360 | /* A wrapper for redirect_edge_and_branch. Return TRUE if blocks connected by |
2361 | @@ -5430,11 +5458,12 @@ |
2362 | sel_redirect_edge_and_branch (edge e, basic_block to) |
2363 | { |
2364 | bool latch_edge_p; |
2365 | - basic_block src; |
2366 | + basic_block src, orig_dest = e->dest; |
2367 | int prev_max_uid; |
2368 | rtx jump; |
2369 | edge redirected; |
2370 | bool recompute_toporder_p = false; |
2371 | + bool maybe_unreachable = single_pred_p (orig_dest); |
2372 | |
2373 | latch_edge_p = (pipelining_p |
2374 | && current_loop_nest |
2375 | @@ -5465,6 +5494,15 @@ |
2376 | if (jump) |
2377 | sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP); |
2378 | |
2379 | + /* Only update dominator info when we don't have unreachable blocks. |
2380 | + Otherwise we'll update in maybe_tidy_empty_bb. */ |
2381 | + if (!maybe_unreachable) |
2382 | + { |
2383 | + set_immediate_dominator (CDI_DOMINATORS, to, |
2384 | + recompute_dominator (CDI_DOMINATORS, to)); |
2385 | + set_immediate_dominator (CDI_DOMINATORS, orig_dest, |
2386 | + recompute_dominator (CDI_DOMINATORS, orig_dest)); |
2387 | + } |
2388 | return recompute_toporder_p; |
2389 | } |
2390 | |
2391 | @@ -5603,7 +5641,7 @@ |
2392 | gcc_assert (nop_pattern == NULL_RTX |
2393 | && exit_insn == NULL_RTX); |
2394 | |
2395 | - nop_pattern = gen_nop (); |
2396 | + nop_pattern = constm1_rtx; |
2397 | |
2398 | start_sequence (); |
2399 | emit_insn (nop_pattern); |
2400 | @@ -6093,22 +6131,20 @@ |
2401 | return false; |
2402 | } |
2403 | |
2404 | -/* Checks whether JUMP leads to basic block DEST_BB and no other blocks. */ |
2405 | -bool |
2406 | -jump_leads_only_to_bb_p (insn_t jump, basic_block dest_bb) |
2407 | +/* Check whether JUMP_BB ends with a jump insn that leads only to DEST_BB and |
2408 | + can be removed, making the corresponding edge fallthrough (assuming that |
2409 | + all basic blocks between JUMP_BB and DEST_BB are empty). */ |
2410 | +static bool |
2411 | +bb_has_removable_jump_to_p (basic_block jump_bb, basic_block dest_bb) |
2412 | { |
2413 | - basic_block jump_bb = BLOCK_FOR_INSN (jump); |
2414 | - |
2415 | - /* It is not jump, jump with side-effects or jump can lead to several |
2416 | - basic blocks. */ |
2417 | - if (!onlyjump_p (jump) |
2418 | - || !any_uncondjump_p (jump)) |
2419 | + if (!onlyjump_p (BB_END (jump_bb)) |
2420 | + || tablejump_p (BB_END (jump_bb), NULL, NULL)) |
2421 | return false; |
2422 | |
2423 | /* Several outgoing edges, abnormal edge or destination of jump is |
2424 | not DEST_BB. */ |
2425 | if (EDGE_COUNT (jump_bb->succs) != 1 |
2426 | - || EDGE_SUCC (jump_bb, 0)->flags & EDGE_ABNORMAL |
2427 | + || EDGE_SUCC (jump_bb, 0)->flags & (EDGE_ABNORMAL | EDGE_CROSSING) |
2428 | || EDGE_SUCC (jump_bb, 0)->dest != dest_bb) |
2429 | return false; |
2430 | |
2431 | @@ -6188,12 +6224,16 @@ |
2432 | basic block if it becomes empty. */ |
2433 | if (next_bb->prev_bb == prev_bb |
2434 | && prev_bb != ENTRY_BLOCK_PTR |
2435 | - && jump_leads_only_to_bb_p (BB_END (prev_bb), next_bb)) |
2436 | + && bb_has_removable_jump_to_p (prev_bb, next_bb)) |
2437 | { |
2438 | redirect_edge_and_branch (EDGE_SUCC (prev_bb, 0), next_bb); |
2439 | if (BB_END (prev_bb) == bb_note (prev_bb)) |
2440 | free_data_sets (prev_bb); |
2441 | } |
2442 | + |
2443 | + set_immediate_dominator (CDI_DOMINATORS, next_bb, |
2444 | + recompute_dominator (CDI_DOMINATORS, |
2445 | + next_bb)); |
2446 | } |
2447 | } |
2448 | VEC_free (basic_block, heap, preheader_blocks); |
2449 | |
2450 | === modified file 'gcc/sel-sched-ir.h' |
2451 | --- gcc/sel-sched-ir.h 2010-06-02 16:31:39 +0000 |
2452 | +++ gcc/sel-sched-ir.h 2011-04-28 16:44:05 +0000 |
2453 | @@ -1565,7 +1565,7 @@ |
2454 | extern expr_t av_set_element (av_set_t, int); |
2455 | extern void av_set_substract_cond_branches (av_set_t *); |
2456 | extern void av_set_split_usefulness (av_set_t, int, int); |
2457 | -extern void av_set_intersect (av_set_t *, av_set_t); |
2458 | +extern void av_set_code_motion_filter (av_set_t *, av_set_t); |
2459 | |
2460 | extern void sel_save_haifa_priorities (void); |
2461 | |
2462 | @@ -1590,7 +1590,6 @@ |
2463 | extern bool bb_header_p (insn_t); |
2464 | extern void sel_init_invalid_data_sets (insn_t); |
2465 | extern bool insn_at_boundary_p (insn_t); |
2466 | -extern bool jump_leads_only_to_bb_p (insn_t, basic_block); |
2467 | |
2468 | /* Basic block and CFG functions. */ |
2469 | |
2470 | @@ -1618,11 +1617,9 @@ |
2471 | extern bool tidy_control_flow (basic_block, bool); |
2472 | extern void free_bb_note_pool (void); |
2473 | |
2474 | -extern void sel_remove_empty_bb (basic_block, bool, bool); |
2475 | extern void purge_empty_blocks (void); |
2476 | extern basic_block sel_split_edge (edge); |
2477 | extern basic_block sel_create_recovery_block (insn_t); |
2478 | -extern void sel_merge_blocks (basic_block, basic_block); |
2479 | extern bool sel_redirect_edge_and_branch (edge, basic_block); |
2480 | extern void sel_redirect_edge_and_branch_force (edge, basic_block); |
2481 | extern void sel_init_pipelining (void); |
2482 | |
2483 | === modified file 'gcc/sel-sched.c' |
2484 | --- gcc/sel-sched.c 2011-02-08 10:51:58 +0000 |
2485 | +++ gcc/sel-sched.c 2011-04-28 16:44:05 +0000 |
2486 | @@ -1,5 +1,6 @@ |
2487 | /* Instruction scheduling pass. Selective scheduler and pipeliner. |
2488 | - Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
2489 | + Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 |
2490 | + Free Software Foundation, Inc. |
2491 | |
2492 | This file is part of GCC. |
2493 | |
2494 | @@ -1138,6 +1139,9 @@ |
2495 | /* Can't use regs which aren't saved by |
2496 | the prologue. */ |
2497 | || !TEST_HARD_REG_BIT (sel_hrd.regs_ever_used, cur_reg + i) |
2498 | + /* Can't use regs with non-null REG_BASE_VALUE, because adjusting |
2499 | + it affects aliasing globally and invalidates all AV sets. */ |
2500 | + || get_reg_base_value (cur_reg + i) |
2501 | #ifdef LEAF_REGISTERS |
2502 | /* We can't use a non-leaf register if we're in a |
2503 | leaf function. */ |
2504 | @@ -2167,10 +2171,8 @@ |
2505 | || ! in_current_region_p (fallthru_bb)) |
2506 | return MOVEUP_EXPR_NULL; |
2507 | |
2508 | - /* And it should be mutually exclusive with through_insn, or |
2509 | - be an unconditional jump. */ |
2510 | - if (! any_uncondjump_p (insn) |
2511 | - && ! sched_insns_conditions_mutex_p (insn, through_insn) |
2512 | + /* And it should be mutually exclusive with through_insn. */ |
2513 | + if (! sched_insns_conditions_mutex_p (insn, through_insn) |
2514 | && ! DEBUG_INSN_P (through_insn)) |
2515 | return MOVEUP_EXPR_NULL; |
2516 | } |
2517 | @@ -3735,7 +3737,7 @@ |
2518 | { |
2519 | expr_t expr = VEC_index (expr_t, vec_av_set, n); |
2520 | insn_t insn = EXPR_INSN_RTX (expr); |
2521 | - char target_available; |
2522 | + signed char target_available; |
2523 | bool is_orig_reg_p = true; |
2524 | int need_cycles, new_prio; |
2525 | |
2526 | @@ -4403,7 +4405,8 @@ |
2527 | { |
2528 | can_issue_more = invoke_aftermath_hooks (fence, EXPR_INSN_RTX (best), |
2529 | can_issue_more); |
2530 | - if (can_issue_more == 0) |
2531 | + if (targetm.sched.variable_issue |
2532 | + && can_issue_more == 0) |
2533 | *pneed_stall = 1; |
2534 | } |
2535 | |
2536 | @@ -5514,7 +5517,7 @@ |
2537 | blist_t *bnds_tailp1, *bndsp; |
2538 | expr_t expr_vliw; |
2539 | int need_stall; |
2540 | - int was_stall = 0, scheduled_insns = 0, stall_iterations = 0; |
2541 | + int was_stall = 0, scheduled_insns = 0; |
2542 | int max_insns = pipelining_p ? issue_rate : 2 * issue_rate; |
2543 | int max_stall = pipelining_p ? 1 : 3; |
2544 | bool last_insn_was_debug = false; |
2545 | @@ -5533,16 +5536,15 @@ |
2546 | do |
2547 | { |
2548 | expr_vliw = find_best_expr (&av_vliw, bnds, fence, &need_stall); |
2549 | - if (!expr_vliw && need_stall) |
2550 | + if (! expr_vliw && need_stall) |
2551 | { |
2552 | /* All expressions required a stall. Do not recompute av sets |
2553 | as we'll get the same answer (modulo the insns between |
2554 | the fence and its boundary, which will not be available for |
2555 | - pipelining). */ |
2556 | - gcc_assert (! expr_vliw && stall_iterations < 2); |
2557 | + pipelining). |
2558 | + If we are going to stall for too long, break to recompute av |
2559 | + sets and bring more insns for pipelining. */ |
2560 | was_stall++; |
2561 | - /* If we are going to stall for too long, break to recompute av |
2562 | - sets and bring more insns for pipelining. */ |
2563 | if (need_stall <= 3) |
2564 | stall_for_cycles (fence, need_stall); |
2565 | else |
2566 | @@ -6475,7 +6477,7 @@ |
2567 | |
2568 | /* Filter the orig_ops set. */ |
2569 | if (AV_SET_VALID_P (insn)) |
2570 | - av_set_intersect (&orig_ops, AV_SET (insn)); |
2571 | + av_set_code_motion_filter (&orig_ops, AV_SET (insn)); |
2572 | |
2573 | /* If no more original ops, return immediately. */ |
2574 | if (!orig_ops) |
2575 | @@ -6717,6 +6719,8 @@ |
2576 | |
2577 | init_seqno_1 (succ, visited_bbs, blocks_to_reschedule); |
2578 | } |
2579 | + else if (blocks_to_reschedule) |
2580 | + bitmap_set_bit (forced_ebb_heads, succ->index); |
2581 | } |
2582 | |
2583 | for (insn = BB_END (bb); insn != note; insn = PREV_INSN (insn)) |
2584 | @@ -6971,6 +6975,7 @@ |
2585 | int last_clock = 0; |
2586 | int haifa_last_clock = -1; |
2587 | int haifa_clock = 0; |
2588 | + int issued_insns = 0; |
2589 | insn_t insn; |
2590 | |
2591 | if (targetm.sched.md_init) |
2592 | @@ -6989,7 +6994,7 @@ |
2593 | { |
2594 | int cost, haifa_cost; |
2595 | int sort_p; |
2596 | - bool asm_p, real_insn, after_stall; |
2597 | + bool asm_p, real_insn, after_stall, all_issued; |
2598 | int clock; |
2599 | |
2600 | if (!INSN_P (insn)) |
2601 | @@ -7025,7 +7030,9 @@ |
2602 | haifa_cost = cost; |
2603 | after_stall = 1; |
2604 | } |
2605 | - |
2606 | + all_issued = issued_insns == issue_rate; |
2607 | + if (haifa_cost == 0 && all_issued) |
2608 | + haifa_cost = 1; |
2609 | if (haifa_cost > 0) |
2610 | { |
2611 | int i = 0; |
2612 | @@ -7033,6 +7040,7 @@ |
2613 | while (haifa_cost--) |
2614 | { |
2615 | advance_state (curr_state); |
2616 | + issued_insns = 0; |
2617 | i++; |
2618 | |
2619 | if (sched_verbose >= 2) |
2620 | @@ -7049,9 +7057,22 @@ |
2621 | && haifa_cost > 0 |
2622 | && estimate_insn_cost (insn, curr_state) == 0) |
2623 | break; |
2624 | - } |
2625 | + |
2626 | + /* When the data dependency stall is longer than the DFA stall, |
2627 | + and when we have issued exactly issue_rate insns and stalled, |
2628 | + it could be that after this longer stall the insn will again |
2629 | + become unavailable to the DFA restrictions. Looks strange |
2630 | + but happens e.g. on x86-64. So recheck DFA on the last |
2631 | + iteration. */ |
2632 | + if ((after_stall || all_issued) |
2633 | + && real_insn |
2634 | + && haifa_cost == 0) |
2635 | + haifa_cost = estimate_insn_cost (insn, curr_state); |
2636 | + } |
2637 | |
2638 | haifa_clock += i; |
2639 | + if (sched_verbose >= 2) |
2640 | + sel_print ("haifa clock: %d\n", haifa_clock); |
2641 | } |
2642 | else |
2643 | gcc_assert (haifa_cost == 0); |
2644 | @@ -7065,21 +7086,27 @@ |
2645 | &sort_p)) |
2646 | { |
2647 | advance_state (curr_state); |
2648 | + issued_insns = 0; |
2649 | haifa_clock++; |
2650 | if (sched_verbose >= 2) |
2651 | { |
2652 | sel_print ("advance_state (dfa_new_cycle)\n"); |
2653 | debug_state (curr_state); |
2654 | + sel_print ("haifa clock: %d\n", haifa_clock + 1); |
2655 | } |
2656 | } |
2657 | |
2658 | if (real_insn) |
2659 | { |
2660 | cost = state_transition (curr_state, insn); |
2661 | + issued_insns++; |
2662 | |
2663 | if (sched_verbose >= 2) |
2664 | - debug_state (curr_state); |
2665 | - |
2666 | + { |
2667 | + sel_print ("scheduled insn %d, clock %d\n", INSN_UID (insn), |
2668 | + haifa_clock + 1); |
2669 | + debug_state (curr_state); |
2670 | + } |
2671 | gcc_assert (cost < 0); |
2672 | } |
2673 | |
2674 | @@ -7492,21 +7519,23 @@ |
2675 | { |
2676 | basic_block bb = EBB_FIRST_BB (i); |
2677 | |
2678 | - if (sel_bb_empty_p (bb)) |
2679 | - { |
2680 | - bitmap_clear_bit (blocks_to_reschedule, bb->index); |
2681 | - continue; |
2682 | - } |
2683 | - |
2684 | if (bitmap_bit_p (blocks_to_reschedule, bb->index)) |
2685 | { |
2686 | + if (! bb_ends_ebb_p (bb)) |
2687 | + bitmap_set_bit (blocks_to_reschedule, bb_next_bb (bb)->index); |
2688 | + if (sel_bb_empty_p (bb)) |
2689 | + { |
2690 | + bitmap_clear_bit (blocks_to_reschedule, bb->index); |
2691 | + continue; |
2692 | + } |
2693 | clear_outdated_rtx_info (bb); |
2694 | if (sel_insn_is_speculation_check (BB_END (bb)) |
2695 | && JUMP_P (BB_END (bb))) |
2696 | bitmap_set_bit (blocks_to_reschedule, |
2697 | BRANCH_EDGE (bb)->dest->index); |
2698 | } |
2699 | - else if (INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0) |
2700 | + else if (! sel_bb_empty_p (bb) |
2701 | + && INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0) |
2702 | bitmap_set_bit (blocks_to_reschedule, bb->index); |
2703 | } |
2704 | |
2705 | |
2706 | === modified file 'gcc/simplify-rtx.c' |
2707 | --- gcc/simplify-rtx.c 2011-04-14 13:58:12 +0000 |
2708 | +++ gcc/simplify-rtx.c 2011-04-28 16:44:05 +0000 |
2709 | @@ -1468,7 +1468,8 @@ |
2710 | } |
2711 | |
2712 | else if (GET_CODE (op) == CONST_DOUBLE |
2713 | - && SCALAR_FLOAT_MODE_P (mode)) |
2714 | + && SCALAR_FLOAT_MODE_P (mode) |
2715 | + && SCALAR_FLOAT_MODE_P (GET_MODE (op))) |
2716 | { |
2717 | REAL_VALUE_TYPE d, t; |
2718 | REAL_VALUE_FROM_CONST_DOUBLE (d, op); |
2719 | @@ -1491,7 +1492,10 @@ |
2720 | d = real_value_truncate (mode, d); |
2721 | break; |
2722 | case FLOAT_EXTEND: |
2723 | - /* All this does is change the mode. */ |
2724 | + /* All this does is change the mode, unless changing |
2725 | + mode class. */ |
2726 | + if (GET_MODE_CLASS (mode) != GET_MODE_CLASS (GET_MODE (op))) |
2727 | + real_convert (&d, mode, &d); |
2728 | break; |
2729 | case FIX: |
2730 | real_arithmetic (&d, FIX_TRUNC_EXPR, &d, NULL); |
2731 | |
2732 | === modified file 'gcc/testsuite/ChangeLog' |
2733 | --- gcc/testsuite/ChangeLog 2011-03-31 15:11:20 +0000 |
2734 | +++ gcc/testsuite/ChangeLog 2011-04-28 16:44:05 +0000 |
2735 | @@ -1,3 +1,230 @@ |
2736 | +2011-04-28 Release Manager |
2737 | + |
2738 | + * GCC 4.5.3 released. |
2739 | + |
2740 | +2011-04-27 Dodji Seketeli <dodji@redhat.com> |
2741 | + |
2742 | + PR c++/46824, c++/42260, c++/45383 |
2743 | + * g++.dg/conversion/cast2.C: New test. |
2744 | + * g++.dg/conversion/cast3.C: Likewise. |
2745 | + * g++.dg/conversion/cond4.C: Likewise. |
2746 | + |
2747 | +2011-04-26 Jason Merrill <jason@redhat.com> |
2748 | + |
2749 | + * g++.dg/lookup/koenig13.C: New. |
2750 | + |
2751 | +2011-04-26 Jakub Jelinek <jakub@redhat.com> |
2752 | + |
2753 | + Backported from mainline |
2754 | + 2011-04-24 Jakub Jelinek <jakub@redhat.com> |
2755 | + |
2756 | + PR preprocessor/48740 |
2757 | + * c-c++-common/raw-string-11.c: New test. |
2758 | + |
2759 | +2011-04-20 Jason Merrill <jason@redhat.com> |
2760 | + |
2761 | + * g++.dg/template/operator11.C: New. |
2762 | + |
2763 | +2011-04-19 Jason Merrill <jason@redhat.com> |
2764 | + |
2765 | + * g++.dg/ext/complex7.C: New. |
2766 | + |
2767 | +2011-04-19 Jason Merrill <jason@redhat.com> |
2768 | + |
2769 | + * g++.dg/ext/attrib41.C: New. |
2770 | + |
2771 | +2011-04-18 Richard Guenther <rguenther@suse.de> |
2772 | + |
2773 | + Backported from 4.6 branch |
2774 | + 2011-01-19 Jakub Jelinek <jakub@redhat.com> |
2775 | + |
2776 | + PR tree-optimization/47290 |
2777 | + * g++.dg/torture/pr47290.C: New test. |
2778 | + |
2779 | + 2010-05-29 Jan Hubicka <jh@suse.cz> |
2780 | + |
2781 | + PR tree-optimization/46364 |
2782 | + * g++.dg/torture/pr46364.C: New testcase. |
2783 | + |
2784 | +2011-04-18 Richard Guenther <rguenther@suse.de> |
2785 | + |
2786 | + Backported from 4.6 branch |
2787 | + 2011-03-11 Jakub Jelinek <jakub@redhat.com> |
2788 | + |
2789 | + PR c++/48035 |
2790 | + * g++.dg/inherit/virtual8.C: New test. |
2791 | + |
2792 | + 2011-03-05 Zdenek Dvorak <ook@ucw.cz> |
2793 | + |
2794 | + PR rtl-optimization/47899 |
2795 | + * gcc.dg/pr47899.c: New test. |
2796 | + |
2797 | +2011-04-16 Jakub Jelinek <jakub@redhat.com> |
2798 | + |
2799 | + Backported from 4.6 branch |
2800 | + 2011-04-15 Jakub Jelinek <jakub@redhat.com> |
2801 | + |
2802 | + PR target/48605 |
2803 | + * gcc.target/i386/sse4_1-insertps-3.c: New test. |
2804 | + * gcc.target/i386/sse4_1-insertps-4.c: New test. |
2805 | + * gcc.target/i386/avx-insertps-3.c: New test. |
2806 | + * gcc.target/i386/avx-insertps-4.c: New test. |
2807 | + |
2808 | +2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
2809 | + |
2810 | + Backport from mainline: |
2811 | + 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
2812 | + |
2813 | + PR testsuite/47400 |
2814 | + * lib/target-supports.exp (check_ascii_locale_available): New proc. |
2815 | + * lib/target-supports-dg.exp (dg-require-ascii-locale): New proc. |
2816 | + * gcc.dg/attr-alias-5.c: Use dg-require-ascii-locale. |
2817 | + * gcc.dg/ucnid-10.c: Likewise. |
2818 | + * gcc.dg/ucnid-13.c: Likewise. |
2819 | + * gcc.dg/ucnid-7.c: Likewise. |
2820 | + * gcc.dg/ucnid-8.c: Likewise. |
2821 | + Adapt dg-warning line number. |
2822 | + |
2823 | +2011-04-07 Jakub Jelinek <jakub@redhat.com> |
2824 | + |
2825 | + PR fortran/48117 |
2826 | + * gfortran.dg/gomp/pr48117.f90: New test. |
2827 | + |
2828 | + Backported from mainline |
2829 | + 2011-04-06 Jakub Jelinek <jakub@redhat.com> |
2830 | + |
2831 | + PR debug/48466 |
2832 | + * gcc.dg/guality/pr36977.c: New test. |
2833 | + * gcc.dg/guality/pr48466.c: New test. |
2834 | + |
2835 | + 2011-03-24 Jakub Jelinek <jakub@redhat.com> |
2836 | + |
2837 | + PR debug/48204 |
2838 | + * gcc.dg/dfp/pr48204.c: New test. |
2839 | + |
2840 | + 2011-03-17 Jakub Jelinek <jakub@redhat.com> |
2841 | + |
2842 | + PR rtl-optimization/48141 |
2843 | + * gcc.dg/pr48141.c: New test. |
2844 | + |
2845 | + 2011-03-03 Jakub Jelinek <jakub@redhat.com> |
2846 | + |
2847 | + PR c/47963 |
2848 | + * gcc.dg/gomp/pr47963.c: New test. |
2849 | + * g++.dg/gomp/pr47963.C: New test. |
2850 | + |
2851 | + 2011-02-19 Jakub Jelinek <jakub@redhat.com> |
2852 | + |
2853 | + PR c/47809 |
2854 | + * gcc.target/i386/pr47809.c: New test. |
2855 | + |
2856 | + 2011-01-26 Jakub Jelinek <jakub@redhat.com> |
2857 | + |
2858 | + PR c/47473 |
2859 | + * gcc.dg/torture/pr47473.c: New test. |
2860 | + |
2861 | + 2011-01-21 Jakub Jelinek <jakub@redhat.com> |
2862 | + |
2863 | + PR tree-optimization/47391 |
2864 | + * gcc.dg/pr47391.c: New test. |
2865 | + |
2866 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2867 | + |
2868 | + Backport from mainline |
2869 | + 2011-03-26 Andrey Belevantsev <abel@ispras.ru> |
2870 | + |
2871 | + PR rtl-optimization/48144 |
2872 | + * gcc.dg/pr48144.c: New test. |
2873 | + |
2874 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2875 | + |
2876 | + Backport from mainline |
2877 | + 2011-01-13 Andrey Belevantsev <abel@ispras.ru> |
2878 | + |
2879 | + PR rtl-optimization/45352 |
2880 | + * gcc.dg/pr45352-3.c: New. |
2881 | + |
2882 | + Backport from mainline |
2883 | + 2010-12-22 Andrey Belevantsev <abel@ispras.ru> |
2884 | + |
2885 | + PR rtl-optimization/45352 |
2886 | + PR rtl-optimization/46521 |
2887 | + PR rtl-optimization/46522 |
2888 | + * gcc.dg/pr46521.c: New. |
2889 | + * gcc.dg/pr46522.c: New. |
2890 | + |
2891 | + Backport from mainline |
2892 | + 2010-11-08 Andrey Belevantsev <abel@ispras.ru> |
2893 | + |
2894 | + PR rtl-optimization/45352 |
2895 | + gcc.dg/pr45352.c, gcc.dg/pr45352-1.c, gcc.dg/pr45352-2.c: New tests. |
2896 | + gcc.target/i386/pr45352.c, gcc.target/i386/pr45352-1.c, |
2897 | + gcc.target/i386/pr45352-2.c: New tests. |
2898 | + |
2899 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2900 | + |
2901 | + Backport from mainline |
2902 | + 2010-12-24 Alexander Monakov <amonakov@ispras.ru> |
2903 | + |
2904 | + PR rtl-optimization/47036 |
2905 | + * g++.dg/opt/pr47036.C: New. |
2906 | + |
2907 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2908 | + |
2909 | + Backport from mainline |
2910 | + 2010-12-15 Alexander Monakov <amonakov@ispras.ru> |
2911 | + |
2912 | + PR rtl-optimization/46649 |
2913 | + * g++.dg/opt/pr46649.C: New. |
2914 | + |
2915 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2916 | + |
2917 | + Backport from mainline |
2918 | + 2010-12-14 Alexander Monakov <amonakov@ispras.ru> |
2919 | + |
2920 | + PR rtl-optimization/46875 |
2921 | + * gcc.dg/pr46875.c: New. |
2922 | + |
2923 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2924 | + |
2925 | + Backport from mainline |
2926 | + 2010-12-07 Andrey Belevantsev <abel@ispras.ru> |
2927 | + |
2928 | + PR target/43603 |
2929 | + * gcc.target/ia64/pr43603.c: New. |
2930 | + * gcc/testsuite/g++.dg/opt/pr46640.C: New. |
2931 | + |
2932 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2933 | + |
2934 | + Backport from mainline |
2935 | + 2010-12-03 Alexander Monakov <amonakov@ispras.ru> |
2936 | + |
2937 | + PR rtl-optimization/45354 |
2938 | + * gcc.dg/tree-prof/pr45354.c: New. |
2939 | + |
2940 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2941 | + |
2942 | + Backport from mainline |
2943 | + 2010-11-25 Alexander Monakov <amonakov@ispras.ru> |
2944 | + |
2945 | + PR rtl-optimization/46585 |
2946 | + * gcc.dg/pr46585.c: New. |
2947 | + |
2948 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2949 | + |
2950 | + Backport from mainline |
2951 | + 2010-11-22 Alexander Monakov <amonakov@ispras.ru> |
2952 | + |
2953 | + PR rtl-optimization/45652 |
2954 | + * gcc.dg/pr45652.c: New. |
2955 | + |
2956 | +2011-04-07 Andrey Belevantsev <abel@ispras.ru> |
2957 | + |
2958 | + Backport from mainline |
2959 | + 2010-10-14 Andrey Belevantsev <abel@ispras.ru> |
2960 | + PR rtl-optimization/45570 |
2961 | + * gcc.dg/pr45570.c: New test. |
2962 | + |
2963 | 2011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
2964 | |
2965 | PR target/16292 |
2966 | |
2967 | === added file 'gcc/testsuite/c-c++-common/raw-string-11.c' |
2968 | --- gcc/testsuite/c-c++-common/raw-string-11.c 1970-01-01 00:00:00 +0000 |
2969 | +++ gcc/testsuite/c-c++-common/raw-string-11.c 2011-04-28 16:44:05 +0000 |
2970 | @@ -0,0 +1,13 @@ |
2971 | +// PR preprocessor/48740 |
2972 | +// { dg-options "-std=gnu99 -trigraphs -save-temps" { target c } } |
2973 | +// { dg-options "-std=c++0x -save-temps" { target c++ } } |
2974 | +// { dg-do run } |
2975 | + |
2976 | +int main () |
2977 | +{ |
2978 | + return __builtin_memcmp (R"raw(foo%sbar%sfred%sbob?????)raw", |
2979 | + "foo%sbar%sfred%sbob?""?""?""?""?", |
2980 | + sizeof ("foo%sbar%sfred%sbob?""?""?""?""?")); |
2981 | +} |
2982 | + |
2983 | +// { dg-final { cleanup-saved-temps } } |
2984 | |
2985 | === added file 'gcc/testsuite/g++.dg/conversion/cast2.C' |
2986 | --- gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000 |
2987 | +++ gcc/testsuite/g++.dg/conversion/cast2.C 2011-04-28 16:44:05 +0000 |
2988 | @@ -0,0 +1,10 @@ |
2989 | +// Contributed by Dodji Seketeli <dodji@redhat.com> |
2990 | +// Origin: PR c++/42260 |
2991 | +// { dg-do compile } |
2992 | + |
2993 | +struct A |
2994 | +{ |
2995 | + template<typename T> operator T*(); |
2996 | +}; |
2997 | + |
2998 | +int i = *A();// { dg-error "no match" } |
2999 | |
3000 | === removed file 'gcc/testsuite/g++.dg/conversion/cast2.C' |
3001 | --- gcc/testsuite/g++.dg/conversion/cast2.C 2009-12-23 00:31:33 +0000 |
3002 | +++ gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000 |
3003 | @@ -1,11 +0,0 @@ |
3004 | -// Contributed by Dodji Seketeli <dodji@redhat.com> |
3005 | -// Origin: PR c++/42260 |
3006 | -// { dg-do compile } |
3007 | - |
3008 | -struct A |
3009 | -{ |
3010 | - template<typename T> operator T*(); |
3011 | -}; |
3012 | - |
3013 | -int i = *A();// { dg-error "no match" } |
3014 | - |
3015 | |
3016 | === added file 'gcc/testsuite/g++.dg/conversion/cast3.C' |
3017 | --- gcc/testsuite/g++.dg/conversion/cast3.C 1970-01-01 00:00:00 +0000 |
3018 | +++ gcc/testsuite/g++.dg/conversion/cast3.C 2011-04-28 16:44:05 +0000 |
3019 | @@ -0,0 +1,14 @@ |
3020 | +// Origin: PR c++/46824 |
3021 | + |
3022 | +class Incomplete; |
3023 | +struct Ptr |
3024 | +{ |
3025 | + operator Incomplete*(); |
3026 | +}; |
3027 | + |
3028 | +int |
3029 | +main() |
3030 | +{ |
3031 | + Ptr p; |
3032 | + *p; |
3033 | +} |
3034 | |
3035 | === added file 'gcc/testsuite/g++.dg/conversion/cond4.C' |
3036 | --- gcc/testsuite/g++.dg/conversion/cond4.C 1970-01-01 00:00:00 +0000 |
3037 | +++ gcc/testsuite/g++.dg/conversion/cond4.C 2011-04-28 16:44:05 +0000 |
3038 | @@ -0,0 +1,31 @@ |
3039 | +// Origin: PR c++/45383 |
3040 | +// { dg-do run } |
3041 | + |
3042 | +struct null { |
3043 | + null() {} |
3044 | + template<class T> |
3045 | + operator T*() const { |
3046 | + return 0; |
3047 | + } |
3048 | + |
3049 | + template<class C, class T> |
3050 | + operator T C::*() const { |
3051 | + return 0; |
3052 | + } |
3053 | +private: |
3054 | + null(const null&); |
3055 | + null& operator=(const null&); |
3056 | + void operator&() const; |
3057 | +}; |
3058 | + |
3059 | +static struct null null; |
3060 | + |
3061 | +int |
3062 | +main() |
3063 | +{ |
3064 | + int* ptr = null; |
3065 | + if (ptr == null) |
3066 | + return 0; |
3067 | + if (ptr != null) |
3068 | + return 1; |
3069 | +} |
3070 | |
3071 | === added file 'gcc/testsuite/g++.dg/ext/attrib41.C' |
3072 | --- gcc/testsuite/g++.dg/ext/attrib41.C 1970-01-01 00:00:00 +0000 |
3073 | +++ gcc/testsuite/g++.dg/ext/attrib41.C 2011-04-28 16:44:05 +0000 |
3074 | @@ -0,0 +1,19 @@ |
3075 | +// PR c++/45267 |
3076 | +// { dg-options "-O" } |
3077 | + |
3078 | +template<typename T> struct Vector { |
3079 | + Vector(long long x); |
3080 | + inline Vector<T> operator<<(int x) const __attribute__((always_inline)); |
3081 | +}; |
3082 | +long long bar (long long); |
3083 | +template<> inline Vector<int> Vector<int>::operator<<(int x) const { |
3084 | + return bar(x); |
3085 | +} |
3086 | +bool b; |
3087 | +int main() { |
3088 | + Vector<int> a(1); |
3089 | + if ((a << 2), b) { |
3090 | + a << 2; |
3091 | + throw 1; |
3092 | + } |
3093 | +} |
3094 | |
3095 | === added file 'gcc/testsuite/g++.dg/ext/complex7.C' |
3096 | --- gcc/testsuite/g++.dg/ext/complex7.C 1970-01-01 00:00:00 +0000 |
3097 | +++ gcc/testsuite/g++.dg/ext/complex7.C 2011-04-28 16:44:05 +0000 |
3098 | @@ -0,0 +1,6 @@ |
3099 | +// { dg-options "" } |
3100 | + |
3101 | +class A |
3102 | +{ |
3103 | + static const _Complex double x = 1.0 + 2.0i; |
3104 | +}; |
3105 | |
3106 | === added file 'gcc/testsuite/g++.dg/gomp/pr47963.C' |
3107 | --- gcc/testsuite/g++.dg/gomp/pr47963.C 1970-01-01 00:00:00 +0000 |
3108 | +++ gcc/testsuite/g++.dg/gomp/pr47963.C 2011-04-28 16:44:05 +0000 |
3109 | @@ -0,0 +1,11 @@ |
3110 | +// PR c/47963 |
3111 | +// { dg-do compile } |
3112 | +// { dg-options "-fopenmp" } |
3113 | + |
3114 | +void |
3115 | +foo (float n) |
3116 | +{ |
3117 | + int A[n][n]; // { dg-error "has non-integral type" } |
3118 | +#pragma omp parallel private(A) |
3119 | + ; |
3120 | +} |
3121 | |
3122 | === added file 'gcc/testsuite/g++.dg/inherit/virtual8.C' |
3123 | --- gcc/testsuite/g++.dg/inherit/virtual8.C 1970-01-01 00:00:00 +0000 |
3124 | +++ gcc/testsuite/g++.dg/inherit/virtual8.C 2011-04-28 16:44:05 +0000 |
3125 | @@ -0,0 +1,48 @@ |
3126 | +// PR c++/48035 |
3127 | +// { dg-do run } |
3128 | + |
3129 | +#include <new> |
3130 | +#include <cstring> |
3131 | +#include <cstdlib> |
3132 | + |
3133 | +struct A |
3134 | +{ |
3135 | + virtual void foo (void) {} |
3136 | + virtual ~A () {} |
3137 | +}; |
3138 | + |
3139 | +struct B : public A |
3140 | +{ |
3141 | + virtual ~B () {} |
3142 | +}; |
3143 | + |
3144 | +struct C |
3145 | +{ |
3146 | + virtual ~C () {} |
3147 | + int c; |
3148 | +}; |
3149 | + |
3150 | +struct D : public virtual B, public C |
3151 | +{ |
3152 | + virtual ~D () {} |
3153 | +}; |
3154 | + |
3155 | +struct E : public virtual D |
3156 | +{ |
3157 | + virtual ~E () {} |
3158 | +}; |
3159 | + |
3160 | +int |
3161 | +main () |
3162 | +{ |
3163 | + char *v = new char[sizeof (E) + 16]; |
3164 | + memset (v, 0x55, sizeof (E) + 16); |
3165 | + E *e = new (v) E (); |
3166 | + e->~E (); |
3167 | + |
3168 | + for (unsigned i = sizeof (E); i < sizeof (E) + 16; ++i) |
3169 | + if (v[i] != 0x55) |
3170 | + abort (); |
3171 | + |
3172 | + delete[] v; |
3173 | +} |
3174 | |
3175 | === added file 'gcc/testsuite/g++.dg/lookup/koenig13.C' |
3176 | --- gcc/testsuite/g++.dg/lookup/koenig13.C 1970-01-01 00:00:00 +0000 |
3177 | +++ gcc/testsuite/g++.dg/lookup/koenig13.C 2011-04-28 16:44:05 +0000 |
3178 | @@ -0,0 +1,16 @@ |
3179 | +// PR c++/42687 |
3180 | +// DR 705 |
3181 | + |
3182 | +namespace N |
3183 | +{ |
3184 | + struct S { }; |
3185 | + void f(const S &) { } |
3186 | +} |
3187 | + |
3188 | +void f(const N::S &) { } |
3189 | + |
3190 | +int main() |
3191 | +{ |
3192 | + N::S v; |
3193 | + (f)(v); // no ambiguity: ADL is prevented with (), only ::f is considered |
3194 | +} |
3195 | |
3196 | === added file 'gcc/testsuite/g++.dg/opt/pr46640.C' |
3197 | --- gcc/testsuite/g++.dg/opt/pr46640.C 1970-01-01 00:00:00 +0000 |
3198 | +++ gcc/testsuite/g++.dg/opt/pr46640.C 2011-04-28 16:44:05 +0000 |
3199 | @@ -0,0 +1,44 @@ |
3200 | +// { dg-do compile { target x86_64-*-* } } |
3201 | +// { dg-options "-fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2 -fno-exceptions -O" } |
3202 | + |
3203 | +struct QBasicAtomicInt |
3204 | +{ |
3205 | + int i, j; |
3206 | + bool deref () |
3207 | + { |
3208 | + asm volatile ("":"=m" (i), "=qm" (j)); |
3209 | + } |
3210 | +}; |
3211 | + |
3212 | +struct Data |
3213 | +{ |
3214 | + QBasicAtomicInt ref; |
3215 | + void *data; |
3216 | +}; |
3217 | + |
3218 | +struct QByteArray |
3219 | +{ |
3220 | + Data * d; |
3221 | + ~QByteArray () |
3222 | + { |
3223 | + d->ref.deref (); |
3224 | + } |
3225 | +}; |
3226 | + |
3227 | +int indexOf (unsigned); |
3228 | +int stat (void *, int *); |
3229 | +QByteArray encodeName (); |
3230 | + |
3231 | +bool makeDir (unsigned len) |
3232 | +{ |
3233 | + unsigned i = 0; |
3234 | + while (len) |
3235 | + { |
3236 | + int st; |
3237 | + int pos = indexOf (i); |
3238 | + QByteArray baseEncoded = encodeName (); |
3239 | + if (stat (baseEncoded.d->data, &st) && stat (baseEncoded.d, &st)) |
3240 | + return false; |
3241 | + i = pos; |
3242 | + } |
3243 | +} |
3244 | |
3245 | === added file 'gcc/testsuite/g++.dg/opt/pr46649.C' |
3246 | --- gcc/testsuite/g++.dg/opt/pr46649.C 1970-01-01 00:00:00 +0000 |
3247 | +++ gcc/testsuite/g++.dg/opt/pr46649.C 2011-04-28 16:44:05 +0000 |
3248 | @@ -0,0 +1,9 @@ |
3249 | +// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } |
3250 | +// { dg-options "-fschedule-insns -fselective-scheduling" } |
3251 | + |
3252 | +void foo () |
3253 | +{ |
3254 | + for (;;) |
3255 | + for (;;({break;})) |
3256 | + ; |
3257 | +} |
3258 | |
3259 | === added file 'gcc/testsuite/g++.dg/opt/pr47036.C' |
3260 | --- gcc/testsuite/g++.dg/opt/pr47036.C 1970-01-01 00:00:00 +0000 |
3261 | +++ gcc/testsuite/g++.dg/opt/pr47036.C 2011-04-28 16:44:05 +0000 |
3262 | @@ -0,0 +1,10 @@ |
3263 | +// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } |
3264 | +// { dg-options "-fschedule-insns -fselective-scheduling -fno-dce" } |
3265 | + |
3266 | + |
3267 | +void foo () |
3268 | +{ |
3269 | + for (;;) |
3270 | + for (;;({break;})); |
3271 | +} |
3272 | + |
3273 | |
3274 | === added file 'gcc/testsuite/g++.dg/template/operator11.C' |
3275 | --- gcc/testsuite/g++.dg/template/operator11.C 1970-01-01 00:00:00 +0000 |
3276 | +++ gcc/testsuite/g++.dg/template/operator11.C 2011-04-28 16:44:05 +0000 |
3277 | @@ -0,0 +1,25 @@ |
3278 | +// PR c++/48594 |
3279 | +// Test for uses of (X->*Y)() that don't actually involve a |
3280 | +// pointer to member function. |
3281 | + |
3282 | +struct A { } a; |
3283 | +struct B { } b; |
3284 | +struct C * cp; |
3285 | + |
3286 | +struct Func { void operator()(); }; |
3287 | +Func operator->* (A, int); |
3288 | + |
3289 | +typedef void (*pfn)(); |
3290 | +pfn operator->* (B, int); |
3291 | + |
3292 | +pfn C::*cpfn; |
3293 | +Func C::*cfunc; |
3294 | + |
3295 | +template <class T> |
3296 | +void f() |
3297 | +{ |
3298 | + (a->*1)(); |
3299 | + (b->*1)(); |
3300 | + (cp->*cpfn)(); |
3301 | + (cp->*cfunc)(); |
3302 | +} |
3303 | |
3304 | === added file 'gcc/testsuite/g++.dg/torture/pr46364.C' |
3305 | --- gcc/testsuite/g++.dg/torture/pr46364.C 1970-01-01 00:00:00 +0000 |
3306 | +++ gcc/testsuite/g++.dg/torture/pr46364.C 2011-04-28 16:44:05 +0000 |
3307 | @@ -0,0 +1,20 @@ |
3308 | +// { dg-do compile } |
3309 | +#include <string> |
3310 | + |
3311 | +void a() throw (int); |
3312 | +void b(std::string const &); |
3313 | + |
3314 | +void c(std::string *e) |
3315 | +{ |
3316 | + b(""); |
3317 | + |
3318 | + try { |
3319 | + a(); |
3320 | + } catch (...) { |
3321 | + *e = ""; |
3322 | + } |
3323 | +} |
3324 | + |
3325 | +void d() { |
3326 | + c(0); |
3327 | +} |
3328 | |
3329 | === added file 'gcc/testsuite/g++.dg/torture/pr47290.C' |
3330 | --- gcc/testsuite/g++.dg/torture/pr47290.C 1970-01-01 00:00:00 +0000 |
3331 | +++ gcc/testsuite/g++.dg/torture/pr47290.C 2011-04-28 16:44:05 +0000 |
3332 | @@ -0,0 +1,19 @@ |
3333 | +// PR tree-optimization/47290 |
3334 | +// { dg-do compile } |
3335 | + |
3336 | +struct V |
3337 | +{ |
3338 | + V (int = 0); |
3339 | + ~V () |
3340 | + { |
3341 | + for (;;) |
3342 | + ; |
3343 | + } |
3344 | + int size (); |
3345 | +}; |
3346 | + |
3347 | +struct S |
3348 | +{ |
3349 | + V a, b; |
3350 | + S () : b (a.size ()) {} |
3351 | +} s; |
3352 | |
3353 | === modified file 'gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog' |
3354 | --- gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2010-12-16 12:32:45 +0000 |
3355 | +++ gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2011-04-28 16:44:05 +0000 |
3356 | @@ -1,3 +1,7 @@ |
3357 | +2011-04-28 Release Manager |
3358 | + |
3359 | + * GCC 4.5.3 released. |
3360 | + |
3361 | 2010-12-16 Release Manager |
3362 | |
3363 | * GCC 4.5.2 released. |
3364 | |
3365 | === modified file 'gcc/testsuite/gcc.dg/attr-alias-5.c' |
3366 | --- gcc/testsuite/gcc.dg/attr-alias-5.c 2009-05-04 11:23:50 +0000 |
3367 | +++ gcc/testsuite/gcc.dg/attr-alias-5.c 2011-04-28 16:44:05 +0000 |
3368 | @@ -3,6 +3,7 @@ |
3369 | /* { dg-do compile } */ |
3370 | /* { dg-options "-std=gnu99" } */ |
3371 | /* { dg-require-alias "" } */ |
3372 | +/* { dg-require-ascii-locale "" } */ |
3373 | |
3374 | void f0 (void) __attribute__((alias("\xa1"))); /* { dg-error "undefined symbol '\\\\241'" } */ |
3375 | void f1 (void) __attribute__((alias("\u00e9"))); /* { dg-error "undefined symbol '\\\\U000000e9'" } */ |
3376 | |
3377 | === added file 'gcc/testsuite/gcc.dg/dfp/pr48204.c' |
3378 | --- gcc/testsuite/gcc.dg/dfp/pr48204.c 1970-01-01 00:00:00 +0000 |
3379 | +++ gcc/testsuite/gcc.dg/dfp/pr48204.c 2011-04-28 16:44:05 +0000 |
3380 | @@ -0,0 +1,10 @@ |
3381 | +/* PR debug/48204 */ |
3382 | +/* { dg-do compile } */ |
3383 | +/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g" } */ |
3384 | + |
3385 | +void |
3386 | +foo (void) |
3387 | +{ |
3388 | + float cf = 3.0f; |
3389 | + _Decimal64 d64 = cf; |
3390 | +} |
3391 | |
3392 | === added file 'gcc/testsuite/gcc.dg/gomp/pr47963.c' |
3393 | --- gcc/testsuite/gcc.dg/gomp/pr47963.c 1970-01-01 00:00:00 +0000 |
3394 | +++ gcc/testsuite/gcc.dg/gomp/pr47963.c 2011-04-28 16:44:05 +0000 |
3395 | @@ -0,0 +1,11 @@ |
3396 | +/* PR c/47963 */ |
3397 | +/* { dg-do compile } */ |
3398 | +/* { dg-options "-fopenmp" } */ |
3399 | + |
3400 | +void |
3401 | +foo (float n) |
3402 | +{ |
3403 | + int A[n][n]; /* { dg-error "has non-integer type" } */ |
3404 | +#pragma omp parallel private(A) |
3405 | + ; |
3406 | +} |
3407 | |
3408 | === added file 'gcc/testsuite/gcc.dg/guality/pr36977.c' |
3409 | --- gcc/testsuite/gcc.dg/guality/pr36977.c 1970-01-01 00:00:00 +0000 |
3410 | +++ gcc/testsuite/gcc.dg/guality/pr36977.c 2011-04-28 16:44:05 +0000 |
3411 | @@ -0,0 +1,32 @@ |
3412 | +/* PR debug/36977 */ |
3413 | +/* { dg-do run } */ |
3414 | +/* { dg-options "-g" } */ |
3415 | +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ |
3416 | + |
3417 | +void |
3418 | +foo () |
3419 | +{ |
3420 | +} |
3421 | + |
3422 | +int |
3423 | +main () |
3424 | +{ |
3425 | + struct { char c[100]; } cbig; |
3426 | + struct { int i[800]; } ibig; |
3427 | + struct { long l[900]; } lbig; |
3428 | + struct { float f[200]; } fbig; |
3429 | + struct { double d[300]; } dbig; |
3430 | + struct { short s[400]; } sbig; |
3431 | + |
3432 | + ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */ |
3433 | + ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */ |
3434 | + cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */ |
3435 | + cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */ |
3436 | + fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */ |
3437 | + dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */ |
3438 | + sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */ |
3439 | + lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */ |
3440 | + |
3441 | + foo (); |
3442 | + return 0; |
3443 | +} |
3444 | |
3445 | === added file 'gcc/testsuite/gcc.dg/guality/pr48466.c' |
3446 | --- gcc/testsuite/gcc.dg/guality/pr48466.c 1970-01-01 00:00:00 +0000 |
3447 | +++ gcc/testsuite/gcc.dg/guality/pr48466.c 2011-04-28 16:44:05 +0000 |
3448 | @@ -0,0 +1,41 @@ |
3449 | +/* PR debug/48466 */ |
3450 | +/* { dg-do run } */ |
3451 | +/* { dg-options "-g" } */ |
3452 | +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ |
3453 | + |
3454 | +struct S { unsigned int a; unsigned int *b; }; |
3455 | +struct T { struct S a; struct S b; }; |
3456 | +struct U { const char *u; }; |
3457 | +int n[10]; |
3458 | +volatile int v; |
3459 | + |
3460 | +struct U |
3461 | +foo (const char *s) |
3462 | +{ |
3463 | + struct U r; |
3464 | + r.u = s; |
3465 | + return r; |
3466 | +} |
3467 | + |
3468 | +void |
3469 | +bar (struct T *s, int a, int b) |
3470 | +{ |
3471 | + s->a.a = a; |
3472 | + s->a.b = &s->a.a; |
3473 | + s->b.a = b; |
3474 | + s->b.b = &s->b.a; |
3475 | +} |
3476 | + |
3477 | +int |
3478 | +main () |
3479 | +{ |
3480 | + struct T t; |
3481 | + struct U x = foo ("this is x"); |
3482 | + struct S y, z; |
3483 | + y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */ |
3484 | + y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */ |
3485 | + bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */ |
3486 | + v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */ |
3487 | + z = y; |
3488 | + return 0; |
3489 | +} |
3490 | |
3491 | === added file 'gcc/testsuite/gcc.dg/pr45352-1.c' |
3492 | --- gcc/testsuite/gcc.dg/pr45352-1.c 1970-01-01 00:00:00 +0000 |
3493 | +++ gcc/testsuite/gcc.dg/pr45352-1.c 2011-04-28 16:44:05 +0000 |
3494 | @@ -0,0 +1,13 @@ |
3495 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3496 | +/* { dg-options "-O3 -fschedule-insns -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining -funroll-loops -fprefetch-loop-arrays" } */ |
3497 | + |
3498 | +void main1 (float *pa, float *pc) |
3499 | +{ |
3500 | + int i; |
3501 | + float b[256]; |
3502 | + float c[256]; |
3503 | + for (i = 0; i < 256; i++) |
3504 | + b[i] = c[i] = pc[i]; |
3505 | + for (i = 0; i < 256; i++) |
3506 | + pa[i] = b[i] * c[i]; |
3507 | +} |
3508 | |
3509 | === added file 'gcc/testsuite/gcc.dg/pr45352-2.c' |
3510 | --- gcc/testsuite/gcc.dg/pr45352-2.c 1970-01-01 00:00:00 +0000 |
3511 | +++ gcc/testsuite/gcc.dg/pr45352-2.c 2011-04-28 16:44:05 +0000 |
3512 | @@ -0,0 +1,17 @@ |
3513 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3514 | +/* { dg-options "-O1 -freorder-blocks -fschedule-insns2 -funswitch-loops -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */ |
3515 | +void |
3516 | +foo1 (int *s) |
3517 | +{ |
3518 | + s[0] = s[1]; |
3519 | + while (s[6] - s[8]) |
3520 | + { |
3521 | + s[6] -= s[8]; |
3522 | + if (s[8] || s[0]) |
3523 | + { |
3524 | + s[3] += s[0]; |
3525 | + s[4] += s[1]; |
3526 | + } |
3527 | + s[7]++; |
3528 | + } |
3529 | +} |
3530 | |
3531 | === added file 'gcc/testsuite/gcc.dg/pr45352-3.c' |
3532 | --- gcc/testsuite/gcc.dg/pr45352-3.c 1970-01-01 00:00:00 +0000 |
3533 | +++ gcc/testsuite/gcc.dg/pr45352-3.c 2011-04-28 16:44:05 +0000 |
3534 | @@ -0,0 +1,16 @@ |
3535 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3536 | +/* { 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" } */ |
3537 | + |
3538 | +extern volatile float f[]; |
3539 | + |
3540 | +void foo (void) |
3541 | +{ |
3542 | + int i; |
3543 | + for (i = 0; i < 100; i++) |
3544 | + f[i] = 0; |
3545 | + for (i = 0; i < 100; i++) |
3546 | + f[i] = 0; |
3547 | + for (i = 0; i < 100; i++) |
3548 | + if (f[i]) |
3549 | + __builtin_abort (); |
3550 | +} |
3551 | |
3552 | === added file 'gcc/testsuite/gcc.dg/pr45352.c' |
3553 | --- gcc/testsuite/gcc.dg/pr45352.c 1970-01-01 00:00:00 +0000 |
3554 | +++ gcc/testsuite/gcc.dg/pr45352.c 2011-04-28 16:44:05 +0000 |
3555 | @@ -0,0 +1,24 @@ |
3556 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3557 | +/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate" } */ |
3558 | + |
3559 | +static inline void |
3560 | +bmp_iter_next (int *bi, int *bit_no) |
3561 | +{ |
3562 | + *bi >>= 1; |
3563 | + *bit_no += 1; |
3564 | +} |
3565 | + |
3566 | +int bmp_iter_set (int *bi, int *bit_no); |
3567 | +void bitmap_initialize_stat (int, ...); |
3568 | +void bitmap_clear (void); |
3569 | + |
3570 | +void |
3571 | +df_md_alloc (int bi, int bb_index, void *bb_info) |
3572 | +{ |
3573 | + for (; bmp_iter_set (&bi, &bb_index); bmp_iter_next (&bi, &bb_index)) |
3574 | + |
3575 | + if (bb_info) |
3576 | + bitmap_clear (); |
3577 | + else |
3578 | + bitmap_initialize_stat (0); |
3579 | +} |
3580 | |
3581 | === added file 'gcc/testsuite/gcc.dg/pr45570.c' |
3582 | --- gcc/testsuite/gcc.dg/pr45570.c 1970-01-01 00:00:00 +0000 |
3583 | +++ gcc/testsuite/gcc.dg/pr45570.c 2011-04-28 16:44:05 +0000 |
3584 | @@ -0,0 +1,28 @@ |
3585 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ |
3586 | +/* { dg-options "-O3 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -ftracer" } */ |
3587 | +void |
3588 | +parser_get_next_char (char c, int qm, char *p) |
3589 | +{ |
3590 | + int quote_mode = 0; |
3591 | + for (; *p; p++) |
3592 | + { |
3593 | + if (qm) |
3594 | + { |
3595 | + if (quote_mode == 0 && *p == '"' && *(p - 1)) |
3596 | + { |
3597 | + quote_mode = 1; |
3598 | + continue; |
3599 | + } |
3600 | + if (quote_mode && *p == '"' && *(p - 1)) |
3601 | + quote_mode = 0; |
3602 | + } |
3603 | + if (quote_mode == 0 && *p == c && *(p - 1)) |
3604 | + break; |
3605 | + } |
3606 | +} |
3607 | + |
3608 | +void |
3609 | +parser_get_next_parameter (char *p) |
3610 | +{ |
3611 | + parser_get_next_char (':', 1, p); |
3612 | +} |
3613 | |
3614 | === added file 'gcc/testsuite/gcc.dg/pr45652.c' |
3615 | --- gcc/testsuite/gcc.dg/pr45652.c 1970-01-01 00:00:00 +0000 |
3616 | +++ gcc/testsuite/gcc.dg/pr45652.c 2011-04-28 16:44:05 +0000 |
3617 | @@ -0,0 +1,39 @@ |
3618 | +/* { dg-do run { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3619 | +/* { dg-options "-O2 -fselective-scheduling2" } */ |
3620 | + |
3621 | +struct S { |
3622 | + double i[2]; |
3623 | +}; |
3624 | + |
3625 | +void __attribute__ ((noinline)) checkcd (struct S x) |
3626 | +{ |
3627 | + if (x.i[0] != 7.0 || x.i[1] != 8.0) |
3628 | + __builtin_abort (); |
3629 | +} |
3630 | + |
3631 | +void __attribute__ ((noinline)) testvacd (int n, ...) |
3632 | +{ |
3633 | + int i; |
3634 | + __builtin_va_list ap; |
3635 | + __builtin_va_start (ap, n); |
3636 | + for (i = 0; i < n; i++) |
3637 | + { |
3638 | + struct S t = __builtin_va_arg (ap, struct S); |
3639 | + checkcd (t); |
3640 | + } |
3641 | + __builtin_va_end (ap); |
3642 | +} |
3643 | + |
3644 | +void |
3645 | +testitcd (void) |
3646 | +{ |
3647 | + struct S x = { { 7.0, 8.0 } }; |
3648 | + testvacd (2, x, x); |
3649 | +} |
3650 | + |
3651 | +int |
3652 | +main () |
3653 | +{ |
3654 | + testitcd (); |
3655 | + return 0; |
3656 | +} |
3657 | |
3658 | === added file 'gcc/testsuite/gcc.dg/pr46521.c' |
3659 | --- gcc/testsuite/gcc.dg/pr46521.c 1970-01-01 00:00:00 +0000 |
3660 | +++ gcc/testsuite/gcc.dg/pr46521.c 2011-04-28 16:44:05 +0000 |
3661 | @@ -0,0 +1,20 @@ |
3662 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3663 | +/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate -fno-early-inlining" } */ |
3664 | + |
3665 | +static void bmp_iter_next (int *bi) |
3666 | +{ |
3667 | + *bi >>= 1; |
3668 | +} |
3669 | + |
3670 | +int bmp_iter_set (int *, int); |
3671 | +void bitmap_clear (void); |
3672 | +void bitmap_initialize_stat (void); |
3673 | + |
3674 | +void df_md_alloc (int bi, int bb_index, int bb_info) |
3675 | +{ |
3676 | + for (; bmp_iter_set (&bi, bb_index); bmp_iter_next (&bi)) |
3677 | + if (bb_info) |
3678 | + bitmap_clear (); |
3679 | + else |
3680 | + bitmap_initialize_stat (); |
3681 | +} |
3682 | |
3683 | === added file 'gcc/testsuite/gcc.dg/pr46522.c' |
3684 | --- gcc/testsuite/gcc.dg/pr46522.c 1970-01-01 00:00:00 +0000 |
3685 | +++ gcc/testsuite/gcc.dg/pr46522.c 2011-04-28 16:44:05 +0000 |
3686 | @@ -0,0 +1,33 @@ |
3687 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3688 | +/* { dg-options "-O3 -fkeep-inline-functions -fsel-sched-pipelining -fselective-scheduling2 -funroll-loops" } */ |
3689 | + |
3690 | +struct S |
3691 | +{ |
3692 | + unsigned i, j; |
3693 | +}; |
3694 | + |
3695 | +static inline void |
3696 | +bar (struct S *s) |
3697 | +{ |
3698 | + if (s->i++ == 1) |
3699 | + { |
3700 | + s->i = 0; |
3701 | + s->j++; |
3702 | + } |
3703 | +} |
3704 | + |
3705 | +void |
3706 | +foo1 (struct S *s) |
3707 | +{ |
3708 | + bar (s); |
3709 | +} |
3710 | + |
3711 | +void |
3712 | +foo2 (struct S s1, struct S s2, int i) |
3713 | +{ |
3714 | + while (s1.i != s2.i) { |
3715 | + if (i) |
3716 | + *(unsigned *) 0 |= (1U << s1.i); |
3717 | + bar (&s1); |
3718 | + } |
3719 | +} |
3720 | |
3721 | === added file 'gcc/testsuite/gcc.dg/pr46585.c' |
3722 | --- gcc/testsuite/gcc.dg/pr46585.c 1970-01-01 00:00:00 +0000 |
3723 | +++ gcc/testsuite/gcc.dg/pr46585.c 2011-04-28 16:44:05 +0000 |
3724 | @@ -0,0 +1,11 @@ |
3725 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ |
3726 | +/* { dg-options "-fno-dce -fschedule-insns -fselective-scheduling" } */ |
3727 | +void |
3728 | +foo (void) |
3729 | +{ |
3730 | + switch (0) |
3731 | + { |
3732 | + default: |
3733 | + break; |
3734 | + } |
3735 | +} |
3736 | |
3737 | === added file 'gcc/testsuite/gcc.dg/pr46875.c' |
3738 | --- gcc/testsuite/gcc.dg/pr46875.c 1970-01-01 00:00:00 +0000 |
3739 | +++ gcc/testsuite/gcc.dg/pr46875.c 2011-04-28 16:44:05 +0000 |
3740 | @@ -0,0 +1,27 @@ |
3741 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3742 | +/* { dg-options "-Os -fselective-scheduling2" } */ |
3743 | + |
3744 | +long |
3745 | +foo (int x, long *y) |
3746 | +{ |
3747 | + long a = 0; |
3748 | + switch (x) |
3749 | + { |
3750 | + case 0: |
3751 | + a = *y; |
3752 | + break; |
3753 | + case 1: |
3754 | + a = *y; |
3755 | + break; |
3756 | + case 2: |
3757 | + a = *y; |
3758 | + break; |
3759 | + case 3: |
3760 | + a = *y; |
3761 | + break; |
3762 | + case 4: |
3763 | + a = *y; |
3764 | + break; |
3765 | + } |
3766 | + return a; |
3767 | +} |
3768 | |
3769 | === added file 'gcc/testsuite/gcc.dg/pr47391.c' |
3770 | --- gcc/testsuite/gcc.dg/pr47391.c 1970-01-01 00:00:00 +0000 |
3771 | +++ gcc/testsuite/gcc.dg/pr47391.c 2011-04-28 16:44:05 +0000 |
3772 | @@ -0,0 +1,22 @@ |
3773 | +/* PR tree-optimization/47391 */ |
3774 | +/* { dg-do compile } */ |
3775 | +/* { dg-options "-O2 -fdump-tree-optimized" } */ |
3776 | + |
3777 | +const volatile int v = 1; |
3778 | +int i = 0; |
3779 | + |
3780 | +void |
3781 | +foo (void) |
3782 | +{ |
3783 | + i = v; |
3784 | +} |
3785 | + |
3786 | +int |
3787 | +main (void) |
3788 | +{ |
3789 | + foo (); |
3790 | + return 0; |
3791 | +} |
3792 | + |
3793 | +/* { dg-final { scan-tree-dump-not "i = 1;" "optimized" } } */ |
3794 | +/* { dg-final { cleanup-tree-dump "optimized" } } */ |
3795 | |
3796 | === added file 'gcc/testsuite/gcc.dg/pr47899.c' |
3797 | --- gcc/testsuite/gcc.dg/pr47899.c 1970-01-01 00:00:00 +0000 |
3798 | +++ gcc/testsuite/gcc.dg/pr47899.c 2011-04-28 16:44:05 +0000 |
3799 | @@ -0,0 +1,26 @@ |
3800 | +/* PR rtl-optimization/47899 */ |
3801 | +/* { dg-do compile } */ |
3802 | +/* { dg-options "-O -funroll-loops" } */ |
3803 | + |
3804 | +extern unsigned int a, b, c; |
3805 | +extern int d; |
3806 | + |
3807 | +static int |
3808 | +foo (void) |
3809 | +{ |
3810 | +lab: |
3811 | + if (b) |
3812 | + for (d = 0; d >= 0; d--) |
3813 | + if (a || c) |
3814 | + for (; c; c++) |
3815 | + ; |
3816 | + else |
3817 | + goto lab; |
3818 | +} |
3819 | + |
3820 | +int |
3821 | +main () |
3822 | +{ |
3823 | + foo (); |
3824 | + return 0; |
3825 | +} |
3826 | |
3827 | === added file 'gcc/testsuite/gcc.dg/pr48141.c' |
3828 | --- gcc/testsuite/gcc.dg/pr48141.c 1970-01-01 00:00:00 +0000 |
3829 | +++ gcc/testsuite/gcc.dg/pr48141.c 2011-04-28 16:44:05 +0000 |
3830 | @@ -0,0 +1,17 @@ |
3831 | +/* PR rtl-optimization/48141 */ |
3832 | +/* { dg-do compile } */ |
3833 | +/* { dg-options "-O -fno-tree-fre" } */ |
3834 | + |
3835 | +#define A i = 0; |
3836 | +#define B A A A A A A A A A A |
3837 | +#define C B B B B B B B B B B |
3838 | +#define D C C C C C C C C C C |
3839 | +#define E D D D D D D D D D D |
3840 | + |
3841 | +int |
3842 | +foo (void) |
3843 | +{ |
3844 | + volatile int i = 0; |
3845 | + E E E E E E E E E E E |
3846 | + return 0; |
3847 | +} |
3848 | |
3849 | === added file 'gcc/testsuite/gcc.dg/pr48144.c' |
3850 | --- gcc/testsuite/gcc.dg/pr48144.c 1970-01-01 00:00:00 +0000 |
3851 | +++ gcc/testsuite/gcc.dg/pr48144.c 2011-04-28 16:44:05 +0000 |
3852 | @@ -0,0 +1,16 @@ |
3853 | +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ |
3854 | +/* { 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" } */ |
3855 | +extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n); |
3856 | + |
3857 | +void bar (void *, void *, void *); |
3858 | + |
3859 | +void foo |
3860 | + (void *p, char *data, unsigned data_len) |
3861 | +{ |
3862 | + int buffer[8]; |
3863 | + int buf2[8]; |
3864 | + unsigned i; |
3865 | + for (i = 0; i + 8 <= data_len; i += 8) |
3866 | + bar (p, buffer, data + i); |
3867 | + memcpy (buf2, data + i, data_len); |
3868 | +} |
3869 | |
3870 | === added file 'gcc/testsuite/gcc.dg/torture/pr47473.c' |
3871 | --- gcc/testsuite/gcc.dg/torture/pr47473.c 1970-01-01 00:00:00 +0000 |
3872 | +++ gcc/testsuite/gcc.dg/torture/pr47473.c 2011-04-28 16:44:05 +0000 |
3873 | @@ -0,0 +1,14 @@ |
3874 | +/* PR c/47473 */ |
3875 | +/* { dg-do run } */ |
3876 | +/* { dg-options "-std=c99" } */ |
3877 | + |
3878 | +int |
3879 | +main (void) |
3880 | +{ |
3881 | + long double _Complex w = 0.2L - 0.3iL; |
3882 | + w = w * (0.3L - (0.0F + 1.0iF) * 0.9L); |
3883 | + if (__builtin_fabsl (__real__ w + 0.21L) > 0.001L |
3884 | + || __builtin_fabsl (__imag__ w + 0.27L) > 0.001L) |
3885 | + __builtin_abort (); |
3886 | + return 0; |
3887 | +} |
3888 | |
3889 | === added file 'gcc/testsuite/gcc.dg/tree-prof/pr45354.c' |
3890 | --- gcc/testsuite/gcc.dg/tree-prof/pr45354.c 1970-01-01 00:00:00 +0000 |
3891 | +++ gcc/testsuite/gcc.dg/tree-prof/pr45354.c 2011-04-28 16:44:05 +0000 |
3892 | @@ -0,0 +1,43 @@ |
3893 | +/* { dg-require-effective-target freorder } */ |
3894 | +/* { dg-options "-O -freorder-blocks-and-partition -fschedule-insns -fselective-scheduling" { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ |
3895 | + |
3896 | +extern void abort (void); |
3897 | + |
3898 | +int ifelse_val2; |
3899 | + |
3900 | +int __attribute__((noinline)) |
3901 | +test_ifelse2 (int i) |
3902 | +{ |
3903 | + int result = 0; |
3904 | + if (!i) /* count(6) */ |
3905 | + result = 1; /* count(1) */ |
3906 | + if (i == 1) /* count(6) */ |
3907 | + result = 1024; |
3908 | + if (i == 2) /* count(6) */ |
3909 | + result = 2; /* count(3) */ |
3910 | + if (i == 3) /* count(6) */ |
3911 | + return 8; /* count(2) */ |
3912 | + if (i == 4) /* count(4) */ |
3913 | + return 2048; |
3914 | + return result; /* count(4) */ |
3915 | +} |
3916 | + |
3917 | +void __attribute__((noinline)) |
3918 | +call_ifelse () |
3919 | +{ |
3920 | + ifelse_val2 += test_ifelse2 (0); |
3921 | + ifelse_val2 += test_ifelse2 (2); |
3922 | + ifelse_val2 += test_ifelse2 (2); |
3923 | + ifelse_val2 += test_ifelse2 (2); |
3924 | + ifelse_val2 += test_ifelse2 (3); |
3925 | + ifelse_val2 += test_ifelse2 (3); |
3926 | +} |
3927 | + |
3928 | +int |
3929 | +main() |
3930 | +{ |
3931 | + call_ifelse (); |
3932 | + if (ifelse_val2 != 23) |
3933 | + abort (); |
3934 | + return 0; |
3935 | +} |
3936 | |
3937 | === modified file 'gcc/testsuite/gcc.dg/ucnid-10.c' |
3938 | --- gcc/testsuite/gcc.dg/ucnid-10.c 2009-05-04 19:24:22 +0000 |
3939 | +++ gcc/testsuite/gcc.dg/ucnid-10.c 2011-04-28 16:44:05 +0000 |
3940 | @@ -2,6 +2,7 @@ |
3941 | locale). Test #pragma pack diagnostics. */ |
3942 | /* { dg-do compile { target *-*-linux* *-*-cygwin* powerpc*-*-eabi* } } */ |
3943 | /* { dg-options "-std=gnu99 -fextended-identifiers" } */ |
3944 | +/* { dg-require-ascii-locale "" } */ |
3945 | |
3946 | #pragma pack(push) |
3947 | #pragma pack(pop, \u00f3) /* { dg-warning "pop, \\\\U000000f3.*push, \\\\U000000f3" } */ |
3948 | |
3949 | === modified file 'gcc/testsuite/gcc.dg/ucnid-13.c' |
3950 | --- gcc/testsuite/gcc.dg/ucnid-13.c 2009-05-04 22:44:36 +0000 |
3951 | +++ gcc/testsuite/gcc.dg/ucnid-13.c 2011-04-28 16:44:05 +0000 |
3952 | @@ -2,6 +2,7 @@ |
3953 | locale). Miscellaneous diagnostics. */ |
3954 | /* { dg-do compile } */ |
3955 | /* { dg-options "-std=gnu99 -fextended-identifiers -Wpacked" } */ |
3956 | +/* { dg-require-ascii-locale "" } */ |
3957 | |
3958 | int a __attribute__((\u00c0)); /* { dg-warning "'\\\\U000000c0' attribute directive ignored" } */ |
3959 | |
3960 | |
3961 | === modified file 'gcc/testsuite/gcc.dg/ucnid-7.c' |
3962 | --- gcc/testsuite/gcc.dg/ucnid-7.c 2009-05-04 11:23:50 +0000 |
3963 | +++ gcc/testsuite/gcc.dg/ucnid-7.c 2011-04-28 16:44:05 +0000 |
3964 | @@ -2,6 +2,7 @@ |
3965 | locale). */ |
3966 | /* { dg-do compile } */ |
3967 | /* { dg-options "-std=c99 -fextended-identifiers" } */ |
3968 | +/* { dg-require-ascii-locale "" } */ |
3969 | |
3970 | void *p = &\u00e9; /* { dg-error "'\\\\U000000e9' undeclared" } */ |
3971 | void *q = &\u1e00; /* { dg-error "'\\\\U00001e00' undeclared" } */ |
3972 | |
3973 | === modified file 'gcc/testsuite/gcc.dg/ucnid-8.c' |
3974 | --- gcc/testsuite/gcc.dg/ucnid-8.c 2009-05-04 19:24:22 +0000 |
3975 | +++ gcc/testsuite/gcc.dg/ucnid-8.c 2011-04-28 16:44:05 +0000 |
3976 | @@ -2,6 +2,7 @@ |
3977 | locale). Further tests of C front-end diagnostics. */ |
3978 | /* { dg-do compile } */ |
3979 | /* { dg-options "-std=gnu99 -fextended-identifiers -Wvla" } */ |
3980 | +/* { dg-require-ascii-locale "" } */ |
3981 | |
3982 | int a __attribute__((__mode__(\u00e9))); /* { dg-error "unknown machine mode '\\\\U000000e9'" } */ |
3983 | struct s1 { int \u00e9 : 0; }; /* { dg-error "zero width for bit-field '\\\\U000000e9'" } */ |
3984 | @@ -11,4 +12,4 @@ |
3985 | void g (static int \u00e9); /* { dg-error "storage class specified for parameter '\\\\U000000e9'" } */ |
3986 | |
3987 | struct s2 { int \u00e1; } \u00e9 = { { 0 } }; /* { dg-warning "braces around scalar initializer" } */ |
3988 | -/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 13 } */ |
3989 | +/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 14 } */ |
3990 | |
3991 | === added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c' |
3992 | --- gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 1970-01-01 00:00:00 +0000 |
3993 | +++ gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 2011-04-28 16:44:05 +0000 |
3994 | @@ -0,0 +1,8 @@ |
3995 | +/* { dg-do run { target ilp32 } } */ |
3996 | +/* { dg-require-effective-target avx } */ |
3997 | +/* { dg-options "-O2 -mfpmath=sse -mavx -mtune=geode" } */ |
3998 | + |
3999 | +#define CHECK_H "avx-check.h" |
4000 | +#define TEST avx_test |
4001 | + |
4002 | +#include "sse4_1-insertps-3.c" |
4003 | |
4004 | === added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c' |
4005 | --- gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 1970-01-01 00:00:00 +0000 |
4006 | +++ gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 2011-04-28 16:44:05 +0000 |
4007 | @@ -0,0 +1,8 @@ |
4008 | +/* { dg-do run } */ |
4009 | +/* { dg-require-effective-target avx } */ |
4010 | +/* { dg-options "-O2 -mfpmath=sse -mavx" } */ |
4011 | + |
4012 | +#define CHECK_H "avx-check.h" |
4013 | +#define TEST avx_test |
4014 | + |
4015 | +#include "sse4_1-insertps-4.c" |
4016 | |
4017 | === added file 'gcc/testsuite/gcc.target/i386/pr45352-1.c' |
4018 | --- gcc/testsuite/gcc.target/i386/pr45352-1.c 1970-01-01 00:00:00 +0000 |
4019 | +++ gcc/testsuite/gcc.target/i386/pr45352-1.c 2011-04-28 16:44:05 +0000 |
4020 | @@ -0,0 +1,19 @@ |
4021 | +/* { dg-do compile } */ |
4022 | +/* { dg-options "-mtune=amdfam10 -O3 -fpeel-loops -fselective-scheduling2 -fsel-sched-pipelining -fPIC" } */ |
4023 | + |
4024 | +static int FIR_Tab_16[16][16]; |
4025 | + |
4026 | +void |
4027 | +V_Pass_Avrg_16_C_ref (int *Dst, int *Src, int W, int BpS, int Rnd) |
4028 | +{ |
4029 | + while (W-- > 0) |
4030 | + { |
4031 | + int i, k; |
4032 | + int Sums[16] = { }; |
4033 | + for (i = 0; i < 16; ++i) |
4034 | + for (k = 0; k < 16; ++k) |
4035 | + Sums[k] += FIR_Tab_16[i][k] * Src[i]; |
4036 | + for (i = 0; i < 16; ++i) |
4037 | + Dst[i] = Sums[i] + Src[i]; |
4038 | + } |
4039 | +} |
4040 | |
4041 | === added file 'gcc/testsuite/gcc.target/i386/pr45352-2.c' |
4042 | --- gcc/testsuite/gcc.target/i386/pr45352-2.c 1970-01-01 00:00:00 +0000 |
4043 | +++ gcc/testsuite/gcc.target/i386/pr45352-2.c 2011-04-28 16:44:05 +0000 |
4044 | @@ -0,0 +1,109 @@ |
4045 | +/* { dg-do compile } */ |
4046 | +/* { 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" } */ |
4047 | + |
4048 | +typedef char uint8_t; |
4049 | +typedef uint32_t; |
4050 | +typedef vo_frame_t; |
4051 | +struct vo_frame_s |
4052 | +{ |
4053 | + uint8_t base[3]; |
4054 | + int pitches[3];}; |
4055 | +typedef struct |
4056 | +{ |
4057 | +void |
4058 | + (*proc_macro_block) |
4059 | + (void); |
4060 | +} |
4061 | +xine_xvmc_t; |
4062 | +typedef struct |
4063 | +{ |
4064 | + uint8_t ref[2][3]; |
4065 | +int pmv; |
4066 | +} |
4067 | +motion_t; |
4068 | +typedef struct |
4069 | +{ |
4070 | + uint32_t bitstream_buf; |
4071 | + int bitstream_bits; |
4072 | + uint8_t * bitstream_ptr; |
4073 | + uint8_t dest[3]; |
4074 | + int pitches[3]; |
4075 | + int offset; |
4076 | + motion_t b_motion; |
4077 | + motion_t f_motion; |
4078 | + int v_offset; |
4079 | + int coded_picture_width; |
4080 | + int picture_structure; |
4081 | +struct vo_frame_s *current_frame;} |
4082 | +picture_t; |
4083 | +typedef struct |
4084 | +{ |
4085 | +int xvmc_last_slice_code;} |
4086 | +mpeg2dec_accel_t; |
4087 | +static int bitstream_init (picture_t * picture, void *start) |
4088 | +{ |
4089 | + picture->bitstream_ptr = start; |
4090 | + return (int) (long) start; |
4091 | +} |
4092 | +static slice_xvmc_init (picture_t * picture, int code) |
4093 | +{ |
4094 | + int offset; |
4095 | + struct vo_frame_s *forward_reference_frame; |
4096 | + offset = picture->picture_structure == 2; |
4097 | + picture->pitches[0] = picture->current_frame->pitches[0]; |
4098 | + picture->pitches[1] = picture->current_frame->pitches[1]; |
4099 | + if (picture) |
4100 | + picture->f_motion.ref |
4101 | + [0] |
4102 | + [0] |
4103 | + = (char) (long) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0)); |
4104 | + picture->f_motion.ref[0][1] = (offset); |
4105 | + if (picture->picture_structure) |
4106 | + picture->pitches[0] <<= picture->pitches[1] <<= 1; |
4107 | + offset = 0; |
4108 | + while (1) |
4109 | + { |
4110 | + if (picture->bitstream_buf >= 0x08000000) |
4111 | + break; |
4112 | + switch (picture->bitstream_buf >> 12) |
4113 | + { |
4114 | + case 8: |
4115 | + offset += 33; |
4116 | + picture->bitstream_buf |
4117 | + |= |
4118 | + picture->bitstream_ptr[1] << picture->bitstream_bits; |
4119 | + } |
4120 | + } |
4121 | + picture->offset = (offset); |
4122 | + while (picture->offset - picture->coded_picture_width >= 0) |
4123 | + { |
4124 | + picture->offset -= picture->coded_picture_width; |
4125 | + if (picture->current_frame) |
4126 | + { |
4127 | + picture->dest[0] += picture->pitches[0]; |
4128 | + picture->dest[1] += picture->pitches[1]; |
4129 | + } |
4130 | + picture->v_offset += 16; |
4131 | + } |
4132 | +} |
4133 | + |
4134 | +void |
4135 | +mpeg2_xvmc_slice |
4136 | + (mpeg2dec_accel_t * accel, picture_t * picture, int code, uint8_t buffer,int mba_inc) |
4137 | +{ |
4138 | + xine_xvmc_t * xvmc = (xine_xvmc_t *) (long) bitstream_init (picture, (void *) (long) buffer); |
4139 | + slice_xvmc_init (picture, code); |
4140 | + while (1) |
4141 | + { |
4142 | + if (picture) |
4143 | + break; |
4144 | + switch (picture->bitstream_buf) |
4145 | + { |
4146 | + case 8: |
4147 | + mba_inc += accel->xvmc_last_slice_code = code; |
4148 | + xvmc->proc_macro_block (); |
4149 | + while (mba_inc) |
4150 | + ; |
4151 | + } |
4152 | + } |
4153 | +} |
4154 | |
4155 | === added file 'gcc/testsuite/gcc.target/i386/pr45352.c' |
4156 | --- gcc/testsuite/gcc.target/i386/pr45352.c 1970-01-01 00:00:00 +0000 |
4157 | +++ gcc/testsuite/gcc.target/i386/pr45352.c 2011-04-28 16:44:05 +0000 |
4158 | @@ -0,0 +1,25 @@ |
4159 | +/* { dg-do compile } */ |
4160 | +/* { dg-options "-O3 -march=amdfam10 -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */ |
4161 | + |
4162 | +struct S |
4163 | +{ |
4164 | + struct |
4165 | + { |
4166 | + int i; |
4167 | + } **p; |
4168 | + int x; |
4169 | + int y; |
4170 | +}; |
4171 | + |
4172 | +extern int baz (void); |
4173 | +extern int bar (void *, int, int); |
4174 | + |
4175 | +void |
4176 | +foo (struct S *s) |
4177 | +{ |
4178 | + int i; |
4179 | + for (i = 0; i < s->x; i++) |
4180 | + bar (s->p[i], baz (), s->y); |
4181 | + for (i = 0; i < s->x; i++) |
4182 | + s->p[i]->i++; |
4183 | +} |
4184 | |
4185 | === added file 'gcc/testsuite/gcc.target/i386/pr47809.c' |
4186 | --- gcc/testsuite/gcc.target/i386/pr47809.c 1970-01-01 00:00:00 +0000 |
4187 | +++ gcc/testsuite/gcc.target/i386/pr47809.c 2011-04-28 16:44:05 +0000 |
4188 | @@ -0,0 +1,13 @@ |
4189 | +/* PR c/47809 */ |
4190 | +/* { dg-do compile } */ |
4191 | +/* { dg-options "-O2 -msse2" } */ |
4192 | + |
4193 | +#include <emmintrin.h> |
4194 | +double bar (double, double); |
4195 | + |
4196 | +__m128d |
4197 | +foo (__m128d x) |
4198 | +{ |
4199 | + x *= (__m128d) { bar (1.0, 1.0), 0.0 }; |
4200 | + return (__m128d) ((__m128i) x ^ (__m128i) { 0, 0}); |
4201 | +} |
4202 | |
4203 | === added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c' |
4204 | --- gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 1970-01-01 00:00:00 +0000 |
4205 | +++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 2011-04-28 16:44:05 +0000 |
4206 | @@ -0,0 +1,5 @@ |
4207 | +/* { dg-do run { target ilp32 } } */ |
4208 | +/* { dg-require-effective-target sse4 } */ |
4209 | +/* { dg-options "-O2 -msse4.1 -mtune=geode" } */ |
4210 | + |
4211 | +#include "sse4_1-insertps-2.c" |
4212 | |
4213 | === added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c' |
4214 | --- gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 1970-01-01 00:00:00 +0000 |
4215 | +++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 2011-04-28 16:44:05 +0000 |
4216 | @@ -0,0 +1,92 @@ |
4217 | +/* { dg-do run } */ |
4218 | +/* { dg-require-effective-target sse4 } */ |
4219 | +/* { dg-options "-O2 -msse4.1" } */ |
4220 | + |
4221 | +#ifndef CHECK_H |
4222 | +#define CHECK_H "sse4_1-check.h" |
4223 | +#endif |
4224 | + |
4225 | +#ifndef TEST |
4226 | +#define TEST sse4_1_test |
4227 | +#endif |
4228 | + |
4229 | +#include CHECK_H |
4230 | + |
4231 | +#include <smmintrin.h> |
4232 | +#include <string.h> |
4233 | + |
4234 | +#define msk0 0x41 |
4235 | +#define msk1 0x90 |
4236 | +#define msk2 0xe9 |
4237 | +#define msk3 0x70 |
4238 | + |
4239 | +#define msk4 0xFC |
4240 | +#define msk5 0x05 |
4241 | +#define msk6 0x0A |
4242 | +#define msk7 0x0F |
4243 | + |
4244 | +union |
4245 | + { |
4246 | + __m128 x; |
4247 | + float f[4]; |
4248 | + } val1; |
4249 | + |
4250 | +static void |
4251 | +TEST (void) |
4252 | +{ |
4253 | + union |
4254 | + { |
4255 | + __m128 x; |
4256 | + float f[4]; |
4257 | + } res[8], val2, tmp; |
4258 | + int masks[8]; |
4259 | + int i, j; |
4260 | + |
4261 | + val2.f[0] = 55.0; |
4262 | + val2.f[1] = 55.0; |
4263 | + val2.f[2] = 55.0; |
4264 | + val2.f[3] = 55.0; |
4265 | + |
4266 | + val1.f[0] = 1.; |
4267 | + val1.f[1] = 2.; |
4268 | + val1.f[2] = 3.; |
4269 | + val1.f[3] = 4.; |
4270 | + |
4271 | + asm volatile ("" : "+m" (val1)); |
4272 | + res[0].x = _mm_insert_ps (val2.x, val1.x, msk0); |
4273 | + asm volatile ("" : "+m" (val1)); |
4274 | + res[1].x = _mm_insert_ps (val2.x, val1.x, msk1); |
4275 | + asm volatile ("" : "+m" (val1)); |
4276 | + res[2].x = _mm_insert_ps (val2.x, val1.x, msk2); |
4277 | + asm volatile ("" : "+m" (val1)); |
4278 | + res[3].x = _mm_insert_ps (val2.x, val1.x, msk3); |
4279 | + |
4280 | + masks[0] = msk0; |
4281 | + masks[1] = msk1; |
4282 | + masks[2] = msk2; |
4283 | + masks[3] = msk3; |
4284 | + |
4285 | + for (i = 0; i < 4; i++) |
4286 | + { |
4287 | + asm volatile ("" : "+m" (val1)); |
4288 | + res[i + 4].x = _mm_insert_ps (val2.x, val1.x, msk4); |
4289 | + } |
4290 | + |
4291 | + masks[4] = msk4; |
4292 | + masks[5] = msk4; |
4293 | + masks[6] = msk4; |
4294 | + masks[7] = msk4; |
4295 | + |
4296 | + for (i=0; i < 8; i++) |
4297 | + { |
4298 | + tmp = val2; |
4299 | + tmp.f[(masks[i] & 0x30) >> 4] = val1.f[(masks[i] & 0xC0) >> 6]; |
4300 | + |
4301 | + for (j = 0; j < 4; j++) |
4302 | + if (masks[i] & (0x1 << j)) |
4303 | + tmp.f[j] = 0.f; |
4304 | + |
4305 | + if (memcmp (&res[i], &tmp, sizeof (tmp))) |
4306 | + abort (); |
4307 | + } |
4308 | +} |
4309 | |
4310 | === added file 'gcc/testsuite/gcc.target/ia64/pr43603.c' |
4311 | --- gcc/testsuite/gcc.target/ia64/pr43603.c 1970-01-01 00:00:00 +0000 |
4312 | +++ gcc/testsuite/gcc.target/ia64/pr43603.c 2011-04-28 16:44:05 +0000 |
4313 | @@ -0,0 +1,39 @@ |
4314 | +/* { dg-do compile } */ |
4315 | +/* { dg-options "-O3" } */ |
4316 | + |
4317 | +int |
4318 | +foo( long * np, int * dp, int qn) |
4319 | +{ |
4320 | + int i; |
4321 | + int n0; |
4322 | + int d0; |
4323 | + int a; |
4324 | + int b; |
4325 | + int c; |
4326 | + int d; |
4327 | + |
4328 | + a = 1; |
4329 | + b = 0; |
4330 | + c = 1; |
4331 | + d = 1; |
4332 | + |
4333 | + d0 = dp[0]; |
4334 | + |
4335 | + for (i = qn; i >= 0; i--) { |
4336 | + if (bar((c == 0)) && (np[1] == d0)) { |
4337 | + car(np - 3, dp, 3); |
4338 | + } else { |
4339 | + __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" : "=&f" ((a)), |
4340 | +"=f" (b) : "f" ((c)), "f" ((d))); |
4341 | + n0 = np[0]; |
4342 | + if (n0 < d0) |
4343 | + c = 1; |
4344 | + else |
4345 | + c = 0; |
4346 | + |
4347 | + } |
4348 | + *--np = a; |
4349 | + } |
4350 | + |
4351 | + return 0; |
4352 | +} |
4353 | |
4354 | === added file 'gcc/testsuite/gfortran.dg/gomp/pr48117.f90' |
4355 | --- gcc/testsuite/gfortran.dg/gomp/pr48117.f90 1970-01-01 00:00:00 +0000 |
4356 | +++ gcc/testsuite/gfortran.dg/gomp/pr48117.f90 2011-04-28 16:44:05 +0000 |
4357 | @@ -0,0 +1,11 @@ |
4358 | +! PR fortran/48117 |
4359 | +! { dg-do compile } |
4360 | +! { dg-options "-O2 -fopenmp" } |
4361 | + |
4362 | +subroutine foo(x) |
4363 | + character(len=*), optional :: x |
4364 | + character(len=80) :: v |
4365 | + !$omp master |
4366 | + if (present(x)) v = adjustl(x) |
4367 | + !$omp end master |
4368 | +end subroutine foo |
4369 | |
4370 | === modified file 'gcc/testsuite/lib/target-supports-dg.exp' |
4371 | --- gcc/testsuite/lib/target-supports-dg.exp 2010-05-19 15:52:49 +0000 |
4372 | +++ gcc/testsuite/lib/target-supports-dg.exp 2011-04-28 16:44:05 +0000 |
4373 | @@ -1,5 +1,5 @@ |
4374 | -# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010 |
4375 | -# Free Software Foundation, Inc. |
4376 | +# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010, |
4377 | +# 2011 Free Software Foundation, Inc. |
4378 | |
4379 | # This program is free software; you can redistribute it and/or modify |
4380 | # it under the terms of the GNU General Public License as published by |
4381 | @@ -128,6 +128,15 @@ |
4382 | set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] |
4383 | } |
4384 | |
4385 | +# If this host does not support an ASCII locale, skip this test. |
4386 | + |
4387 | +proc dg-require-ascii-locale { args } { |
4388 | + if { ![ check_ascii_locale_available] } { |
4389 | + upvar dg-do-what dg-do-what |
4390 | + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] |
4391 | + } |
4392 | +} |
4393 | + |
4394 | proc dg-require-iconv { args } { |
4395 | if { ![ check_iconv_available ${args} ] } { |
4396 | upvar dg-do-what dg-do-what |
4397 | |
4398 | === modified file 'gcc/testsuite/lib/target-supports.exp' |
4399 | --- gcc/testsuite/lib/target-supports.exp 2011-02-22 11:38:56 +0000 |
4400 | +++ gcc/testsuite/lib/target-supports.exp 2011-04-28 16:44:05 +0000 |
4401 | @@ -850,6 +850,17 @@ |
4402 | }] $libiconv] |
4403 | } |
4404 | |
4405 | +# Return 1 if an ASCII locale is supported on this host, 0 otherwise. |
4406 | + |
4407 | +proc check_ascii_locale_available { } { |
4408 | + if { ([ishost alpha*-dec-osf*] || [ishost mips-sgi-irix*]) } { |
4409 | + # Neither Tru64 UNIX nor IRIX support an ASCII locale. |
4410 | + return 0 |
4411 | + } else { |
4412 | + return 1 |
4413 | + } |
4414 | +} |
4415 | + |
4416 | # Return true if named sections are supported on this target. |
4417 | |
4418 | proc check_named_sections_available { } { |
4419 | |
4420 | === modified file 'gcc/tree-eh.c' |
4421 | --- gcc/tree-eh.c 2010-10-07 13:36:18 +0000 |
4422 | +++ gcc/tree-eh.c 2011-04-28 16:44:05 +0000 |
4423 | @@ -1,5 +1,5 @@ |
4424 | /* Exception handling semantics and decomposition for trees. |
4425 | - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
4426 | + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
4427 | Free Software Foundation, Inc. |
4428 | |
4429 | This file is part of GCC. |
4430 | @@ -3688,6 +3688,42 @@ |
4431 | return false; |
4432 | } |
4433 | |
4434 | +/* Return true if edge E_FIRST is part of an empty infinite loop |
4435 | + or leads to such a loop through a series of single successor |
4436 | + empty bbs. */ |
4437 | + |
4438 | +static bool |
4439 | +infinite_empty_loop_p (edge e_first) |
4440 | +{ |
4441 | + bool inf_loop = false; |
4442 | + edge e; |
4443 | + |
4444 | + if (e_first->dest == e_first->src) |
4445 | + return true; |
4446 | + |
4447 | + e_first->src->aux = (void *) 1; |
4448 | + for (e = e_first; single_succ_p (e->dest); e = single_succ_edge (e->dest)) |
4449 | + { |
4450 | + gimple_stmt_iterator gsi; |
4451 | + if (e->dest->aux) |
4452 | + { |
4453 | + inf_loop = true; |
4454 | + break; |
4455 | + } |
4456 | + e->dest->aux = (void *) 1; |
4457 | + gsi = gsi_after_labels (e->dest); |
4458 | + if (!gsi_end_p (gsi) && is_gimple_debug (gsi_stmt (gsi))) |
4459 | + gsi_next_nondebug (&gsi); |
4460 | + if (!gsi_end_p (gsi)) |
4461 | + break; |
4462 | + } |
4463 | + e_first->src->aux = NULL; |
4464 | + for (e = e_first; e->dest->aux; e = single_succ_edge (e->dest)) |
4465 | + e->dest->aux = NULL; |
4466 | + |
4467 | + return inf_loop; |
4468 | +} |
4469 | + |
4470 | /* Examine the block associated with LP to determine if it's an empty |
4471 | handler for its EH region. If so, attempt to redirect EH edges to |
4472 | an outer region. Return true the CFG was updated in any way. This |
4473 | @@ -3727,7 +3763,7 @@ |
4474 | if (gsi_end_p (gsi)) |
4475 | { |
4476 | /* For the degenerate case of an infinite loop bail out. */ |
4477 | - if (e_out->dest == bb) |
4478 | + if (infinite_empty_loop_p (e_out)) |
4479 | return false; |
4480 | |
4481 | return cleanup_empty_eh_unsplit (bb, e_out, lp); |
4482 | |
4483 | === modified file 'gcc/tree-ssa-ccp.c' |
4484 | --- gcc/tree-ssa-ccp.c 2011-02-22 11:38:56 +0000 |
4485 | +++ gcc/tree-ssa-ccp.c 2011-04-28 16:44:05 +0000 |
4486 | @@ -277,7 +277,7 @@ |
4487 | get_symbol_constant_value (tree sym) |
4488 | { |
4489 | if (TREE_STATIC (sym) |
4490 | - && (TREE_READONLY (sym) |
4491 | + && ((TREE_READONLY (sym) && !TREE_THIS_VOLATILE (sym)) |
4492 | || TREE_CODE (sym) == CONST_DECL)) |
4493 | { |
4494 | tree val = DECL_INITIAL (sym); |
4495 | |
4496 | === modified file 'gcc/tree.c' |
4497 | --- gcc/tree.c 2011-04-06 12:29:08 +0000 |
4498 | +++ gcc/tree.c 2011-04-28 16:44:05 +0000 |
4499 | @@ -2337,6 +2337,10 @@ |
4500 | min = TYPE_MIN_VALUE (index_type); |
4501 | max = TYPE_MAX_VALUE (index_type); |
4502 | |
4503 | + /* TYPE_MAX_VALUE may not be set if the array has unknown length. */ |
4504 | + if (!max) |
4505 | + return error_mark_node; |
4506 | + |
4507 | return (integer_zerop (min) |
4508 | ? max |
4509 | : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min)); |
4510 | |
4511 | === modified file 'gnattools/ChangeLog' |
4512 | --- gnattools/ChangeLog 2010-12-16 12:30:12 +0000 |
4513 | +++ gnattools/ChangeLog 2011-04-28 16:44:05 +0000 |
4514 | @@ -1,3 +1,7 @@ |
4515 | +2011-04-28 Release Manager |
4516 | + |
4517 | + * GCC 4.5.3 released. |
4518 | + |
4519 | 2010-12-16 Release Manager |
4520 | |
4521 | * GCC 4.5.2 released. |
4522 | |
4523 | === modified file 'include/ChangeLog' |
4524 | --- include/ChangeLog 2010-12-16 12:30:40 +0000 |
4525 | +++ include/ChangeLog 2011-04-28 16:44:05 +0000 |
4526 | @@ -1,3 +1,7 @@ |
4527 | +2011-04-28 Release Manager |
4528 | + |
4529 | + * GCC 4.5.3 released. |
4530 | + |
4531 | 2010-12-16 Release Manager |
4532 | |
4533 | * GCC 4.5.2 released. |
4534 | |
4535 | === modified file 'intl/ChangeLog' |
4536 | --- intl/ChangeLog 2010-12-16 12:30:17 +0000 |
4537 | +++ intl/ChangeLog 2011-04-28 16:44:05 +0000 |
4538 | @@ -1,3 +1,7 @@ |
4539 | +2011-04-28 Release Manager |
4540 | + |
4541 | + * GCC 4.5.3 released. |
4542 | + |
4543 | 2010-12-16 Release Manager |
4544 | |
4545 | * GCC 4.5.2 released. |
4546 | |
4547 | === modified file 'libada/ChangeLog' |
4548 | --- libada/ChangeLog 2010-12-16 12:31:11 +0000 |
4549 | +++ libada/ChangeLog 2011-04-28 16:44:05 +0000 |
4550 | @@ -1,3 +1,7 @@ |
4551 | +2011-04-28 Release Manager |
4552 | + |
4553 | + * GCC 4.5.3 released. |
4554 | + |
4555 | 2010-12-16 Release Manager |
4556 | |
4557 | * GCC 4.5.2 released. |
4558 | |
4559 | === modified file 'libcpp/ChangeLog' |
4560 | --- libcpp/ChangeLog 2011-03-21 20:59:02 +0000 |
4561 | +++ libcpp/ChangeLog 2011-04-28 16:44:05 +0000 |
4562 | @@ -1,3 +1,17 @@ |
4563 | +2011-04-28 Release Manager |
4564 | + |
4565 | + * GCC 4.5.3 released. |
4566 | + |
4567 | +2011-04-26 Jakub Jelinek <jakub@redhat.com> |
4568 | + |
4569 | + Backported from mainline |
4570 | + 2011-04-24 Jakub Jelinek <jakub@redhat.com> |
4571 | + |
4572 | + PR preprocessor/48740 |
4573 | + * lex.c (lex_raw_string): When raw string ends with |
4574 | + ??) followed by raw prefix and ", ensure it is preprocessed |
4575 | + with ??) rather than ??]. |
4576 | + |
4577 | 2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com> |
4578 | |
4579 | PR preprocessor/48192 |
4580 | |
4581 | === modified file 'libcpp/lex.c' |
4582 | --- libcpp/lex.c 2010-04-06 06:02:40 +0000 |
4583 | +++ libcpp/lex.c 2011-04-28 16:44:05 +0000 |
4584 | @@ -858,7 +858,9 @@ |
4585 | raw_prefix_len) == 0 |
4586 | && cur[raw_prefix_len+1] == '"') |
4587 | { |
4588 | - cur += raw_prefix_len+2; |
4589 | + BUF_APPEND (")", 1); |
4590 | + base++; |
4591 | + cur += raw_prefix_len + 2; |
4592 | goto break_outer_loop; |
4593 | } |
4594 | else |
4595 | |
4596 | === modified file 'libcpp/po/ChangeLog' |
4597 | --- libcpp/po/ChangeLog 2010-12-16 12:31:00 +0000 |
4598 | +++ libcpp/po/ChangeLog 2011-04-28 16:44:05 +0000 |
4599 | @@ -1,3 +1,7 @@ |
4600 | +2011-04-28 Release Manager |
4601 | + |
4602 | + * GCC 4.5.3 released. |
4603 | + |
4604 | 2010-12-16 Release Manager |
4605 | |
4606 | * GCC 4.5.2 released. |
4607 | |
4608 | === modified file 'libdecnumber/ChangeLog' |
4609 | --- libdecnumber/ChangeLog 2010-12-16 12:29:40 +0000 |
4610 | +++ libdecnumber/ChangeLog 2011-04-28 16:44:05 +0000 |
4611 | @@ -1,3 +1,7 @@ |
4612 | +2011-04-28 Release Manager |
4613 | + |
4614 | + * GCC 4.5.3 released. |
4615 | + |
4616 | 2010-12-16 Release Manager |
4617 | |
4618 | * GCC 4.5.2 released. |
4619 | |
4620 | === modified file 'libffi/ChangeLog' |
4621 | --- libffi/ChangeLog 2011-02-09 14:40:15 +0000 |
4622 | +++ libffi/ChangeLog 2011-04-28 16:44:05 +0000 |
4623 | @@ -1,3 +1,7 @@ |
4624 | +2011-04-28 Release Manager |
4625 | + |
4626 | + * GCC 4.5.3 released. |
4627 | + |
4628 | 2011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
4629 | |
4630 | PR libffi/46661 |
4631 | |
4632 | === modified file 'libgcc/ChangeLog' |
4633 | --- libgcc/ChangeLog 2011-02-23 18:06:29 +0000 |
4634 | +++ libgcc/ChangeLog 2011-04-28 16:44:05 +0000 |
4635 | @@ -1,3 +1,7 @@ |
4636 | +2011-04-28 Release Manager |
4637 | + |
4638 | + * GCC 4.5.3 released. |
4639 | + |
4640 | 2011-02-23 Nathan Froyd <froydnj@codesourcery.com> |
4641 | |
4642 | PR target/43810 |
4643 | |
4644 | === modified file 'libgcc/config/libbid/ChangeLog' |
4645 | --- libgcc/config/libbid/ChangeLog 2010-12-16 12:32:07 +0000 |
4646 | +++ libgcc/config/libbid/ChangeLog 2011-04-28 16:44:05 +0000 |
4647 | @@ -1,3 +1,7 @@ |
4648 | +2011-04-28 Release Manager |
4649 | + |
4650 | + * GCC 4.5.3 released. |
4651 | + |
4652 | 2010-12-16 Release Manager |
4653 | |
4654 | * GCC 4.5.2 released. |
4655 | |
4656 | === modified file 'libgfortran/ChangeLog' |
4657 | --- libgfortran/ChangeLog 2011-03-13 20:57:49 +0000 |
4658 | +++ libgfortran/ChangeLog 2011-04-28 16:44:05 +0000 |
4659 | @@ -1,3 +1,7 @@ |
4660 | +2011-04-28 Release Manager |
4661 | + |
4662 | + * GCC 4.5.3 released. |
4663 | + |
4664 | 2011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org> |
4665 | |
4666 | PR libfortran/48066 |
4667 | |
4668 | === modified file 'libgomp/ChangeLog' |
4669 | --- libgomp/ChangeLog 2011-02-27 18:12:41 +0000 |
4670 | +++ libgomp/ChangeLog 2011-04-28 16:44:05 +0000 |
4671 | @@ -1,3 +1,7 @@ |
4672 | +2011-04-28 Release Manager |
4673 | + |
4674 | + * GCC 4.5.3 released. |
4675 | + |
4676 | 2011-02-27 Tobias Burnus <burnus@net-b.de> |
4677 | |
4678 | Backport from mainline |
4679 | |
4680 | === modified file 'libiberty/ChangeLog' |
4681 | --- libiberty/ChangeLog 2010-12-16 12:31:47 +0000 |
4682 | +++ libiberty/ChangeLog 2011-04-28 16:44:05 +0000 |
4683 | @@ -1,3 +1,7 @@ |
4684 | +2011-04-28 Release Manager |
4685 | + |
4686 | + * GCC 4.5.3 released. |
4687 | + |
4688 | 2010-12-16 Release Manager |
4689 | |
4690 | * GCC 4.5.2 released. |
4691 | |
4692 | === modified file 'libjava/ChangeLog' |
4693 | --- libjava/ChangeLog 2011-01-07 15:32:24 +0000 |
4694 | +++ libjava/ChangeLog 2011-04-28 16:44:05 +0000 |
4695 | @@ -1,3 +1,12 @@ |
4696 | +2011-04-28 Release Manager |
4697 | + |
4698 | + * GCC 4.5.3 released. |
4699 | + |
4700 | +2011-04-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
4701 | + |
4702 | + * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation): |
4703 | + Add $libiconv to cxxflags for alpha*-dec-osf*. |
4704 | + |
4705 | 2011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
4706 | |
4707 | Backport from mainline: |
4708 | |
4709 | === modified file 'libjava/classpath/ChangeLog' |
4710 | --- libjava/classpath/ChangeLog 2010-12-16 12:31:21 +0000 |
4711 | +++ libjava/classpath/ChangeLog 2011-04-28 16:44:05 +0000 |
4712 | @@ -1,3 +1,7 @@ |
4713 | +2011-04-28 Release Manager |
4714 | + |
4715 | + * GCC 4.5.3 released. |
4716 | + |
4717 | 2010-12-16 Release Manager |
4718 | |
4719 | * GCC 4.5.2 released. |
4720 | |
4721 | === modified file 'libjava/libltdl/ChangeLog' |
4722 | --- libjava/libltdl/ChangeLog 2010-12-16 12:31:26 +0000 |
4723 | +++ libjava/libltdl/ChangeLog 2011-04-28 16:44:05 +0000 |
4724 | @@ -1,3 +1,7 @@ |
4725 | +2011-04-28 Release Manager |
4726 | + |
4727 | + * GCC 4.5.3 released. |
4728 | + |
4729 | 2010-12-16 Release Manager |
4730 | |
4731 | * GCC 4.5.2 released. |
4732 | |
4733 | === modified file 'libjava/testsuite/libjava.jni/jni.exp' |
4734 | --- libjava/testsuite/libjava.jni/jni.exp 2011-01-07 15:32:24 +0000 |
4735 | +++ libjava/testsuite/libjava.jni/jni.exp 2011-04-28 16:44:05 +0000 |
4736 | @@ -280,6 +280,11 @@ |
4737 | lappend cxxflags "-shared-libgcc" |
4738 | } |
4739 | |
4740 | + # Tru64 UNIX needs -liconv linked explicitly since gcc does the linking. |
4741 | + if { [istarget "alpha*-dec-osf*"] } { |
4742 | + lappend cxxflags $libiconv |
4743 | + } |
4744 | + |
4745 | return $cxxflags |
4746 | } |
4747 | |
4748 | |
4749 | === modified file 'libmudflap/ChangeLog' |
4750 | --- libmudflap/ChangeLog 2010-12-16 12:31:51 +0000 |
4751 | +++ libmudflap/ChangeLog 2011-04-28 16:44:05 +0000 |
4752 | @@ -1,3 +1,7 @@ |
4753 | +2011-04-28 Release Manager |
4754 | + |
4755 | + * GCC 4.5.3 released. |
4756 | + |
4757 | 2010-12-16 Release Manager |
4758 | |
4759 | * GCC 4.5.2 released. |
4760 | |
4761 | === modified file 'libobjc/ChangeLog' |
4762 | --- libobjc/ChangeLog 2010-12-16 12:30:34 +0000 |
4763 | +++ libobjc/ChangeLog 2011-04-28 16:44:05 +0000 |
4764 | @@ -1,3 +1,7 @@ |
4765 | +2011-04-28 Release Manager |
4766 | + |
4767 | + * GCC 4.5.3 released. |
4768 | + |
4769 | 2010-12-16 Release Manager |
4770 | |
4771 | * GCC 4.5.2 released. |
4772 | |
4773 | === modified file 'libssp/ChangeLog' |
4774 | --- libssp/ChangeLog 2010-12-16 12:31:57 +0000 |
4775 | +++ libssp/ChangeLog 2011-04-28 16:44:05 +0000 |
4776 | @@ -1,3 +1,7 @@ |
4777 | +2011-04-28 Release Manager |
4778 | + |
4779 | + * GCC 4.5.3 released. |
4780 | + |
4781 | 2010-12-16 Release Manager |
4782 | |
4783 | * GCC 4.5.2 released. |
4784 | |
4785 | === modified file 'libstdc++-v3/ChangeLog' |
4786 | --- libstdc++-v3/ChangeLog 2011-03-21 13:41:37 +0000 |
4787 | +++ libstdc++-v3/ChangeLog 2011-04-28 16:44:05 +0000 |
4788 | @@ -1,3 +1,7 @@ |
4789 | +2011-04-28 Release Manager |
4790 | + |
4791 | + * GCC 4.5.3 released. |
4792 | + |
4793 | 2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> |
4794 | |
4795 | * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on |
4796 | |
4797 | === modified file 'lto-plugin/ChangeLog' |
4798 | --- lto-plugin/ChangeLog 2010-12-16 12:31:31 +0000 |
4799 | +++ lto-plugin/ChangeLog 2011-04-28 16:44:05 +0000 |
4800 | @@ -1,3 +1,7 @@ |
4801 | +2011-04-28 Release Manager |
4802 | + |
4803 | + * GCC 4.5.3 released. |
4804 | + |
4805 | 2010-12-16 Release Manager |
4806 | |
4807 | * GCC 4.5.2 released. |
4808 | |
4809 | === modified file 'maintainer-scripts/ChangeLog' |
4810 | --- maintainer-scripts/ChangeLog 2010-12-16 12:30:27 +0000 |
4811 | +++ maintainer-scripts/ChangeLog 2011-04-28 16:44:05 +0000 |
4812 | @@ -1,3 +1,7 @@ |
4813 | +2011-04-28 Release Manager |
4814 | + |
4815 | + * GCC 4.5.3 released. |
4816 | + |
4817 | 2010-12-16 Release Manager |
4818 | |
4819 | * GCC 4.5.2 released. |
4820 | |
4821 | === modified file 'zlib/ChangeLog' |
4822 | --- zlib/ChangeLog 2010-12-16 12:31:36 +0000 |
4823 | +++ zlib/ChangeLog 2011-04-28 16:44:05 +0000 |
4824 | @@ -1,3 +1,7 @@ |
4825 | +2011-04-28 Release Manager |
4826 | + |
4827 | + * GCC 4.5.3 released. |
4828 | + |
4829 | 2010-12-16 Release Manager |
4830 | |
4831 | * GCC 4.5.2 released. |
cbuild has taken a snapshot of this branch at r99503 and queued it for build.
The snapshot is available at: ex.seabright. co.nz/snapshots /gcc-linaro- 4.5+bzr99503~ ams-codesourcer y~merge- fsf-4.5. 3.tar.xdelta3. xz
http://
and will be built on the following builders:
a9-builder i686 x86_64
You can track the build queue at: ex.seabright. co.nz/helpers/ scheduler
http://
cbuild-snapshot: gcc-linaro- 4.5+bzr99503~ ams-codesourcer y~merge- fsf-4.5. 3
cbuild-ancestor: lp:gcc-linaro+bzr99502
cbuild-state: check