[llvm-dev] EmitTargetCodeForMemSet & LTO issue
Teresa Johnson via llvm-dev
llvm-dev at lists.llvm.org
Fri Aug 28 08:51:15 PDT 2020
ThinLTO's whole program analysis is driven off of the linker symbol
resolution (at least in the case of lld, gold, bfd). Presumably when it
gets into the ThinLTO link, the linker does not see any uses of your
alternate memset and it is therefore removed as dead code. Have you tried
marking it with __attribute__((used))? Another thing that might work is to
mark it weak.
On Fri, Aug 28, 2020 at 8:26 AM Romaric Jodin via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hi everyone,
> I have 2 implementations of "memset". A standard one, and another one
> optimized when the pointer and the size respect some specific constraints.
> I am able to choose the proper one in the "EmitTargetCodeForMemSet" method
> that I implemented for my backend.
> My issue is when I am compiling with the LTO optimisation, the linker
> tells me that the optimized memset symbol is undefined ("*ld.lld: error:
> undefined symbol: __memset_opt*"). I've looked into theLTO archive used
> and I found both memset functions.
> It feels like when the compiler gets in "EmitTargetCodeForMemSet", it has
> already forgotten about the optimized memset function that was in the
> archive because it was not used initially.
> Any idea why?
> Thanks in advance,
> JODIN Romaric
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
Teresa Johnson | Software Engineer | tejohnson at google.com |
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev