[Bug tree-optimization/62156] memcmp doesn't see through memcpy at compile-time
glisse at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 19 11:15:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62156
--- Comment #5 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to rguenther@suse.de from comment #4)
> Eventually worth "fixing" the libstdc++ side to generate better
> initial code?
Replacing memcpy(,,3)+assign(,'\0') with memcpy(,,4) can indeed be done at the
libstdc++ level (although simplify_builtin_call in tree-ssa-forwprop.c already
does a transformation extremely similar and could be extended). As shown in
comment #3, the test/jump will disappear when we move to C++11.
But essentially, it can't avoid doing memcpy, setting the length of the string,
and calling memcmp.
One surprising thing it does not is, at the beginning of operator==, check if
the sizes are the same before calling memcmp...
> Other than that it seems this would need careful special-handling
> in value-numbering ...
That seems like the best place indeed.
> not sure if optimizing std::string("foo") == "bar" is important.
The question is how many other optimizations this would enable. I remember
other cases where we couldn't see through memcpy well enough (PR 58483 for
instance, there were others probably more relevant), but I don't know if this
would help them.
In any case, I agree this isn't a priority.
More information about the Gcc-bugs
mailing list