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

Reply via email to