reload question
Jeff Law
law@redhat.com
Wed Jun 23 18:30:00 GMT 2010
On 06/23/10 11:22, Alex Turjan wrote:
> Hi,
> My port supports hardware loops generated by the following (do_end) pattern:
>
> (set (pc) (if_then_else (ne (match_operand:HI 0 "general_register_operand" "d")
> (const_int 0))
> (label_ref (match_operand 1 "" ""))
> (pc)))
> (set (match_operand:HI 2 "general_register_operand" "=0")
> (plus:HI (match_operand:HI 3 "general_register_operand" "0")
> (const_int -1)))
> (clobber (match_operand:BI 4 "predicate_register_operand" "=j"))
>
>
> When Im compiling a loop with high register pressure the register allocator does not allocate a register for the loop counter (i.e., operand 0) as it has a long life range. Thus operand 0 has to be reloaded but then I get a failure in the reload:
>
> error: unable to generate reloads for:
> (jump_insn 211 182 188 11 lib5.c:51 (parallel [
> (set (pc)
> (if_then_else (ne (reg:HI 292 [ N ])
> (const_int 0 [0x0]))
> (label_ref 183)
> (pc)))
> (set (reg:HI 292 [ N ])
> (plus:HI (reg:HI 292 [ N ])
> (const_int -1 [0xffffffffffffffff])))
> (clobber (reg:BI 33 p1 [293]))
> ]) 506 {do_endhi} (expr_list:REG_UNUSED (reg:BI 33 p1 [293])
> (expr_list:REG_BR_PROB (const_int 9100 [0x238c])
> (nil)))
> -> 183)
> lib5.c:105:1: internal compiler error: in find_reloads, at reload.c:3821
>
> Can anybody give me a hint?
> I am aware of the following msg:
> http://gcc.gnu.org/ml/gcc/2001-09/msg00942.html
> but still dont know how to make reload do the work.
>
insns which branch are not allowed to have output reloads. You must
support any kind of register as well as memory operands in your insn for
the loop counter.
Jeff
More information about the Gcc
mailing list