aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-09-12 17:53:10 +0000
committerChris Lattner <sabre@nondot.org>2007-09-12 17:53:10 +0000
commit7b412cb823f09378d45a0d0baf1127f4466c640c (patch)
treed79f193b194b5334cf962adab1c2d92b94c96c1b
parent0249104aa542196e7ce43cb3e71d107c573a53b2 (diff)
downloadllvm-7b412cb823f09378d45a0d0baf1127f4466c640c.zip
llvm-7b412cb823f09378d45a0d0baf1127f4466c640c.tar.gz
llvm-7b412cb823f09378d45a0d0baf1127f4466c640c.tar.bz2
Change llvm.gcroot to not init the root to null at runtime, this prevents
using it for live-in values etc. llvm-svn: 41879
-rw-r--r--llvm/docs/GarbageCollection.html7
-rw-r--r--llvm/lib/Transforms/Scalar/LowerGC.cpp5
2 files changed, 5 insertions, 7 deletions
diff --git a/llvm/docs/GarbageCollection.html b/llvm/docs/GarbageCollection.html
index 0accd0c..e39e85c 100644
--- a/llvm/docs/GarbageCollection.html
+++ b/llvm/docs/GarbageCollection.html
@@ -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
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
-with the pointer (which <b>must</b> be a constant or global value address). At
-runtime, the <tt>llvm.gcroot</tt> intrinsic stores a null pointer into the
-specified location to initialize the pointer.</p>
+with the pointer (which <b>must</b> be a constant or global value address).</p>
<p>
Consider the following fragment of Java code:
@@ -193,6 +191,9 @@ Entry:
%X = alloca %Object*
...
+ ;; Java null-initializes pointers.
+ store %Object* null, %Object** %X
+
;; "CodeBlock" is the block corresponding to the start
;; of the scope above.
CodeBlock:
diff --git a/llvm/lib/Transforms/Scalar/LowerGC.cpp b/llvm/lib/Transforms/Scalar/LowerGC.cpp
index 9807099..bac7ac7 100644
--- a/llvm/lib/Transforms/Scalar/LowerGC.cpp
+++ b/llvm/lib/Transforms/Scalar/LowerGC.cpp
@@ -284,10 +284,7 @@ bool LowerGC::runOnFunction(Function &F) {
new StoreInst(Null, RootPtrPtr, IP);
// Each occurrance of the llvm.gcroot intrinsic now turns into an
- // initialization of the slot with the address and a zeroing out of the
- // address specified.
- new StoreInst(Constant::getNullValue(PtrLocTy->getElementType()),
- GCRoots[i]->getOperand(1), GCRoots[i]);
+ // initialization of the slot with the address.
new StoreInst(GCRoots[i]->getOperand(1), RootPtrPtr, GCRoots[i]);
}