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?