aboutsummaryrefslogtreecommitdiff
path: root/docs/Statepoints.rst
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2015-07-28 23:50:30 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2015-07-28 23:50:30 +0000
commit44d65eac432eaa3e926ec404a55e66f823cb0848 (patch)
tree4b08d78209c1a3f84232eb4a5299d78bc66537ce /docs/Statepoints.rst
parenta27dfaf544862befdbd45c77cd915c0bf4ffeef0 (diff)
downloadllvm-44d65eac432eaa3e926ec404a55e66f823cb0848.tar.gz
[Statepoints] Let patchable statepoints have a symbolic call target.
Summary: As added initially, statepoints required their call targets to be a constant pointer null if ``numPatchBytes`` was non-zero. This turns out to be a problem ergonomically, since there is no way to mark patchable statepoints as calling a (readable) symbolic value. This change remove the restriction of requiring ``null`` call targets for patchable statepoints, and changes PlaceSafepoints to maintain the symbolic call target through its transformation. Reviewers: reames, swaroop.sridhar Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11550 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243502 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/Statepoints.rst')
-rw-r--r--docs/Statepoints.rst8
1 files changed, 5 insertions, 3 deletions
diff --git a/docs/Statepoints.rst b/docs/Statepoints.rst
index 0d91f1b16b0..2b01374a9ec 100644
--- a/docs/Statepoints.rst
+++ b/docs/Statepoints.rst
@@ -331,14 +331,16 @@ the user will patch over the 'num patch bytes' bytes of nops with a
calling sequence specific to their runtime before executing the
generated machine code. There are no guarantees with respect to the
alignment of the nop sequence. Unlike :doc:`StackMaps` statepoints do
-not have a concept of shadow bytes.
+not have a concept of shadow bytes. Note that semantically the
+statepoint still represents a call or invoke to 'target', and the nop
+sequence after patching is expected to represent an operation
+equivalent to a call or invoke to 'target'.
The 'target' operand is the function actually being called. The
target can be specified as either a symbolic LLVM function, or as an
arbitrary Value of appropriate function type. Note that the function
type must match the signature of the callee and the types of the 'call
-parameters' arguments. If 'num patch bytes' is non-zero then 'target'
-has to be the constant pointer null of the appropriate function type.
+parameters' arguments.
The '#call args' operand is the number of arguments to the actual
call. It must exactly match the number of arguments passed in the