1 |
halcy0n 09/09/02 15:51:03 |
2 |
|
3 |
Modified: README.history |
4 |
Added: 92_all_gcc43-pr40105.patch |
5 |
Log: |
6 |
Add SH patch to 4.3.2 as well |
7 |
|
8 |
Revision Changes Path |
9 |
1.15 src/patchsets/gcc/4.3.2/gentoo/README.history |
10 |
|
11 |
file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/gcc/4.3.2/gentoo/README.history?rev=1.15&view=markup |
12 |
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/gcc/4.3.2/gentoo/README.history?rev=1.15&content-type=text/plain |
13 |
diff : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/gcc/4.3.2/gentoo/README.history?r1=1.14&r2=1.15 |
14 |
|
15 |
Index: README.history |
16 |
=================================================================== |
17 |
RCS file: /var/cvsroot/gentoo/src/patchsets/gcc/4.3.2/gentoo/README.history,v |
18 |
retrieving revision 1.14 |
19 |
retrieving revision 1.15 |
20 |
diff -u -r1.14 -r1.15 |
21 |
--- README.history 26 Apr 2009 18:17:59 -0000 1.14 |
22 |
+++ README.history 2 Sep 2009 15:51:03 -0000 1.15 |
23 |
@@ -1,3 +1,6 @@ |
24 |
+1.8 02.09.2009 |
25 |
+ + 92_all_gcc43-pr40105.patch |
26 |
+ |
27 |
1.7 26.04.2009 |
28 |
+ 67_all_gcc43-pr35964.patch |
29 |
+ 78_all_arm-PR37436.patch |
30 |
|
31 |
|
32 |
|
33 |
1.1 src/patchsets/gcc/4.3.2/gentoo/92_all_gcc43-pr40105.patch |
34 |
|
35 |
file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/gcc/4.3.2/gentoo/92_all_gcc43-pr40105.patch?rev=1.1&view=markup |
36 |
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/gcc/4.3.2/gentoo/92_all_gcc43-pr40105.patch?rev=1.1&content-type=text/plain |
37 |
|
38 |
Index: 92_all_gcc43-pr40105.patch |
39 |
=================================================================== |
40 |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40105 |
41 |
|
42 |
2009-05-21 Kaz Kojima <kkojima@×××××××.org> |
43 |
|
44 |
PR rtl-optimization/40105 |
45 |
Backport from mainline: |
46 |
|
47 |
2009-04-29 Eric Botcazou <ebotcazou@×××××××.com> |
48 |
Steven Bosscher <steven@×××××××.org> |
49 |
|
50 |
* Makefile.in (cfgrtl.o): Add $(INSN_ATTR_H). |
51 |
* cfgrtl.c: Include insn-attr.h. |
52 |
(rest_of_pass_free_cfg): New function. |
53 |
(pass_free_cfg): Use rest_of_pass_free_cfg as execute function. |
54 |
|
55 |
2009-04-27 Richard Sandiford <rdsandiford@××××××××××.com> |
56 |
Eric Botcazou <ebotcazou@×××××××.com> |
57 |
|
58 |
* resource.c (find_basic_block): Use BLOCK_FOR_INSN to look up |
59 |
a label's basic block. |
60 |
(mark_target_live_regs): Tidy and rework obsolete comments. |
61 |
Change back DF problem to LIVE. If a label starts a basic block, |
62 |
assume that all registers that used to be live then still are. |
63 |
(init_resource_info): If a label starts a basic block, set its |
64 |
BLOCK_FOR_INSN accordingly. |
65 |
(free_resource_info): Undo the setting of BLOCK_FOR_INSN. |
66 |
|
67 |
Index: gcc/resource.c |
68 |
=================================================================== |
69 |
--- gcc/resource.c (revision 147780) |
70 |
+++ gcc/resource.c (revision 147781) |
71 |
@@ -135,8 +135,6 @@ |
72 |
static int |
73 |
find_basic_block (rtx insn, int search_limit) |
74 |
{ |
75 |
- basic_block bb; |
76 |
- |
77 |
/* Scan backwards to the previous BARRIER. Then see if we can find a |
78 |
label that starts a basic block. Return the basic block number. */ |
79 |
for (insn = prev_nonnote_insn (insn); |
80 |
@@ -157,11 +155,8 @@ |
81 |
for (insn = next_nonnote_insn (insn); |
82 |
insn && LABEL_P (insn); |
83 |
insn = next_nonnote_insn (insn)) |
84 |
- { |
85 |
- FOR_EACH_BB (bb) |
86 |
- if (insn == BB_HEAD (bb)) |
87 |
- return bb->index; |
88 |
- } |
89 |
+ if (BLOCK_FOR_INSN (insn)) |
90 |
+ return BLOCK_FOR_INSN (insn)->index; |
91 |
|
92 |
return -1; |
93 |
} |
94 |
@@ -851,13 +846,12 @@ |
95 |
(with no intervening active insns) to see if any of them start a basic |
96 |
block. If we hit the start of the function first, we use block 0. |
97 |
|
98 |
- Once we have found a basic block and a corresponding first insns, we can |
99 |
- accurately compute the live status from basic_block_live_regs and |
100 |
- reg_renumber. (By starting at a label following a BARRIER, we are immune |
101 |
- to actions taken by reload and jump.) Then we scan all insns between |
102 |
- that point and our target. For each CLOBBER (or for call-clobbered regs |
103 |
- when we pass a CALL_INSN), mark the appropriate registers are dead. For |
104 |
- a SET, mark them as live. |
105 |
+ Once we have found a basic block and a corresponding first insn, we can |
106 |
+ accurately compute the live status (by starting at a label following a |
107 |
+ BARRIER, we are immune to actions taken by reload and jump.) Then we |
108 |
+ scan all insns between that point and our target. For each CLOBBER (or |
109 |
+ for call-clobbered regs when we pass a CALL_INSN), mark the appropriate |
110 |
+ registers are dead. For a SET, mark them as live. |
111 |
|
112 |
We have to be careful when using REG_DEAD notes because they are not |
113 |
updated by such things as find_equiv_reg. So keep track of registers |
114 |
@@ -957,13 +951,10 @@ |
115 |
TARGET. Otherwise, we must assume everything is live. */ |
116 |
if (b != -1) |
117 |
{ |
118 |
- regset regs_live = DF_LR_IN (BASIC_BLOCK (b)); |
119 |
+ regset regs_live = df_get_live_in (BASIC_BLOCK (b)); |
120 |
rtx start_insn, stop_insn; |
121 |
|
122 |
- /* Compute hard regs live at start of block -- this is the real hard regs |
123 |
- marked live, plus live pseudo regs that have been renumbered to |
124 |
- hard regs. */ |
125 |
- |
126 |
+ /* Compute hard regs live at start of block. */ |
127 |
REG_SET_TO_HARD_REG_SET (current_live_regs, regs_live); |
128 |
|
129 |
/* Get starting and ending insn, handling the case where each might |
130 |
@@ -1049,10 +1040,24 @@ |
131 |
|
132 |
else if (LABEL_P (real_insn)) |
133 |
{ |
134 |
+ basic_block bb; |
135 |
+ |
136 |
/* A label clobbers the pending dead registers since neither |
137 |
reload nor jump will propagate a value across a label. */ |
138 |
AND_COMPL_HARD_REG_SET (current_live_regs, pending_dead_regs); |
139 |
CLEAR_HARD_REG_SET (pending_dead_regs); |
140 |
+ |
141 |
+ /* We must conservatively assume that all registers that used |
142 |
+ to be live here still are. The fallthrough edge may have |
143 |
+ left a live register uninitialized. */ |
144 |
+ bb = BLOCK_FOR_INSN (real_insn); |
145 |
+ if (bb) |
146 |
+ { |
147 |
+ HARD_REG_SET extra_live; |
148 |
+ |
149 |
+ REG_SET_TO_HARD_REG_SET (extra_live, df_get_live_in (bb)); |
150 |
+ IOR_HARD_REG_SET (current_live_regs, extra_live); |
151 |
+ } |
152 |
} |
153 |
|
154 |
/* The beginning of the epilogue corresponds to the end of the |
155 |
@@ -1124,6 +1129,7 @@ |
156 |
init_resource_info (rtx epilogue_insn) |
157 |
{ |
158 |
int i; |
159 |
+ basic_block bb; |
160 |
|
161 |
/* Indicate what resources are required to be valid at the end of the current |
162 |
function. The condition code never is and memory always is. If the |
163 |
@@ -1192,6 +1198,11 @@ |
164 |
/* Allocate and initialize the tables used by mark_target_live_regs. */ |
165 |
target_hash_table = XCNEWVEC (struct target_info *, TARGET_HASH_PRIME); |
166 |
bb_ticks = XCNEWVEC (int, last_basic_block); |
167 |
+ |
168 |
+ /* Set the BLOCK_FOR_INSN of each label that starts a basic block. */ |
169 |
+ FOR_EACH_BB (bb) |
170 |
+ if (LABEL_P (BB_HEAD (bb))) |
171 |
+ BLOCK_FOR_INSN (BB_HEAD (bb)) = bb; |
172 |
} |
173 |
|
174 |
/* Free up the resources allocated to mark_target_live_regs (). This |
175 |
@@ -1200,6 +1211,8 @@ |
176 |
void |
177 |
free_resource_info (void) |
178 |
{ |
179 |
+ basic_block bb; |
180 |
+ |
181 |
if (target_hash_table != NULL) |
182 |
{ |
183 |
int i; |
184 |
@@ -1225,6 +1238,10 @@ |
185 |
free (bb_ticks); |
186 |
bb_ticks = NULL; |
187 |
} |
188 |
+ |
189 |
+ FOR_EACH_BB (bb) |
190 |
+ if (LABEL_P (BB_HEAD (bb))) |
191 |
+ BLOCK_FOR_INSN (BB_HEAD (bb)) = NULL; |
192 |
} |
193 |
|
194 |
/* Clear any hashed information that we have stored for INSN. */ |
195 |
Index: gcc/Makefile.in |
196 |
=================================================================== |
197 |
--- gcc/Makefile.in (revision 147780) |
198 |
+++ gcc/Makefile.in (revision 147781) |
199 |
@@ -2664,7 +2664,8 @@ |
200 |
value-prof.h |
201 |
cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ |
202 |
$(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \ |
203 |
- output.h toplev.h $(FUNCTION_H) except.h $(TM_P_H) insn-config.h $(EXPR_H) \ |
204 |
+ output.h toplev.h $(FUNCTION_H) except.h $(TM_P_H) $(INSN_ATTR_H) \ |
205 |
+ insn-config.h $(EXPR_H) \ |
206 |
$(CFGLAYOUT_H) $(CFGLOOP_H) $(OBSTACK_H) $(TARGET_H) $(TREE_H) \ |
207 |
tree-pass.h $(DF_H) |
208 |
cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ |
209 |
Index: gcc/cfgrtl.c |
210 |
=================================================================== |
211 |
--- gcc/cfgrtl.c (revision 147780) |
212 |
+++ gcc/cfgrtl.c (revision 147781) |
213 |
@@ -53,6 +53,7 @@ |
214 |
#include "toplev.h" |
215 |
#include "tm_p.h" |
216 |
#include "obstack.h" |
217 |
+#include "insn-attr.h" |
218 |
#include "insn-config.h" |
219 |
#include "cfglayout.h" |
220 |
#include "expr.h" |
221 |
@@ -427,11 +428,25 @@ |
222 |
return 0; |
223 |
} |
224 |
|
225 |
+static unsigned int |
226 |
+rest_of_pass_free_cfg (void) |
227 |
+{ |
228 |
+#ifdef DELAY_SLOTS |
229 |
+ /* The resource.c machinery uses DF but the CFG isn't guaranteed to be |
230 |
+ valid at that point so it would be too late to call df_analyze. */ |
231 |
+ if (optimize > 0 && flag_delayed_branch) |
232 |
+ df_analyze (); |
233 |
+#endif |
234 |
+ |
235 |
+ free_bb_for_insn (); |
236 |
+ return 0; |
237 |
+} |
238 |
+ |
239 |
struct tree_opt_pass pass_free_cfg = |
240 |
{ |
241 |
NULL, /* name */ |
242 |
NULL, /* gate */ |
243 |
- free_bb_for_insn, /* execute */ |
244 |
+ rest_of_pass_free_cfg, /* execute */ |
245 |
NULL, /* sub */ |
246 |
NULL, /* next */ |
247 |
0, /* static_pass_number */ |