[Bug rtl-optimization/31101] New: Problem with -funroll-all-loops

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Mar 9 10:57:00 GMT 2007


This testcase:

double t (double a, double b)
{
        return fmod (a, b);
}

generates wrong code when compiled with -O2 -funroll-all-loops
(-ffast-math -fomit-frame-pointer is used here only for clarity):

:
        fldl    4(%esp)
        fldl    12(%esp)
        fxch    %st(1)
.L2:
        fprem
        fnstsw  %ax
        sahf
        jnp     .L22
        fprem
        fnstsw  %ax
        sahf
        jnp     .L22
        fprem
        jnp     .L22
        fprem
        .p2align 4,,2
        jnp     .L22
        fprem
        .p2align 4,,5
        jnp     .L22
        fprem
        .p2align 4,,5
        jnp     .L22
        fprem
        .p2align 4,,5
        jnp     .L22
        fprem
        .p2align 4,,5
        jp      .L2
        .p2align 4,,7
.L22:
        fstp    %st(1)
        .p2align 4,,5
        ret

Please note that from second iteration,fnstsw %ax and sahf are not present
anymore in the instruction stream. The problem starts in .159r.postreload RTL
dump, where missing instructions just vanish without NOTE_INSN_DELETED trace
from RTL insn stream, although they are still present in 158r.greg dump.


-- 
           Summary: Problem with -funroll-all-loops
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ubizjak at gmail dot com
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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



More information about the Gcc-bugs mailing list