public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs
@ 2020-04-27  4:17 gabravier at gmail dot com
  2020-04-27  7:10 ` [Bug middle-end/94783] " rguenth at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: gabravier at gmail dot com @ 2020-04-27  4:17 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 94783
           Summary: Abs-equivalent pattern is not recognized as abs
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gabravier at gmail dot com
  Target Milestone: ---

unsigned r(int v)
{
    const int mask = v >> (sizeof(int) * CHAR_BIT - 1);
    return (v + mask) ^ mask;
}

This can be optimized to `return abs(v)`. This transformation is done by LLVM,
not by GCC.

Comparison here : https://godbolt.org/z/4rduiJ

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

* [Bug middle-end/94783] Abs-equivalent pattern is not recognized as abs
  2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
@ 2020-04-27  7:10 ` rguenth at gcc dot gnu.org
  2020-04-27 14:03 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2020-04-27  7:10 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|tree-optimization           |middle-end
           Keywords|                            |easyhack
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2020-04-27

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
In GCC it could be optimized to ABSU_EXPR.  Probably easy to add a pattern
to match.pd

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

* [Bug middle-end/94783] Abs-equivalent pattern is not recognized as abs
  2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
  2020-04-27  7:10 ` [Bug middle-end/94783] " rguenth at gcc dot gnu.org
@ 2020-04-27 14:03 ` jakub at gcc dot gnu.org
  2020-05-06 15:56 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-04-27 14:03 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
It can be optimized even to ABS_EXPR, because if v is INT_MIN, mask will be -1
and so v + -1 will be UB.

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

* [Bug middle-end/94783] Abs-equivalent pattern is not recognized as abs
  2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
  2020-04-27  7:10 ` [Bug middle-end/94783] " rguenth at gcc dot gnu.org
  2020-04-27 14:03 ` jakub at gcc dot gnu.org
@ 2020-05-06 15:56 ` jakub at gcc dot gnu.org
  2020-05-08  7:36 ` cvs-commit at gcc dot gnu.org
  2020-05-08  7:50 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-05-06 15:56 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |jakub at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 48471
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48471&action=edit
gcc11-pr94783.patch

Untested fix.

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

* [Bug middle-end/94783] Abs-equivalent pattern is not recognized as abs
  2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
                   ` (2 preceding siblings ...)
  2020-05-06 15:56 ` jakub at gcc dot gnu.org
@ 2020-05-08  7:36 ` cvs-commit at gcc dot gnu.org
  2020-05-08  7:50 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-05-08  7:36 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

https://gcc.gnu.org/g:a0d732eea2e152fc51f7c5249abaa9ef56fc5121

commit r11-195-ga0d732eea2e152fc51f7c5249abaa9ef56fc5121
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri May 8 09:35:41 2020 +0200

    match.pd: Canonicalize (X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs
(X) [PR94783]

    The following patch canonicalizes M = X >> (prec - 1); (X + M) ^ M
    for signed integral types into ABS_EXPR (X).  For X == min it is already
    UB because M is -1 and min + -1 is UB, so we can use ABS_EXPR rather than
    say ABSU_EXPR + cast.

    The backend might then emit the abs code back using the shift and addition
    and xor if it is the best sequence for the target, but could do something
    different that is better.

    2020-05-08  Jakub Jelinek  <jakub@redhat.com>

            PR tree-optimization/94783
            * match.pd ((X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs
(X)):
            New simplification.

            * gcc.dg/tree-ssa/pr94783.c: New test.

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

* [Bug middle-end/94783] Abs-equivalent pattern is not recognized as abs
  2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
                   ` (3 preceding siblings ...)
  2020-05-08  7:36 ` cvs-commit at gcc dot gnu.org
@ 2020-05-08  7:50 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-05-08  7:50 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Fixed.  Note, GCC doesn't use a conditional move to expand abs, but that is
IMHO a good thing, conditional moves have long latencies.

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

end of thread, other threads:[~2020-05-08  7:50 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-27  4:17 [Bug tree-optimization/94783] New: Abs-equivalent pattern is not recognized as abs gabravier at gmail dot com
2020-04-27  7:10 ` [Bug middle-end/94783] " rguenth at gcc dot gnu.org
2020-04-27 14:03 ` jakub at gcc dot gnu.org
2020-05-06 15:56 ` jakub at gcc dot gnu.org
2020-05-08  7:36 ` cvs-commit at gcc dot gnu.org
2020-05-08  7:50 ` jakub 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).