[llvm] [GlobalISel] Expand IRTranslator docs. NFC (PR #89186)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 18 02:28:47 PDT 2024
================
@@ -51,8 +51,37 @@ Translating Function Calls
The ``IRTranslator`` also implements the ABI's calling convention by lowering
calls, returns, and arguments to the appropriate physical register usage and
-instruction sequences. This is achieved using the ``CallLowering``
-implementation,
+instruction sequences. This is achieved using the ``CallLowering`` interface,
+which provides several hooks that targets should implement:
+``lowerFormalArguments``, ``lowerReturn``, ``lowerCall`` etc.
+
+In essence, all of these hooks need to find a way to move the argument/return
+values between the virtual registers used in the rest of the function and either
+physical registers or the stack, as dictated by the ABI. This may involve
+splitting large types into smaller ones, introducing sign/zero extensions etc.
+In order to share as much of this code as possible between the different
+backends, ``CallLowering`` makes available a few helpers and interfaces:
+
+* ``ArgInfo`` - used for formal arguments, but also return values, call
+ parameters and call returns; contains info such as the IR type, the virtual
+ registers etc; large values will likely have to be split into several
+ ``ArgInfo`` objects (``CallLowering::splitToValueTypes`` can help with that);
+
+* ``ValueAssigner`` - uses a ``CCAssignFn``, usually generated by TableGen (see
+ :ref:`backend-calling-convs`), to decide where to put each
+ ``ArgInfo`` (physical register or stack); backends can use the provided
+ ``IncomingValueAssigner`` (for formal arguments and call results) and
+ ``OutgoingValueAssigner`` (for call paramters and function returns), but it's
----------------
jayfoad wrote:
Typo "parameters"
https://github.com/llvm/llvm-project/pull/89186
More information about the llvm-commits
mailing list