diff options
author | Chris Lattner <sabre@nondot.org> | 2007-09-12 17:53:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-09-12 17:53:10 +0000 |
commit | 7b412cb823f09378d45a0d0baf1127f4466c640c (patch) | |
tree | d79f193b194b5334cf962adab1c2d92b94c96c1b | |
parent | 0249104aa542196e7ce43cb3e71d107c573a53b2 (diff) | |
download | llvm-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.html | 7 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/LowerGC.cpp | 5 |
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]); } |