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

            Bug ID: 69556
           Summary: [6 Regression] forwprop4/match.pd undoing work from
                    recip
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jgreenhalgh at gcc dot gnu.org
  Target Milestone: ---

For this code compiled at -Ofast:

double bar (double, double, double, double, double);

double
foo (double a)
{
  return bar (1.0/a, 2.0/a, 4.0/a, 8.0/a, 16.0/a);
}


GCC 5 generates:

foo:
.LFB0:
        .cfi_startproc
        movsd   .LC0(%rip), %xmm1
        movsd   .LC1(%rip), %xmm4
        movsd   .LC2(%rip), %xmm3
        divsd   %xmm0, %xmm1
        movsd   .LC3(%rip), %xmm2
        mulsd   %xmm1, %xmm4
        movapd  %xmm1, %xmm0
        mulsd   %xmm1, %xmm3
        mulsd   %xmm1, %xmm2
        addsd   %xmm1, %xmm1
        jmp     bar

(i.e. one divide, 4 multiplies)

GCC trunk at revision r232907 generates:

foo:
.LFB0:
        .cfi_startproc
        movapd  %xmm0, %xmm5
        movsd   .LC0(%rip), %xmm4
        movsd   .LC4(%rip), %xmm0
        movsd   .LC1(%rip), %xmm3
        movsd   .LC2(%rip), %xmm2
        movsd   .LC3(%rip), %xmm1
        divsd   %xmm5, %xmm0
        divsd   %xmm5, %xmm4
        divsd   %xmm5, %xmm3
        divsd   %xmm5, %xmm2
        divsd   %xmm5, %xmm1
        jmp     bar

(i.e. 5 divides)

This is bad for performance.

forwprop4 shows:

Applying pattern match.pd:453, gimple-match.c:32116
gimple_simplified to _2 = 1.6e+1 / a_1(D);
Applying pattern match.pd:453, gimple-match.c:32116
gimple_simplified to _3 = 8.0e+0 / a_1(D);
Applying pattern match.pd:453, gimple-match.c:32116
gimple_simplified to _4 = 4.0e+0 / a_1(D);
Applying pattern match.pd:453, gimple-match.c:32116
gimple_simplified to _5 = 2.0e+0 / a_1(D);


This starts with r229107 which moves the (C1/X)*C2 into (C1*C2)/X pattern from
fold-const.c to match.pd.

Reply via email to