public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
@ 2021-07-23 4:02 pinskia at gcc dot gnu.org
2021-07-23 4:02 ` [Bug tree-optimization/101591] " pinskia at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-23 4:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
Bug ID: 101591
Summary: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Target Milestone: ---
Take:
bool f(unsigned a, unsigned b)
{
return (a|b) == a;
}
This should be optimized to:
bool f(unsigned a, unsigned b)
{
return (b & ~a) ==/!= 0;
}
It might be only best if you we do for constant b's though.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101591] (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
@ 2021-07-23 4:02 ` pinskia at gcc dot gnu.org
2021-07-23 4:08 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-23 4:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I noticed this while working on PR96779
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101591] (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
2021-07-23 4:02 ` [Bug tree-optimization/101591] " pinskia at gcc dot gnu.org
@ 2021-07-23 4:08 ` pinskia at gcc dot gnu.org
2021-07-23 4:15 ` pinskia at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-23 4:08 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
Keywords| |easyhack
Last reconfirmed| |2021-07-23
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Mine, something like:
(for cmp (eq ne)
(simplify
(cmp:c (bit_ior @0 INTEGER_CST@1) @0)
(cmp:c (bit_and @1 (bit_not @0)) { build_zero_cst (TREE_TYPE(@0)); })))
Note
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101591] (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
2021-07-23 4:02 ` [Bug tree-optimization/101591] " pinskia at gcc dot gnu.org
2021-07-23 4:08 ` pinskia at gcc dot gnu.org
@ 2021-07-23 4:15 ` pinskia at gcc dot gnu.org
2021-07-27 10:36 ` rguenth at gcc dot gnu.org
2021-07-27 20:02 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-23 4:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> Mine, something like:
> (for cmp (eq ne)
> (simplify
> (cmp:c (bit_ior @0 INTEGER_CST@1) @0)
> (cmp:c (bit_and @1 (bit_not @0)) { build_zero_cst (TREE_TYPE(@0)); })))
>
> Note
maybe a power of 2 integer constant might be better because is just a shift and
an and in the end.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101591] (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
` (2 preceding siblings ...)
2021-07-23 4:15 ` pinskia at gcc dot gnu.org
@ 2021-07-27 10:36 ` rguenth at gcc dot gnu.org
2021-07-27 20:02 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-07-27 10:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Not sure if it is cheaper - it's one more operation on GIMPLE so (a|b) == a
looks more canonical?
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101591] (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
` (3 preceding siblings ...)
2021-07-27 10:36 ` rguenth at gcc dot gnu.org
@ 2021-07-27 20:02 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-27 20:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101591
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |DUPLICATE
Status|ASSIGNED |RESOLVED
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Not sure if it is cheaper - it's one more operation on GIMPLE so (a|b) == a
> looks more canonical?
I agree.
I filed the constant one as PR 101650 after not realizing I filed this one
already too :).
So this is a dup of bug 101650 really :).
*** This bug has been marked as a duplicate of bug 101650 ***
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-07-27 20:02 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-23 4:02 [Bug tree-optimization/101591] New: (a|b) ==/!= a -> (b & ~a) ==/!= 0 on gimple pinskia at gcc dot gnu.org
2021-07-23 4:02 ` [Bug tree-optimization/101591] " pinskia at gcc dot gnu.org
2021-07-23 4:08 ` pinskia at gcc dot gnu.org
2021-07-23 4:15 ` pinskia at gcc dot gnu.org
2021-07-27 10:36 ` rguenth at gcc dot gnu.org
2021-07-27 20:02 ` 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).