[llvm-dev] Any plan to implement JIT for RISC-V ?

Stefan Gränitz via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 4 06:31:06 PST 2022


Hi Martin, this is a great question. Let me try to provide some info and 
some pointers. Please note that it's likely incomplete.

> Aside from jitlink what is missing to make the "Building a JIT" 
> tutorial fully functional? 
Some details here:
https://llvm.org/OpenProjects.html#llvm_build_jit_tutorial

> On top of that what is missing for lli?
I think lli is maintained mostly to remain functional right now. Last 
year in spring I added JITLink debug support and the ORC greedy mode. 
Since then it doesn't seem so much has happened [1] and I don't know of 
any efforts to refactor outdated code or bring up new ORC/JITLink 
features. The latter are rather exposed via the llvm-jitlink tool [2].
[1] https://github.com/llvm/llvm-project/commits/main/llvm/tools/lli/lli.cpp
[2] 
https://github.com/llvm/llvm-project/commits/main/llvm/tools/llvm-jitlink/llvm-jitlink.cpp

> Since someone already started with the JIT implementation for RISCV I 
> was wondering which steps are missing. 
Here's a few things I am aware of. I am sure @Stephen and @Lang (cc) can 
add more:

* The llvm-jitlink tool is missing a `registerRISCVGraphInfo()` 
implementation. Its session dumps will be incomplete:
https://github.com/llvm/llvm-project/blob/49f23afdc3453ad6834f32f69b48aa88b5d17338/llvm/tools/llvm-jitlink/llvm-jitlink.cpp#L1074

* Only a hand-full of relocations were implemented so far [3]. 
BinaryFormat has a list of all relocations known to LLVM [4].
[3] 
https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/ExecutionEngine/JITLink/riscv.h
[4] 
https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def

* There is no optimization pass that would relax unnecessary GOT and PLT 
stubs [5]. Usually, stubs are allocated for relative relocations that A: 
can overflow (i.e. target address out of range) and/or B: might change 
(e.g. for hot code optimizations). Both, ELF and MachO implementations 
for x86_64 do support it to some degree [6]. In context of RISCV it 
might be interesting to combine this with the next item.
[5] https://reviews.llvm.org/D107688
[6] 
https://github.com/llvm/llvm-project/commit/cc3115cd1d35b7325d4f1d53f860048e32e82e43

* None of the JIT backends has a way to track which GOT and PLT stubs 
are actually in use (not relaxed at link-time) and which ones are not in 
use (have been relaxed). I think the latter should be reusable for stubs 
in subsequent link graphs in order to allow clients to save a few bytes 
of memory in cases where it matters.

> Is there a series of commits for x86 or ARM to take inspiration from?
Not really. I started an Aarch64 implementation in August [7], but so 
far didn't find the time to continue working on it. Other people's 
attempts to extend it weren't successful yet [8]. IMHO the biggest 
showstopper at this point is the complexity of tests. Under the hood 
#jitlink-check lines in LIT tests use RuntimeDyldChecker which is, 
basically, undocumented [9].
[7] https://reviews.llvm.org/D108986
[8] https://reviews.llvm.org/D112451
[9] https://reviews.llvm.org/D112451#inline-1072133

I hope it helps. If you want to work on any of this or you want to 
discuss things in more detail, you might want to join the #jit channel 
in LLVM Discord:
https://discord.gg/SsDVj7Bf

Cheers,
Stefan

On 29/12/2021 19:29, Martin Troiber via llvm-dev wrote:
> Hi all,
>
> Since someone already started with the JIT implementation for RISCV I 
> was wondering which steps are missing.
>
> Is there a series of commits for x86 or ARM to take inspiration from?
>
> What is the current state of llvm-jitlink on RISCV?
>
> Aside from jitlink what is missing to make the "Building a JIT" 
> tutorial fully functional?
>
> On top of that what is missing for lli?
>
> I would be interested in helping with this effort so a few pointers in 
> the right direction would be great.
>
> Best wishes
>
> Martin
>
> On 17.07.21 08:35, llvm-dev at lists.llvm.org (Lang Hames via 
> llvm-dev) wrote:
>> Hi All,
>>
>> Someone submitted a review for a JITLink RISCV implementation 
>> recently --
>> https://reviews.llvm.org/D105429. Was this one of you? :)
>>
>> -- Lang.
>>
>> On Thu, Apr 22, 2021 at 6:15 AM Stefan Gränitz <stefan.graenitz at 
>> gmail.com>
>> wrote:
>>
>>> As codegen exists for RISCV, this comes down to providing a proper link
>>> step I believe. For the longest time LLVM JIT used RuntimeDyld for 
>>> it, but
>>> it hasn't seen many extensions recently. JITLink has backends for MachO
>>> x86-64/ARM64 and ELF x86-64 currently. I think ELF ARM32/64 are highly
>>> desirable and there seems to be interest in a COFF backend as well. 
>>> I like
>>> the idea of adding RISCV here!
>>>
>>> The vast majority of code was written by Lang Hames (cc). I had the
>>> opportunity to help with a few details in the ELF implementation and 
>>> I am
>>> familiar with most of the relevant JIT parts. Adding a backend for a 
>>> new
>>> arch, however, requires decent domain knowledge. If there's an 
>>> effort to
>>> make one, I am happy to join, but it's a little more than a spare time
>>> project.
>>>
>>> On 21/04/2021 05:47, Du Chao via llvm-dev wrote:
>>>
>>> Hi all,
>>>
>>> May I know if there is any plan to add RISCV support in LLVM JIT ?
>>>
>>> Regards,
>>> Du Chao
>>>
>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing listllvm-dev at 
>>> lists.llvm.orghttps://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>> -- https://weliveindetail.github.io/blog/about/
>>>
>>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 
https://weliveindetail.github.io/blog/about/



More information about the llvm-dev mailing list