Jon Chesterfield via llvm-dev
2019-Jul-15 14:48 UTC
[llvm-dev] How to lower LLVM vector math intrinsics to symbol calls
> > 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>