https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127142

--- Comment #10 from John David Anglin <danglin at gcc dot gnu.org> ---
Part of the problem is LRA leaves register %r1 live after a call.  Testing
removing %r1 clobber from call patterns.  Works okay on 64-bit HP-UX.  This
makes it hard for LRA to handle patterns that output to %r1 under high register
pressure.

The trdos_insert_boot_loader spill failure is triggered by this pattern:

(define_expand "cpymemsi"
  [(parallel [(set (match_operand:BLK 0 "" "")
                   (match_operand:BLK 1 "" ""))
              (clobber (match_dup 4))
              (clobber (match_dup 5))
              (clobber (match_dup 6))
              (clobber (match_dup 7))
              (clobber (match_dup 8))
              (use (match_operand:SI 2 "arith14_operand" ""))
              (use (match_operand:SI 3 "const_int_operand" ""))])]
  "!TARGET_64BIT && optimize > 0"

It is interesting that LRA fails to find a spill register in spite of the fact
that %r3-%r18 are free.  It wants to just use the call clobbered registers.

Reply via email to