[Statepoints 1/4] Statepoint infrastructure for garbage collection: IR Intrinsics
authorPhilip Reames <listmail@philipreames.com>
Mon, 1 Dec 2014 21:18:12 +0000 (21:18 +0000)
committerPhilip Reames <listmail@philipreames.com>
Mon, 1 Dec 2014 21:18:12 +0000 (21:18 +0000)
commit204e21b51a87e9e0738865cfea2025199a694e96
tree3cb56d824d524e35f656af25cd7b0c089ba8dbbb
parentb043278834860aa6233a25f71506c8826e818de4
[Statepoints 1/4] Statepoint infrastructure for garbage collection: IR Intrinsics

The statepoint intrinsics are intended to enable precise root tracking through the compiler as to support garbage collectors of all types. The addition of the statepoint intrinsics to LLVM should have no impact on the compilation of any program which does not contain them. There are no side tables created, no extra metadata, and no inhibited optimizations.

A statepoint works by transforming a call site (or safepoint poll site) into an explicit relocation operation. It is the frontend's responsibility (or eventually the safepoint insertion pass we've developed, but that's not part of this patch series) to ensure that any live pointer to a GC object is correctly added to the statepoint and explicitly relocated. The relocated value is just a normal SSA value (as seen by the optimizer), so merges of relocated and unrelocated values are just normal phis. The explicit relocation operation, the fact the statepoint is assumed to clobber all memory, and the optimizers standard semantics ensure that the relocations flow through IR optimizations correctly.

This is the first patch in a small series.  This patch contains only the IR parts; the documentation and backend support will be following separately.  The entire series can be seen as one combined whole in http://reviews.llvm.org/D5683.

Reviewed by: atrick, ributzka

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223078 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/Intrinsics.td
lib/Analysis/TargetTransformInfo.cpp
lib/IR/Verifier.cpp
test/Verifier/statepoint.ll [new file with mode: 0644]