https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116849

            Bug ID: 116849
           Summary: [SH] Redundant fp mode switch at function entry
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: olegendo at gcc dot gnu.org
  Target Milestone: ---

The following example, when compiled as C (not as C++) on sh-elf with -O2
-m4-single

-----------

typedef _Complex float tuplef_t;

static inline tuplef_t make_tuplef(float first, float second)
{
  return (tuplef_t){ first, second };
}

tuplef_t get_my_tuplef()
{
    return make_tuplef(12.3f, 15.4f);
}

-----------

        sts     fpscr,r1
        mov.l   .L3,r2
        mova    .L4,r0
        fmov.s  @r0+,fr2
        and     r2,r1          // & ~(1<<19), i.e. clear FPSCR.PR bit,
        lds     r1,fpscr       // i.e. switch to single-fp mode
        fldi0   fr1
        rts
        fmov    fr2,fr0
.L5:
        .align 2
.L3:
        .long   -524289
.L4:
        .long   1095027917


The inserted mode switch is redundant, as the mode is known to be in "single
precision mode" at function entry.

Reply via email to