This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: verify_flow_info
- To: Jan Hubicka <hubicka at horac dot ta dot jcu dot cz>, egcs-patches at cygnus dot com, law at cygnus dot com
- Subject: Re: verify_flow_info
- From: Richard Henderson <rth at cygnus dot com>
- Date: Tue, 6 Apr 1999 22:16:50 -0700
- References: <19990405013447.E11228@horac.ta.jcu.cz>
On Mon, Apr 05, 1999 at 01:34:47AM +0200, Jan Hubicka wrote:
> Sun Apr 4 07:24:06 CEST 1999 (hubicka@paru.cas.cz)
> * flow.c (verify_flow_info) new function
I've committed this, very tweeked. There's one bit
> + /* Try to figure out why basic block boundary is present */
> +
> + if (tmp_rtx
> + && GET_CODE (tmp_rtx) != JUMP_INSN
> + && NEXT_INSN (tmp_rtx))
> + {
> + rtx old_rtx = tmp_rtx;
> +
> + /* ??? Some notes are placed between basic blocks (such as
> + NOTE_INSN_BLOCK_END. I am not sure what notes are allowed and what
> + not. */
> + tmp_rtx = next_nonnote_insn (tmp_rtx);
> +
> + if (tmp_rtx && GET_CODE (tmp_rtx) != CODE_LABEL &&
> + /* ??? Are barriers allowed in case previous block don't end by
> + unconditional jump? */
> + GET_CODE (tmp_rtx) != BARRIER)
> + {
> + int i1 = -1, i2 = -1;
> + if (bb_info[INSN_UID (tmp_rtx)])
> + i2 = bb_info[INSN_UID (tmp_rtx)]->index;
> + if (bb_info[INSN_UID (old_rtx)])
> + i1 = bb_info[INSN_UID (old_rtx)]->index;
> + fprintf (stderr, "Unnecesary basic block boundary between blocks %i and %i:\n", i1, i2);
> + debug_rtx (old_rtx);
> + debug_rtx (tmp_rtx);
> + abort ();
> + }
> + }
I didn't really understand what you were trying to get at here.
And seems to be completely wrong with exception handling.
Anyway, the good part is that it flagged a real merge_blocks bug
during the first bootstrap of gcc on Alpha. ;-)
r~