This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Unable to generate reloads


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]