[docs] Update JITLink's support matrix in the JITLink doc.
authorLang Hames <lhames@gmail.com>
Sun, 16 Jul 2023 00:19:35 +0000 (17:19 -0700)
committerLang Hames <lhames@gmail.com>
Sun, 16 Jul 2023 00:20:52 +0000 (17:20 -0700)
llvm/docs/JITLink.rst

index bb1e7c3..b17ce5e 100644 (file)
@@ -1082,48 +1082,68 @@ Major outstanding projects include:
   generic and should be split into an ELFLinkGraphBuilder base class along the
   same lines as the existing generic MachOLinkGraphBuilder.
 
-* Implement ELF support for arm64.
+* Implement support for arm32.
 
-  Once the architecture support code has been refactored to enable sharing and
-  ELF link graph construction has been refactored to allow re-use we should be
-  able to construct an ELF / arm64 JITLink implementation by combining
-  these existing pieces.
+* Implement support for other new architectures.
 
-* Implement support for new architectures.
-
-* Implement support for COFF.
-
-  There is no COFF implementation of JITLink yet. Such an implementation should
-  follow the MachO and ELF paths: a generic COFFLinkGraphBuilder base class that
-  can be specialized for each architecture.
+JITLink Availability and Feature Status
+---------------------------------------
 
-* Design and implement a shared-memory based JITLinkMemoryManager.
+The following table describes the status of the JITlink backends for various
+format / architecture combinations (as of July 2023).
 
-  One use-case that is expected to be common is out-of-process linking targeting
-  another process on the same machine. This allows JITs to sandbox JIT'd code.
-  For this use case a shared-memory based JITLinkMemoryManager would provide the
-  most efficient form of allocation. Creating one will require designing a
-  generic API for shared memory though, as LLVM does not currently have one.
+Support levels:
 
-JITLink Availability and Feature Status
----------------------------------------
+* None: No backend. JITLink will return an "architecture not supported" error.
+  Represented by empty cells in the table below.
+* Skeleton: A backend exists, but does not support commonly used relocations.
+  Even simple programs are likely to trigger an "unsupported relocation" error.
+  Backends in this state may be easy to improve by implementing new relocations.
+  Consider getting involved!
+* Basic: The backend supports simple programs, isn't ready for general use yet.
+* Usable: The backend is useable for general use for at least one code and
+  relocation model.
+* Good: The backend supports almost all relocations. Advanced features like
+  native thread local storage may not be available yet.
+* Complete: The backend supports all relocations and object format features.
 
 .. list-table:: Availability and Status
    :widths: 10 30 30 30
    :header-rows: 1
+   :stub-columns: 1
 
    * - Architecture
      - ELF
      - COFF
      - MachO
+   * - arm32
+     - Skeleton
+     -
+     -
    * - arm64
+     - Usable
+     -
+     - Good
+   * - LoongArch
+     - Good
+     -
+     -
+   * - PowerPC 64
+     - Usable
+     -
+     -
+   * - RISC-V
+     - Good
+     -
+     -
+   * - x86-32
+     - Basic
      -
      -
-     - Partial (small code model, PIC relocation model only)
    * - x86-64
-     - Partial
+     - Good
      -
-     - Full (except TLV and debugging)
+     - Good
 
 .. [1] See ``llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin`` for
        a full worked example.