[PATCH] D155790: PreISelIntrinsicLowering: don't expand memcpys in minsize functions, even with no-builtins.

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 24 06:23:41 PDT 2023


arsenm added a comment.

In D155790#4526472 <https://reviews.llvm.org/D155790#4526472>, @efriedma wrote:

> As far as I know, before 3c848194f28decca41b7362f9dd35d4939797724 <https://reviews.llvm.org/rG3c848194f28decca41b7362f9dd35d4939797724>, things worked the following way:
>
> - LLVM optimizations wouldn't introduce llvm.memcpy calls into nobuiltin functions.
> - Any llvm.memcpy calls written explicitly in the input IR expand to "memcpy" (which we assume the user provides if necessary).
>
> Maybe you could argue the latter behavior is a "bug", but it's behavior we provided for many years, and users depend on it.  (And it's gcc-compatible.)

I've considered that the codegen pipeline can't deal with freestanding environments for fundamental intrinsics to be a major flaw.

I think the fix that avoids the current problem, and solves my desires is to move from checking TargetLibraryInfo.hasLibFunc(memcpy) to checking if TargetLoweringInfo::getLibcallName(memcpy) is valid (plus maybe some additional libcall-is-valid-for-addrspace checks?). Sorting out the general libcall mess for freestanding is a problem for another day

Independently of that, the lowering here could improve to optionally emit outlined implementations depending on target preference + minsize/optsize.

> 3c848194f28decca41b7362f9dd35d4939797724 <https://reviews.llvm.org/rG3c848194f28decca41b7362f9dd35d4939797724> changes things so that instead of calling "memcpy", we generate a bunch of terrible inline code.



> This apparently landed without review?

This was D152383 <https://reviews.llvm.org/D152383>


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155790/new/

https://reviews.llvm.org/D155790



More information about the llvm-commits mailing list