Georg Lay <a...@gjlay.de> writes:
> roy rosen schrieb:
>> What might be the problem here?
>
> Define and use proper constraint(s).

Right.  doloop_end is a notoriously difficult case though, because jump
insns aren't allowed to have output reloads.  Something like:

(define_insn "doloop_end_internal"
  [(set (pc)
        (if_then_else (ne (match_operand:SI 1 "lc_operand" "+lc")
                          (const_int 0))
                      (label_ref (match_operand 0 "" ""))
                      (pc)))
   (set (match_dup 1) (plus:SI (match_dup 1) (const_int -1)))]
  ...)

isn't allowed because it might generate an output reload from an
lc_register to either a general register or memory.  The predicates
and constraints have to accept all allocatable registers for SImode
and at least (mem (reg)).

See the MeP port for one example of how to do this.

Richard

Reply via email to