This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Libjava failures status
- From: Jan Hubicka <jh at suse dot cz>
- To: Jan Hubicka <jh at suse dot cz>
- Cc: Anthony Green <green at redhat dot com>, gcc at gcc dot gnu dot org, java at gcc dot gnu dot org, rth at cygnus dot com, gcc-patches at gcc dot gnu dot org
- Date: Fri, 8 Mar 2002 21:11:09 +0100
- Subject: Re: Libjava failures status
- References: <20020307165741.GT911@atrey.karlin.mff.cuni.cz> <1015574987.1563.36.camel@dhcppc2> <20020308200206.GF1918@atrey.karlin.mff.cuni.cz>
> > Jan -
> >
> > I'm seeing a build problem in libjava now. Could this be related to
> > your recent changes?
> ..
> > /louie/green/trunk/gcc/libjava/java/util/Stack.java: In method `java.util.Stack.pop()':
> > /louie/green/trunk/gcc/libjava/java/util/Stack.java:115: Missing REG_EH_REGION note in the end of bb 12
> > /louie/green/trunk/gcc/libjava/java/util/Stack.java:115: verify_flow_info failed
> Yes, it is definitly another problem of same class.
> I hope to fix it during weekend, but I am on the trip now so I am not
> quite sure I will be able to do so.
>
> As temporary workaround it is possible to just disable the sanity check.
> If the abort prevents others from working, I can commit it to the tree
> till tuesday I will return.
Doing cvs diff showed that I forgot to send out one fix that is required
for i386 bootstrap, sorry.
It fixed peephole2, that, unlike try_split does not update EH notes.
The code is mostly identical to what try_split does so I am installing
it as obvious to allow bootstrap.
Bootstrapped/regtested i686 together with other patches yesterday.
OK for branch?
Fri Mar 8 21:08:52 CET 2002 Jan Hubicka <jh@suse.cz>
* recog.c (peephole2_optimize): Re-distribute EH edges.
Index: recog.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/recog.c,v
retrieving revision 1.139
diff -c -3 -p -r1.139 recog.c
*** recog.c 2002/03/03 21:09:46 1.139
--- recog.c 2002/03/08 20:04:32
*************** peephole2_optimize (dump_file)
*** 3054,3059 ****
--- 3054,3060 ----
{
rtx try;
int match_len;
+ rtx note;
/* Record this insn. */
if (--peep2_current < 0)
*************** peephole2_optimize (dump_file)
*** 3105,3111 ****
note = XEXP (note, 1))
switch (REG_NOTE_KIND (note))
{
- case REG_EH_REGION:
case REG_NORETURN:
case REG_SETJMP:
case REG_ALWAYS_RETURN:
--- 3106,3111 ----
*************** peephole2_optimize (dump_file)
*** 3138,3143 ****
--- 3138,3164 ----
/* Replace the old sequence with the new. */
try = emit_insn_after (try, peep2_insn_data[i].insn);
delete_insn_chain (insn, peep2_insn_data[i].insn);
+
+ /* Re-insert the EH_REGION notes. */
+ if (try == bb->end
+ && (note = find_reg_note (peep2_insn_data[i].insn,
+ REG_EH_REGION, NULL_RTX)))
+ {
+ rtx x;
+ for (x = NEXT_INSN (peep2_insn_data[i].insn);
+ x != NEXT_INSN (try); x = NEXT_INSN (x))
+ if (GET_CODE (x) == CALL_INSN
+ || (flag_non_call_exceptions
+ && may_trap_p (PATTERN (x))))
+ REG_NOTES (x)
+ = gen_rtx_EXPR_LIST (REG_EH_REGION,
+ XEXP (note, 0),
+ REG_NOTES (x));
+ }
+ /* Converting possibly trapping insn to non-trapping is
+ possible. Zap dummy outgoing edges. */
+ if (try == bb->end)
+ purge_dead_edges (bb);
#ifdef HAVE_conditional_execution
/* With conditional execution, we cannot back up the