comparison docs/StackMaps.rst @ 95:afa8332a0e37 LLVM3.8

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents 60c9769439b8
children 1172e4bd9c6f
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
219 is not a constant null. The function call and its arguments are 219 is not a constant null. The function call and its arguments are
220 lowered according to the calling convention specified at the 220 lowered according to the calling convention specified at the
221 intrinsic's callsite. Variants of the intrinsic with non-void return 221 intrinsic's callsite. Variants of the intrinsic with non-void return
222 type also return a value according to calling convention. 222 type also return a value according to calling convention.
223 223
224 On PowerPC, note that ``<target>`` must be the actual intended target of 224 On PowerPC, note that ``<target>`` must be the ABI function pointer for the
225 the indirect call. Specifically, even when compiling for the ELF V1 ABI, 225 intended target of the indirect call. Specifically, when compiling for the
226 ``<target>`` is not the function-descriptor address normally used as the C/C++ 226 ELF V1 ABI, ``<target>`` is the function-descriptor address normally used as
227 function-pointer representation. As a result, the call target must be local 227 the C/C++ function-pointer representation.
228 because no adjustment or restoration of the TOC pointer (in register r2) will
229 be performed.
230 228
231 Requesting zero patch point arguments is valid. In this case, all 229 Requesting zero patch point arguments is valid. In this case, all
232 variable operands are handled just like 230 variable operands are handled just like
233 ``llvm.experimental.stackmap.*``. The difference is that space will 231 ``llvm.experimental.stackmap.*``. The difference is that space will
234 still be reserved for patching, a call will be emitted, and a return 232 still be reserved for patching, a call will be emitted, and a return
499 specially when they are directly consumed by an intrinsics. (This is 497 specially when they are directly consumed by an intrinsics. (This is
500 the same requirement imposed by the llvm.gcroot intrinsic.) LLVM 498 the same requirement imposed by the llvm.gcroot intrinsic.) LLVM
501 transformations must not substitute the alloca with any intervening 499 transformations must not substitute the alloca with any intervening
502 value. This can be verified by the runtime simply by checking that the 500 value. This can be verified by the runtime simply by checking that the
503 stack map's location is a Direct location type. 501 stack map's location is a Direct location type.
502
503
504 Supported Architectures
505 =======================
506
507 Support for StackMap generation and the related intrinsics requires
508 some code for each backend. Today, only a subset of LLVM's backends
509 are supported. The currently supported architectures are X86_64,
510 PowerPC, and Aarch64.
511