BOOTSTRAP FAILURE: segementation fault in genattrtab under hpux

John David Anglin dave@hiauly1.hia.nrc.ca
Wed Nov 15 16:12:00 GMT 2000


>   > >   > > 0xb8b00 <layout_type+72>:       ldb  r20(sr0,r3),rp

...

>   > I think the reversal occurs because r3 is being used as an index register.
>   > There is stuff in the machine definition like this:
> I seriously doubt it since hard_frame_pointer_rtx shouldn't have %r3 as
> its value unless %r3 really is the frame pointer.  ie, if the frame pointer
> is eliminated %r3 should not be the value of hard_frame_pointer_rtx.

Here is the rtl from flow2:

(insn 34 5470 35 (set (reg:QI 19 %r19)
        (mem/s:QI (plus:SI (reg:SI 19 %r19)
		(reg:SI 20 %r20)) 0)) 103 {movstrsi_internal-9} (insn_list 27 (insn_list 31 (insn_list 31 (insn_list 27 (nil)))))
    (expr_list:REG_DEAD (reg:SI 20 %r20)
        (nil)))

Here is the rtl from dbr:

;; Insn is in multiple basic blocks
(insn:TI 34 27 35 (set (reg:QI 2 %r2)
        (mem/s:QI (plus:SI (reg:SI 3 %r3)
		(reg:SI 20 %r20)) 0)) 103 {movstrsi_internal-9} (insn_list 31 (insn_list 27 (nil)))
    (expr_list:REG_DEAD (reg:SI 3 %r3)
        (expr_list:REG_DEAD (reg:SI 20 %r20)
  	    (nil))))

Don't see any reversal.  If I counted correctly, the match in the md is:

(define_insn ""
  [(set (match_operand:QI 0 "register_operand" "=r")
        (mem:QI (plus:SI (match_operand:SI 1 "register_operand" "r")
		         (match_operand:SI 2 "basereg_operand" "r"))))]
  "! TARGET_DISABLE_INDEXING"
  "*
{
  /* Reload can create backwards (relative to cse) unscaled index
     address modes when eliminating registers and possibly for
     pseudos that don't get hard registers.  Deal with it.  */
  if (operands[1] == hard_frame_pointer_rtx
      || operands[1] == stack_pointer_rtx)
    return \"{ldbx|ldb} %2(%1),%0\";
  else
    return \"{ldbx|ldb} %1(%2),%0\";
}"
  [(set_attr "type" "load")
   (set_attr "length" "4")])

This looks correct since r20 is in fact the base register.  Thus, it would
appear the only way the reversal can occur is for operands[1] to match
the hard_frame_pointer_rtx.  No?

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


More information about the Gcc-bugs mailing list