public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x)
@ 2013-01-09  7:46 vincenzo.innocente at cern dot ch
  2013-01-09  8:59 ` [Bug tree-optimization/55912] " glisse at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: vincenzo.innocente at cern dot ch @ 2013-01-09  7:46 UTC (permalink / raw)
  To: gcc-bugs


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

             Bug #: 55912
           Summary: missing optimization of x/x and x/std::abs(x)
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: vincenzo.innocente@cern.ch


in the following examples I'm quite surprised that only (x/x)is optimized to
"!".
With Ofast (and even more with -mrecip) I would have expected that
commutativity of multiplication to be used at least to optimized x*a/x

Optimizing x/x and x/std::abs(x) would be beneficial with -mrecip to amortize a
trivial loss of precision.

cat one.cc;c++ -Ofast  -S one.cc -msse4.2; cat one.s
#include<cmath>
int one1(float a, float x) {
  return x*a/x;
}

#include<cmath>
int one2(float a, float x) {
  return a*(x/x);
}



int sign1(float a, float x) {
  return x*a/std::abs(x);
}

int sign2(float a, float x) {
  return a*(x/std::abs(x));
}

    .text
    .align 4,0x90
    .globl __Z4one1ff
__Z4one1ff:
LFB86:
    mulss    %xmm1, %xmm0
    divss    %xmm1, %xmm0
    cvttss2si    %xmm0, %eax
    ret
LFE86:
    .align 4,0x90
    .globl __Z4one2ff
__Z4one2ff:
LFB87:
    cvttss2si    %xmm0, %eax
    ret
LFE87:
    .align 4,0x90
    .globl __Z5sign1ff
__Z5sign1ff:
LFB88:
    mulss    %xmm1, %xmm0
    movss    LC0(%rip), %xmm2
    andps    %xmm2, %xmm1
    divss    %xmm1, %xmm0
    cvttss2si    %xmm0, %eax
    ret
LFE88:
    .align 4,0x90
    .globl __Z5sign2ff
__Z5sign2ff:
LFB89:
    movss    LC0(%rip), %xmm2
    andps    %xmm1, %xmm2
    divss    %xmm2, %xmm1
    mulss    %xmm0, %xmm1
    cvttss2si    %xmm1, %eax
    ret


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/55912] missing optimization of x/x and x/std::abs(x)
  2013-01-09  7:46 [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x) vincenzo.innocente at cern dot ch
@ 2013-01-09  8:59 ` glisse at gcc dot gnu.org
  2013-01-09  9:27 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-01-09  8:59 UTC (permalink / raw)
  To: gcc-bugs


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

Marc Glisse <glisse at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |glisse at gcc dot gnu.org

--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> 2013-01-09 08:59:26 UTC ---
Thanks.

Hmm, what I was suggesting in the other bug (trivial code in fold-const.c)
would probably only help for sign2, and only if you use fabsf instead of
std::abs :-(


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/55912] missing optimization of x/x and x/std::abs(x)
  2013-01-09  7:46 [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x) vincenzo.innocente at cern dot ch
  2013-01-09  8:59 ` [Bug tree-optimization/55912] " glisse at gcc dot gnu.org
@ 2013-01-09  9:27 ` rguenth at gcc dot gnu.org
  2013-10-12 18:35 ` glisse at gcc dot gnu.org
  2021-08-10 19:06 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-01-09  9:27 UTC (permalink / raw)
  To: gcc-bugs


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-01-09
     Ever Confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-09 09:26:58 UTC ---
Most of the math builtin folding needs to be re-done at GIMPLE level based
on SSA form.  Convenient places are either tree-ssa-forwprop.c or
tree-ssa-math-opts.c (sincos pass which also does power series expansion now).


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/55912] missing optimization of x/x and x/std::abs(x)
  2013-01-09  7:46 [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x) vincenzo.innocente at cern dot ch
  2013-01-09  8:59 ` [Bug tree-optimization/55912] " glisse at gcc dot gnu.org
  2013-01-09  9:27 ` rguenth at gcc dot gnu.org
@ 2013-10-12 18:35 ` glisse at gcc dot gnu.org
  2021-08-10 19:06 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-10-12 18:35 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #2)
> Most of the math builtin folding needs to be re-done at GIMPLE level based
> on SSA form.  Convenient places are either tree-ssa-forwprop.c or
> tree-ssa-math-opts.c (sincos pass which also does power series expansion
> now).

tree-ssa-reassoc.c seems like a natural place to optimize x*a/x, since it
already handles x+a-x.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/55912] missing optimization of x/x and x/std::abs(x)
  2013-01-09  7:46 [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x) vincenzo.innocente at cern dot ch
                   ` (2 preceding siblings ...)
  2013-10-12 18:35 ` glisse at gcc dot gnu.org
@ 2021-08-10 19:06 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-10 19:06 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement
           Keywords|                            |missed-optimization

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-08-10 19:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-09  7:46 [Bug tree-optimization/55912] New: missing optimization of x/x and x/std::abs(x) vincenzo.innocente at cern dot ch
2013-01-09  8:59 ` [Bug tree-optimization/55912] " glisse at gcc dot gnu.org
2013-01-09  9:27 ` rguenth at gcc dot gnu.org
2013-10-12 18:35 ` glisse at gcc dot gnu.org
2021-08-10 19:06 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).