Gentoo Archives: gentoo-commits

From: "Mark Loeser (halcy0n)" <halcy0n@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo commit in src/patchsets/gcc/4.3.2/gentoo: 92_all_gcc43-pr40105.patch README.history
Date: Wed, 02 Sep 2009 10:42:23
Message-Id: E1Mis6x-0000JI-Lz@stork.gentoo.org
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 */