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). Jakub