On Thu, Oct 12, 2017 at 01:30:34PM +0200, Martin Liška wrote: > There's one false positive I've noticed: > > $ cat /tmp/ptr-cmp.c > int > __attribute__((noinline)) > foo(char *p1, char *p2) > { > if (p2 != 0 && p1 > p2) > return 0; > > return 1; > }
Guess that is an argument for instrumenting pointer-compare/pointer-subtract earlier (in the FEs, perhaps into internal-fn). Because then it will have side-effects and thus folding (generic as well as during gimplification and on early gimple) will not do this kind of optimization with it. Of course you'd need to handle constexpr and folding in initializers then... Jakub