http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55195
--- Comment #10 from dave.anglin at bell dot net 2012-11-06 12:26:06 UTC --- On 5-Nov-12, at 11:20 AM, amylaar at gcc dot gnu.org wrote: > I take back that statement about this being straightforward. We > need valid > minimum and maximum instruction lengths. The opaque dummy clause > automatically > provides a value to be included in these calculations. This is failing at -O0: (define_insn "" [(set (reg:SI 29) (div:SI (reg:SI 26) (match_operand:SI 0 "div_operand" ""))) (clobber (match_operand:SI 1 "register_operand" "=a")) (clobber (match_operand:SI 2 "register_operand" "=&r")) (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (reg:SI 31))] "!TARGET_64BIT" "* return pa_output_div_insn (operands, 0, insn);" [(set_attr "type" "milli") (set (attr "length") (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 24)] (symbol_ref "pa_attr_length_millicode_call (insn)")))]) The insn is actually a millicode call (branch) which needs to be able to reach stub table. Different variants are generated depending on pc. I modified the opaque clause a bit as I decided I didn't want to it to depend on operand 0. Don't see how a negative length can arise. spawn /home/dave/gnu/gcc/objdir/gcc/xgcc -B/home/dave/gnu/gcc/objdir/ gcc/ -fno-d iagnostics-show-caret -O0 -w -c -o 20000427-1.o /home/dave/gnu/gcc/gcc/ gcc/tests uite/gcc.c-torture/compile/20000427-1.c/home/dave/gnu/gcc/gcc/gcc/ testsuite/gcc.c-torture/compile/20000427-1.c: In func tion 'ConvertFor3dDriver': /home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.c-torture/compile/ 20000427-1.c:9:1: err or: negative insn length (insn 47 46 48 (parallel [ (set (reg:SI 29 %r29) (div:SI (reg:SI 26 %r26) (reg:SI 25 %r25))) (clobber (reg:SI 1 %r1)) (clobber (reg:SI 19 %r19 [125])) (clobber (reg:SI 26 %r26)) (clobber (reg:SI 25 %r25)) (clobber (reg:SI 31 %r31)) ]) /home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.c-torture/compile/ 20000427-1.c:8 122 {*pa.md:5433} (nil)) /home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.c-torture/compile/ 20000427-1.c:9:1: int ernal compiler error: in shorten_branches, at final.c:1162 0x537f7b _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ../../gcc/gcc/rtl-error.c:110 0x308df7 shorten_branches(rtx_def*) ../../gcc/gcc/final.c:1162 0x3094e3 rest_of_handle_shorten_branches ../../gcc/gcc/final.c:4368 Dave -- John David Anglin dave.ang...@bell.net