public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug tree-optimization/113411] New: ABS<a>*ABS<b> can be simplified to ABS<a*b> @ 2024-01-16 0:23 pinskia at gcc dot gnu.org 2024-01-16 8:13 ` [Bug tree-optimization/113411] " rguenth at gcc dot gnu.org 2024-01-21 9:58 ` pinskia at gcc dot gnu.org 0 siblings, 2 replies; 3+ messages in thread From: pinskia at gcc dot gnu.org @ 2024-01-16 0:23 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113411 Bug ID: 113411 Summary: ABS<a>*ABS<b> can be simplified to ABS<a*b> Product: gcc Version: 14.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: ``` static inline int abs(int a) { signed b = a; if (a < 0) b = -b; return b; } int foo1(int a, int b) { return abs(a) * abs(b); } ``` foo1 can be simplified down to `abs(a*b)`. Note I think this is only valid for signed overflowable types and not valid with -fwrapv (but I could be wrong). Maybe ok for real types with -ffast-math. ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug tree-optimization/113411] ABS<a>*ABS<b> can be simplified to ABS<a*b> 2024-01-16 0:23 [Bug tree-optimization/113411] New: ABS<a>*ABS<b> can be simplified to ABS<a*b> pinskia at gcc dot gnu.org @ 2024-01-16 8:13 ` rguenth at gcc dot gnu.org 2024-01-21 9:58 ` pinskia at gcc dot gnu.org 1 sibling, 0 replies; 3+ messages in thread From: rguenth at gcc dot gnu.org @ 2024-01-16 8:13 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113411 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2024-01-16 Status|UNCONFIRMED |NEW --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- I think it's OK for reals with -fno-rounding-math. It's valid for integers with or without undefined overflow, the corner case to consider is abs(-INT_MAX - 1) * abs (b) where with undefined overflow the abs() is already invoking undefined behavior. The problematical multiplication is (-INT_MAX-1) * -1 but we cannot arrive at this from a defined input. For abs(a*b) the problematical input is -INT_MAX - 1 but we can't arrive at that either (b == 1 with a == -INT_MAX-1 is undefined, b == -1 the same). ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug tree-optimization/113411] ABS<a>*ABS<b> can be simplified to ABS<a*b> 2024-01-16 0:23 [Bug tree-optimization/113411] New: ABS<a>*ABS<b> can be simplified to ABS<a*b> pinskia at gcc dot gnu.org 2024-01-16 8:13 ` [Bug tree-optimization/113411] " rguenth at gcc dot gnu.org @ 2024-01-21 9:58 ` pinskia at gcc dot gnu.org 1 sibling, 0 replies; 3+ messages in thread From: pinskia at gcc dot gnu.org @ 2024-01-21 9:58 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113411 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Blocks| |56355 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- PR 56355 is the same but for floating point already ... Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56355 [Bug 56355] abs and multiplication ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-01-21 9:58 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-01-16 0:23 [Bug tree-optimization/113411] New: ABS<a>*ABS<b> can be simplified to ABS<a*b> pinskia at gcc dot gnu.org 2024-01-16 8:13 ` [Bug tree-optimization/113411] " rguenth at gcc dot gnu.org 2024-01-21 9:58 ` 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).