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