This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Committed: verify_flow_info fixes exposed by libgfortran (at leaston MMIX) take 2


As hinted in the thread at
<URL:http://gcc.gnu.org/ml/gcc-patches/2004-10/msg01585.html> barriers don't
have bb pointers, so nothing should set or inspect that insn field.  An
alternative solution is to enable this field for barriers, but as it should
always be NULL, it's obviously less desirable.

Built and checked i686-pc-linux-gnu, cross to mmix-knuth-mmixware, no Ada.
There's reason for me to be more careful about obviousness, still this patch
is simpler, even more obvious than the previous one, so committed.
I omit the reversion for emit-rtl.c in this patch.

As an aside, due to statements that --enable-checking=rtl shows nothing
interesting for common targets I built and checked on i686-pc-linux-gnu
(FC2) with --enable-checking=rtl.  I see one additional FAIL compared to
no --enable-checking option:
Running /home/hp/gcc/gcc/libjava/testsuite/libjava.lang/lang.exp ...
...
FAIL: pr83 -O3 compilation from bytecode
This is in addition to the above testing with this patch here
and the old one reverted.  The FAIL is entered as PR java/18068.

	* cfgrtl.c (rtl_verify_flow_info_1): When checking insns in a bb,
	don't inspect BLOCK_FOR_INSN for barriers.
	* emit-rtl.c (emit_barrier_before): Revert last change.
	(emit_barrier_after, emit_barrier): Ditto.

Index: cfgrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
retrieving revision 1.137
diff -p -c -r1.137 cfgrtl.c
*** cfgrtl.c	18 Oct 2004 01:56:03 -0000	1.137
--- cfgrtl.c	19 Oct 2004 23:39:48 -0000
*************** rtl_verify_flow_info_1 (void)
*** 2074,2082 ****

        for (x = BB_HEAD (bb); x != NEXT_INSN (BB_END (bb)); x = NEXT_INSN (x))
  	/* We may have a barrier inside a basic block before dead code
! 	   elimination.  They always have a NULL BLOCK_FOR_INSN.  */
! 	if (BLOCK_FOR_INSN (x) != bb
! 	    && !(BARRIER_P (x) && BLOCK_FOR_INSN (x) == NULL))
  	  {
  	    debug_rtx (x);
  	    if (! BLOCK_FOR_INSN (x))
--- 2074,2081 ----

        for (x = BB_HEAD (bb); x != NEXT_INSN (BB_END (bb)); x = NEXT_INSN (x))
  	/* We may have a barrier inside a basic block before dead code
! 	   elimination.  There is no BLOCK_FOR_INSN field in a barrier.  */
! 	if (!BARRIER_P (x) && BLOCK_FOR_INSN (x) != bb)
  	  {
  	    debug_rtx (x);
  	    if (! BLOCK_FOR_INSN (x))

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]