https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117601

            Bug ID: 117601
           Summary: Another missing optimization after rewrite of SCCP for
                    overflow
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: missed-optimization, TREE
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

>From looking at PR 117572, after a quick hack to match to do simple
reassociation with respect to pointer addition/minus, there is still some stuff
to optimize:
```
  _386 = (sizetype) &o;
  _390 = _386 + 2;
  h_391 = (char *) _390;
  h_392 = h_391 + 1;
  _394 = h_392 - &o;
  _395 = (int) _394;
```

Seems like h_391 could be optimized to just:
`&o p+ 2 ` . 
Which means _395 is just 3.

That is this:
```
typedef __SIZE_TYPE__ size_t;
extern char o[3];
int f(void)
{
  size_t t = (size_t)&o[0];
  t += 2;
  char *t1 = (char*)t;
  t1 += 1;
  return t1 - &o[0];
}
```

Which does get optimized to 3 at the RTL level

Reply via email to