This is the mail archive of the gcc-bugs@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]

Abort in redirect_edge_and_branch on vax at line 866


I get an abort in redirect_edge_and_branch on vax-dec-ultrix4.3 compiling
execute/950704-1.c at -O3.  The code is:

      /* If the insn doesn't go where we think, we're confused.  */
      if (JUMP_LABEL (insn) != old_label)
	abort ();

The insn causing the problem looks like this in 950704-1.c.09.addressof:

(jump_insn 496 495 1004 (set (pc)
        (if_then_else (lt (cc0)
		(const_int 0 [0x0]))
	    (label_ref 518)
	    (pc))) 116 {blt} (nil)
    (nil))

After 950704-1.c.10.gcse, we have

(note 1001 494 496 [bb 21] NOTE_INSN_BASIC_BLOCK)

(jump_insn 496 1001 1004 (set (pc)
        (pc)) 116 {blt} (nil)
    (nil))

(note 1004 496 1273 [bb 22] NOTE_INSN_BASIC_BLOCK)

As can be seen, the JUMP_LABEL is gone from the insn.  redirect_edge_and_branch
still seems to know about label_ref 518:

(gdb) p debug_rtx (old_label)

(code_label 518 1316 1011 51 "" "" [3 uses])

Is the problem that the edge wasn't updated when the label was removed
from insn 496?  Or, can we just ignore old_label when there is no
JUMP_LABEL in the insn.  Or, should the gcse pass have completely
removed bb 21?

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)


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