From 36597a5ddb11d9f84638a8e1e8cfa28292eeced0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 12 Sep 2007 17:53:10 +0000 Subject: 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 --- docs/GarbageCollection.html | 7 ++++--- lib/Transforms/Scalar/LowerGC.cpp | 5 +---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/GarbageCollection.html b/docs/GarbageCollection.html index 0accd0c78a..e39e85ce3c 100644 --- a/docs/GarbageCollection.html +++ b/docs/GarbageCollection.html @@ -166,9 +166,7 @@ interface that front-end authors should generate code for. The llvm.gcroot 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 must be a constant or global value address). At -runtime, the llvm.gcroot intrinsic stores a null pointer into the -specified location to initialize the pointer.

+with the pointer (which must be a constant or global value address).

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/lib/Transforms/Scalar/LowerGC.cpp b/lib/Transforms/Scalar/LowerGC.cpp index 98070995af..bac7ac799b 100644 --- a/lib/Transforms/Scalar/LowerGC.cpp +++ b/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]); } -- cgit v1.2.3