On Thu, 12 Apr 2018, Martin Liška wrote: > Hi. > > I'm reminding review request from Richi for generic part > and Uros/Honza for target part.
Not sure if I missed some important part of the discussion but for the testcase we want to preserve the tailcall, right? So it would be enough to set avoid_libcall to endp != 0 && CALL_EXPR_TAILCALL (exp) (and thus also handle stpcpy)? I'm not sure I like the interfacing of that to emit_block_move_hints very much. I'd have used sth like BLOCK_OP_ABORT_ON_LIBCALL and extend the interface in a way to return what kind of method it chose rather than just a bool. Not sure what gcc.dg/20050503-1.c did on non-x86 targets - the test runs on all archs but only x86 is ever tested for a result. So - I think tail-calling is prefered, and somehow in the PR the discussion wandered off to whether there's fast implementations or not - but the testcase looks for a tailcall where the source was a tailcall, that should be authorative for the "default" decision when the hook isn't implemented or doesn't cover the case. IMO target libraries have to be quite stupid if they have anything slower than void *mempcpy (void *dest, const void *src, size_t n) { return memcpy (dest, src, n) + n; } which should be not (very much) slower than a non-tailcall memcpy call. So -- remove the hook and instead use CALL_EXPR_TAILCALL (exp) instead of its result. Thanks, Richard.