On Wed, Apr 20, 2016 at 12:33 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Apr 20, 2016 at 11:44:08AM +0200, Richard Biener wrote: >> (simplify >> (BUILT_IN_STRCHR @0 integer_zerop) >> (pointer_plus @0 (BUILT_IN_STRLEN:size_type_node @0))) > > I still don't like this transformation and would very much prefer to see > using rawmemchr instead on targets that provide it, and also this is > something that IMHO should be done in the tree-ssa-strlen.c pass together > with the other optimizations in there. Similarly to stpcpy, which is also > non-standard (in POSIX, but not in C), we should just look at headers if > rawmemchr is defined with compatible prototype. > Also, strrchr (s, 0) should be folded to strchr (s, 0) or handled the same > like that one. > And, while x = strchr (s, 0) to x = rawmemchr (s, 0) is a reasonable -Os > transformation, x = s + strlen (s) is not, it makes code usually larger > (especially because it increases register pressure across the call).
Sure - agreed. So with the patch (simplify (BUILT_IN_STRRCHR @0 integer_zerop@1) (BUILT_IN_STRCHR @0 @1)) is possible at least ;) Richard. > Jakub