public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0
@ 2023-05-04 0:40 pinskia at gcc dot gnu.org
2023-05-04 0:41 ` [Bug tree-optimization/109722] " pinskia at gcc dot gnu.org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-04 0:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
Bug ID: 109722
Summary: ABSU<a> == 0 is not optimized to just a == 0
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: pinskia at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Target Milestone: ---
Take:
```
int f(signed char a)
{
int t = a;
if (t < 0) t = -t;
a = t;
return a == 0;
}
```
Right now this gets optimized to just:
```
_9 = ABSU_EXPR <a_3(D)>;
_1 = _9 == 0;
_7 = (int) _1;
```
If we change `signed char` to `unsigned char`, we get:
_1 = a_2(D) == 0;
_3 = (int) _1;
As we had expected for the original case too.
The fix is to change in match.pd:
/* Convert ABS_EXPR<x> == 0 or ABS_EXPR<x> != 0 to x == 0 or x != 0. */
(for op (eq ne)
(simplify
(op (abs @0) zerop@1)
(op @0 @1)))
to:
/* Convert ABS[U]_EXPR<x> == 0 or ABS[U]_EXPR<x> != 0 to x == 0 or x != 0. */
(for op (abs absu)
(for eqne (eq ne)
(simplify
(eqne (op @0) zerop@1)
(eqne @0 @1)))
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
@ 2023-05-04 0:41 ` pinskia at gcc dot gnu.org
2023-05-04 0:42 ` pinskia at gcc dot gnu.org
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-04 0:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2023-05-04
Ever confirmed|0 |1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
2023-05-04 0:41 ` [Bug tree-optimization/109722] " pinskia at gcc dot gnu.org
@ 2023-05-04 0:42 ` pinskia at gcc dot gnu.org
2023-05-04 3:35 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-04 0:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note I accidently found this while creating a patch for PR 101541 and I had
messed up creating ABSU when I didn't need to and it was causing the testsuite
patterns in tree-ssa/vrp20.c not to match (though it was optimized correctly
still).
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
2023-05-04 0:41 ` [Bug tree-optimization/109722] " pinskia at gcc dot gnu.org
2023-05-04 0:42 ` pinskia at gcc dot gnu.org
@ 2023-05-04 3:35 ` pinskia at gcc dot gnu.org
2023-05-04 23:41 ` pinskia at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-04 3:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This is the corrected version which surives a bootstrap:
/* Convert ABS[U]_EXPR<x> == 0 or ABS[U]_EXPR<x> != 0 to x == 0 or x != 0. */
(for op (abs absu)
(for eqne (eq ne)
(simplify
(eqne (op @0) zerop@1)
(eqne @0 { build_zero_cst (TREE_TYPE (@0)); }))))
I forgot the type of ABSU is always unsigned while its operand can be
different.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
` (2 preceding siblings ...)
2023-05-04 3:35 ` pinskia at gcc dot gnu.org
@ 2023-05-04 23:41 ` pinskia at gcc dot gnu.org
2023-05-05 5:23 ` cvs-commit at gcc dot gnu.org
2023-05-05 5:24 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-04 23:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
URL| |https://gcc.gnu.org/piperma
| |il/gcc-patches/2023-May/617
| |494.html
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Patch submitted:
https://gcc.gnu.org/pipermail/gcc-patches/2023-May/617494.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
` (3 preceding siblings ...)
2023-05-04 23:41 ` pinskia at gcc dot gnu.org
@ 2023-05-05 5:23 ` cvs-commit at gcc dot gnu.org
2023-05-05 5:24 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-05-05 5:23 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pinskia@gcc.gnu.org>:
https://gcc.gnu.org/g:6fe385eac6ff8ecddb6cbdff2c706b27b5137006
commit r14-488-g6fe385eac6ff8ecddb6cbdff2c706b27b5137006
Author: Andrew Pinski <apinski@marvell.com>
Date: Thu May 4 23:37:51 2023 +0000
MATCH: Add ABSU<a> == 0 to a == 0 simplification
There is already an `ABS<a> == 0` to `a == 0` pattern,
this just extends that to ABSU too.
OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
PR tree-optimization/109722
gcc/ChangeLog:
* match.pd: Extend the `ABS<a> == 0` pattern
to cover `ABSU<a> == 0` too.
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/abs-1.c: New test.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tree-optimization/109722] ABSU<a> == 0 is not optimized to just a == 0
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
` (4 preceding siblings ...)
2023-05-05 5:23 ` cvs-commit at gcc dot gnu.org
@ 2023-05-05 5:24 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-05 5:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109722
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |14.0
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Fixed.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-05-05 5:24 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-04 0:40 [Bug tree-optimization/109722] New: ABSU<a> == 0 is not optimized to just a == 0 pinskia at gcc dot gnu.org
2023-05-04 0:41 ` [Bug tree-optimization/109722] " pinskia at gcc dot gnu.org
2023-05-04 0:42 ` pinskia at gcc dot gnu.org
2023-05-04 3:35 ` pinskia at gcc dot gnu.org
2023-05-04 23:41 ` pinskia at gcc dot gnu.org
2023-05-05 5:23 ` cvs-commit at gcc dot gnu.org
2023-05-05 5:24 ` 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).