http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56451



             Bug #: 56451

           Summary: [4.8 regression] Wrong code for

                    gcc.c-torture/execute/941015-1.c on SH

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Keywords: wrong-code

          Severity: normal

          Priority: P3

         Component: rtl-optimization

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: kkoj...@gcc.gnu.org

            Target: sh*-*-*





On sh4-linux, the function foo1 of gcc.c-torture/execute/941015-1.c



int

foo1 (value)

     long long value;

{

  register const long long constant = 0xc000000080000000LL;



  if (value < constant)

    return 1;

  else

    return 2;

}



is assembled to a wrong code with -O1



foo1:

        mov.l   .L7,r1

        cmp/gt  r1,r5

        bt/s    .L10

        mov     #2,r0

        cmp/ge  r1,r5

        bf/s    .L10

        mov     #1,r0

.L10:

        rts     

        nop

.L9:

        .align 2

.L7:

        .long   -1073741824



It looks delayed branch optimization causes this.

Reply via email to