This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Reload problem
- From: "Ching-Hua Chang" <sp0500 at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 13 Apr 2006 21:17:52 +0800
- Subject: Reload problem
- References: <OF5CDFED28.C0AA9B44-ON4825714F.00313401-4825714F.00312E3E@sunplus.com>
Hi,
I had wrote doloop_end instruction to support hwloop.
When try to compile linux kernel, I meet a reload problem,
the error message as follow.
What kinds of instuction pattern should I add to support
the reload that compiler need ?
Thanks,
Aladdin
the constrant 'q' mean the non-general "counter" register
========================================================
(define_expand "doloop_end"
[(use (match_operand:SI 0 "register_operand" ""))
(use (match_operand:SI 1 "const_int_operand" ""))
(use (match_operand:SI 2 "const_int_operand" ""))
(use (match_operand:SI 3 "const_int_operand" ""))
(use (label_ref (match_operand 4 "" "")))]
""
{
if(operands[3] != const1_rtx || flag_unroll_loops ||
flag_unroll_all_loops)
FAIL;
emit_jump_insn(gen_bcounter(operands[0], operands[4]));
DONE;
})
(define_insn "bcounter"
[(set(pc) (if_then_else
(ge (match_operand:SI 0 "register_operand" "=q") (const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))
(set(match_dup 0)
(plus:SI (match_dup 0)
(const_int -1)))]
""
"bcnz %1"
[(set_attr "type" "branch")])
Error message
===================================================================
panic.c: In function `panic':
panic.c:104: error: unable to generate reloads for:
(jump_insn 222 152 158 7 (parallel [
(set (pc)
(if_then_else (ge (reg:SI 5 r5 [orig:199 msec ] [199])
(const_int 0 [0x0]))
(label_ref 224)
(pc)))
(set (reg:SI 5 r5 [orig:199 msec ] [199])
(plus:SI (reg:SI 5 r5 [orig:199 msec ] [199])
(const_int -1 [0xffffffff])))
]) 0 {bcounter} (nil)
(expr_list:REG_BR_PROB (const_int 8900 [0x22c4])
(nil)))
panic.c:104: internal compiler error: in find_reloads, at reload.c:3672
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.