[llvm-dev] How to lower LLVM vector math intrinsics to symbol calls

Jon Chesterfield via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 15 07:48:06 PDT 2019


>
> Message: 5
> Date: Sun, 14 Jul 2019 10:40:27 +0200
> From: Gonzalo BG via llvm-dev <llvm-dev at lists.llvm.org>
> To: llvm-dev at lists.llvm.org
> Subject: [llvm-dev] How to lower LLVM vector math intrinsics to symbol
>         calls   ?
> Message-ID:
>         <
> CAPMgRLQ6gRpkRxv_ocwc_RWuyF_tkgkes4af2HfAzRrH91juyQ at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> >From a language frontend that generates LLVM-IR containing vector math
> intrinsics, how can I tell LLVM to lower those to specific symbols ?
> ...
> I kind of assumed that there must be a way for frontends too hook in
> symbols to which to lower the intrinsics, but it appears that all symbol
> lowering is hardcoded in LowerIntrinsic. For example, if instead of
> emitting `_memcpy` for `llvm.memcpy` I wanted that intrinsic to call a
> symbol `_foo` instead, is that possible ?
>
> What would be the simplest way to achieve this ? Could I insert my own
> `LowerIntrinsic` pass that runs before the LLVM one, doing the lowering
> that I want?
>

I wrote a (trivial) pass that walked basic blocks looking for various
function calls and rewrote them to symbols that were provided by a vector
version of libm. Essentially a string switch and some type checks. In my
case I ran it after vectorisation but there's a fair degree of control over
when passes are run. Immediately after the front end sounds like it would
suit you. Failing that, you can always look for whatever LowerIntrinsic
rewrote them to.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190715/51db9adc/attachment.html>


More information about the llvm-dev mailing list