Bug 68609 - PowerPC reciprocal estimate missed opportunities
Summary: PowerPC reciprocal estimate missed opportunities
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 6.0
: P3 normal
Target Milestone: 6.0
Assignee: Not yet assigned to anyone
URL:
Keywords: missed-optimization
Depends on:
Blocks:
 
Reported: 2015-11-30 00:41 UTC by Anton Blanchard
Modified: 2016-01-20 19:39 UTC (History)
3 users (show)

See Also:
Host:
Target: powerpc-*-*
Build:
Known to work:
Known to fail:
Last reconfirmed: 2015-12-01 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Blanchard 2015-11-30 00:41:25 UTC
gcc.target/i386/recip-sqrtf.c shows some missed opportunities for the reciprocal estimate instructions. One example:

float t3(float a)
{
  return sqrtf(a);
}

On x86 (and PowerPC clang), we use the square root reciprocal estimate instructions, but PowerPC gcc does not.
Comment 1 David Edelsohn 2015-12-01 14:00:52 UTC
Confirmed.
Comment 2 David Edelsohn 2015-12-05 12:54:17 UTC
Author: dje
Date: Sat Dec  5 12:53:45 2015
New Revision: 231317

URL: https://gcc.gnu.org/viewcvs?rev=231317&root=gcc&view=rev
Log:
        PR target/68609
        * config/rs6000/rs6000-protos.h (rs6000_emit_swsqrt): Rename and add
        bool arguement.
        * config/rs6000/rs6000.c (rs6000_emit_swsqrt): Rename. Add
        non-reciporcal path.
        * config/rs6000/rs6000.md (rsqrt<mode>2): Call new function name.
        (sqrt<mode>2): Replace define_insn with define_expand that may call
        rs6000_emit_swsqrt.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/rs6000-protos.h
    trunk/gcc/config/rs6000/rs6000.c
    trunk/gcc/config/rs6000/rs6000.md
Comment 3 David Edelsohn 2015-12-05 12:56:24 UTC
Fixed.
Comment 4 David Edelsohn 2016-01-15 16:38:40 UTC
Author: dje
Date: Fri Jan 15 16:38:08 2016
New Revision: 232439

URL: https://gcc.gnu.org/viewcvs?rev=232439&root=gcc&view=rev
Log:
        PR target/68609
        * config/rs6000/rs6000.c (rs6000_emit_msub): Delete.
        (rs6000_emit_swsqrt): Convert to Goldschmidt's Algorithm
        * config/rs6000/rs6000.md (sqrt<mode>2): Limit swsqrt to high
        precision estimate.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/rs6000.c
    trunk/gcc/config/rs6000/rs6000.md
Comment 5 David Edelsohn 2016-01-15 23:04:55 UTC
Author: dje
Date: Fri Jan 15 23:04:23 2016
New Revision: 232456

URL: https://gcc.gnu.org/viewcvs?rev=232456&root=gcc&view=rev
Log:
        PR target/68609
        * gcc.target/powerpc/recip-1.c: Adjust for Goldschmidt's Algorithm.
        * gcc.target/powerpc/recip-2.c: Same.
        * gcc.target/powerpc/recip-3.c: Same.
        * gcc.target/powerpc/recip-4.c: Same.
        * gcc.target/powerpc/recip-sqrtf.c: Same.


Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.target/powerpc/recip-1.c
    trunk/gcc/testsuite/gcc.target/powerpc/recip-2.c
    trunk/gcc/testsuite/gcc.target/powerpc/recip-3.c
    trunk/gcc/testsuite/gcc.target/powerpc/recip-4.c
    trunk/gcc/testsuite/gcc.target/powerpc/recip-sqrtf.c
Comment 6 David Edelsohn 2016-01-16 20:05:05 UTC
Author: dje
Date: Sat Jan 16 20:04:33 2016
New Revision: 232468

URL: https://gcc.gnu.org/viewcvs?rev=232468&root=gcc&view=rev
Log:
        PR target/68609
        * gcc.target/powerpc/recip-6.c: Enable on AIX.
        * gcc.target/powerpc/recip-7.c: Same.

Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.target/powerpc/recip-6.c
    trunk/gcc/testsuite/gcc.target/powerpc/recip-7.c
Comment 7 David Edelsohn 2016-01-20 19:39:40 UTC
Author: dje
Date: Wed Jan 20 19:39:08 2016
New Revision: 232632

URL: https://gcc.gnu.org/viewcvs?rev=232632&root=gcc&view=rev
Log:
	PR target/68609
        * config/rs6000/rs6000.c (rs6000_emit_swsqrt): Add vector sqrt
        domain check.
        * config/rs6000/vector.md (sqrt<mode>2): Call rs6000_emit_swsqrt
        for V4SFmode.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/rs6000.c
    trunk/gcc/config/rs6000/vector.md