I am still porting gcc v4.1.2 to a new risc architecture, and this
time my problem is that when compiling with -O2 turned on, every insn
with a (use ..) side effect expression, eg.
(define_expand "sibcall"
[(parallel [(call (match_operand 0 "" "")
(match_operand 1 "" ""))
(use (match_operand 2 "" ""))
(use (match_operand 3 "" ""))])]
"TARGET_SIBCALL"
{
if (operands[3] == NULL_RTX)
operands[3] = const0_rtx;
internal_expand_sibcall (0, XEXP (operands[0], 0), operands[1]);
DONE;
})
causes the compiler to fail with an internal compiler error in add_clobbers.
I have looked at it in gdb and it fails on reaching the
gcc_unreachable() in add_clobbers, which happens because add_clobbers
is called (at combine.c:9576) with an insn_code_number that it does
not recognize.
Everything works fine when optimization is turned off. What is it that
gcc does differently when optimizing, that might cause this to happen?