https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121711
Bug ID: 121711
Summary: `a - b == 16` should imply that `a == b + 16`
Product: gcc
Version: 16.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
Blocks: 85316, 116651
Target Milestone: ---
testcase:
```
void link_error();
void f0(int a, int b, int c)
{
int t = b - a;
if (t == 1)
{
if (a + 1 != b)
link_error();
}
}
void fp(int *a, int *b, int *c)
{
auto t = b - a;
if (t == 1)
{
if (a + 1 == b)
{
link_error();
}
}
}
void fp1(int *a, int *b, int *c)
{
if (b == a+1)
{
auto t = b - a;
if (t == 1)
{
link_error();
}
}
}
```
these all should be empty.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316
[Bug 85316] [meta-bug] VRP range propagation missed cases
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116651
[Bug 116651] vector::operator== on a newly created single element vector is not
that good