Unable to generate reloads
Lars Brinkhoff
lars@nocrew.org
Fri Sep 21 06:09:00 GMT 2001
In my back end, there is an instruction that can load a value from
memory (or another register) and then conditionally jump depending on
how the value compares with zero. The instruction is recognized by
the combine pass and is defined like this:
(define_insn "*load_and_jump"
[(set (pc)
(if_then_else (match_operator 0 "comparison_operator"
[(match_operand:SI 2 "reg_or_mem_operand" "rm")
(const_int 0)])
(label_ref (match_operand 3 "" ""))
(pc)))
(set (match_operand:SI 1 "register_operand" "=r")
(match_dup 2))]
...)
A few files in the testsuite generate the "Unable to generate reloads
for:" error for this instruction. Example:
testsuite/gcc.c-torture/compile/920625-1.c:279: Unable to generate reloads for:
(jump_insn 45 4975 5103 (parallel[
(set (pc)
(if_then_else (ge (reg:SI 1217)
(const_int 0 [0x0]))
(label_ref 48)
(pc)))
(set (reg/v:SI 30)
(reg:SI 1217))
] ) 68 {*move_and_skipsi} (nil)
(expr_list:REG_DEAD (reg:SI 1217)
(expr_list:REG_BR_PROB (const_int 8900 [0x22c4])
(nil))))
How do I avoid this error?
--
Lars Brinkhoff http://lars.nocrew.org/ Linux, GCC, PDP-10
Brinkhoff Consulting http://www.brinkhoff.se/ programming
More information about the Gcc
mailing list