Hi all,
We want to upgrade our cross compiler (for custom processor) from
gcc.3.3 to gcc.4.3.1.
In this process we have successfully build the compiler, But it is fail
to recognize the following (function with return value) insn
test.c:17: error: unrecognizable insn:
(call_insn 14 13 15 3 test.c:15 (set (reg:HI 0 d2)
(call (mem:SI (symbol_ref:SI ("add") [flags 0x3] <function_decl
0xb7d08930 add>) [0 S4 A16])
(const_int 8 [0x8]))) -1 (expr_list:REG_EH_REGION (const_int
0 [0x0])
(nil))
(nil))
test.c:17: internal compiler error: in extract_insn, at recog.c:1990
This is our define_expand for our call_value pattern:
(define_expand "call_value"
[(set (match_operand 0 "register_operand" "")
(call (match_operand:SI 1 "" "")
(match_operand:SI 2 "" "")))]
""
"
{
if (GET_CODE (operands[1]) == MEM
&& ! address_operand (XEXP (operands[1], 0), SImode))
{
operands[1] = gen_rtx_MEM (GET_MODE (operands[1]),
force_reg (Pmode, XEXP (operands[1], 0)));
}
}")
define_insn for our call_value pattern:
(define_insn "*call_value"
[(set (match_operand 0 "register_operand" "=x,x")
(call (mem:SI (match_operand:SI 1 "address_operand" "a,R"))
(match_operand 2 "" ""))) ]
""
"@
jsri %1
jsr %1"
[(set_attr "type" "call")])
where x- is return registers
a= address register which can hold address of the function
R= symbolic operand
The same pattern definitions are working fine with gcc-3.3, But failing
with gcc-4.3.1.
I am unable to identify actual reason,so can you please help me in this
regard.
Thanks,
P.V.Siva Prasad