This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/83517] New: Missed optimization in math expression: (x+x)/x == 2
- From: "zamazan4ik at tut dot by" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 20 Dec 2017 21:16:07 +0000
- Subject: [Bug tree-optimization/83517] New: Missed optimization in math expression: (x+x)/x == 2
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83517
Bug ID: 83517
Summary: Missed optimization in math expression: (x+x)/x == 2
Product: gcc
Version: tree-ssa
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: zamazan4ik at tut dot by
Target Milestone: ---
gcc (trunk) with '-O3 -std=c++17 -ffast-math -funsafe-math-optimizations' for
this code:
int test(int x)
{
return (x+x)/x;
}
generates:
test(int):
lea eax, [rdi+rdi]
cdq
idiv edi
ret
Why? In this case we can return simply 2. Because there are only two corner
cases: when x is 0 and we have division by zero (it's UB), and when x+x is
integer overflow (it's also UB).
So we can simply optimize it. There are a lot of similar cases.