mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
Change llvm.gcroot to not init the root to null at runtime, this prevents
using it for live-in values etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41879 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ea58310496
commit
36597a5ddb
@ -166,9 +166,7 @@ interface that front-end authors should generate code for.
|
|||||||
The <tt>llvm.gcroot</tt> intrinsic is used to inform LLVM of a pointer variable
|
The <tt>llvm.gcroot</tt> intrinsic is used to inform LLVM of a pointer variable
|
||||||
on the stack. The first argument contains the address of the variable on the
|
on the stack. The first argument contains the address of the variable on the
|
||||||
stack, and the second contains a pointer to metadata that should be associated
|
stack, and the second contains a pointer to metadata that should be associated
|
||||||
with the pointer (which <b>must</b> be a constant or global value address). At
|
with the pointer (which <b>must</b> be a constant or global value address).</p>
|
||||||
runtime, the <tt>llvm.gcroot</tt> intrinsic stores a null pointer into the
|
|
||||||
specified location to initialize the pointer.</p>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Consider the following fragment of Java code:
|
Consider the following fragment of Java code:
|
||||||
@ -193,6 +191,9 @@ Entry:
|
|||||||
%X = alloca %Object*
|
%X = alloca %Object*
|
||||||
...
|
...
|
||||||
|
|
||||||
|
;; Java null-initializes pointers.
|
||||||
|
store %Object* null, %Object** %X
|
||||||
|
|
||||||
;; "CodeBlock" is the block corresponding to the start
|
;; "CodeBlock" is the block corresponding to the start
|
||||||
;; of the scope above.
|
;; of the scope above.
|
||||||
CodeBlock:
|
CodeBlock:
|
||||||
|
@ -284,10 +284,7 @@ bool LowerGC::runOnFunction(Function &F) {
|
|||||||
new StoreInst(Null, RootPtrPtr, IP);
|
new StoreInst(Null, RootPtrPtr, IP);
|
||||||
|
|
||||||
// Each occurrance of the llvm.gcroot intrinsic now turns into an
|
// Each occurrance of the llvm.gcroot intrinsic now turns into an
|
||||||
// initialization of the slot with the address and a zeroing out of the
|
// initialization of the slot with the address.
|
||||||
// address specified.
|
|
||||||
new StoreInst(Constant::getNullValue(PtrLocTy->getElementType()),
|
|
||||||
GCRoots[i]->getOperand(1), GCRoots[i]);
|
|
||||||
new StoreInst(GCRoots[i]->getOperand(1), RootPtrPtr, GCRoots[i]);
|
new StoreInst(GCRoots[i]->getOperand(1), RootPtrPtr, GCRoots[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user