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:
Chris Lattner 2007-09-12 17:53:10 +00:00
parent ea58310496
commit 36597a5ddb
2 changed files with 5 additions and 7 deletions

View File

@ -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:

View File

@ -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]);
} }