mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[docs][statepoints] add a section spelling out simplifications for non-relocating GCs
llvm-svn: 346447
This commit is contained in:
parent
ce8fa793c4
commit
de62757478
@ -254,6 +254,28 @@ following command.
|
|||||||
|
|
||||||
opt -rewrite-statepoints-for-gc test/Transforms/RewriteStatepointsForGC/basics.ll -S | llc -debug-only=stackmaps
|
opt -rewrite-statepoints-for-gc test/Transforms/RewriteStatepointsForGC/basics.ll -S | llc -debug-only=stackmaps
|
||||||
|
|
||||||
|
Simplifications for Non-Relocating GCs
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Some of the complexity in the previous example is unnecessary for a
|
||||||
|
non-relocating collector. While a non-relocating collector still needs the
|
||||||
|
information about which location contain live references, it doesn't need to
|
||||||
|
represent explicit relocations. As such, the previously described explicit
|
||||||
|
lowering can be simplified to remove all of the ``gc.relocate`` intrinsic
|
||||||
|
calls and leave uses in terms of the original reference value.
|
||||||
|
|
||||||
|
Here's the explicit lowering for the previous example for a non-relocating
|
||||||
|
collector:
|
||||||
|
|
||||||
|
.. code-block:: llvm
|
||||||
|
|
||||||
|
define i8 addrspace(1)* @test1(i8 addrspace(1)* %obj)
|
||||||
|
gc "statepoint-example" {
|
||||||
|
call token (i64, i32, void ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @foo, i32 0, i32 0, i32 0, i32 0, i8 addrspace(1)* %obj)
|
||||||
|
ret i8 addrspace(1)* %obj
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Base & Derived Pointers
|
Base & Derived Pointers
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user