Hm. Are you sure this is wise? I realize my patch didn't provide root
initialization, but I have that fixed locally. Without liveness
analysis, leaving stack roots uninitialized seems unwise, since gc
points are not entirely predictable from the IR.
On 2007-09-12, at 13:53, Chris Lattner wrote:
Author: lattner
Date: Wed Sep 12 12:53:10 2007
New Revision: 41879
URL: http://llvm.org/viewvc/llvm-project?rev=41879&view=rev
Log:
Change llvm.gcroot to not init the root to null at runtime, this
prevents
using it for live-in values etc.
Modified:
llvm/trunk/docs/GarbageCollection.html
llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
Modified: llvm/trunk/docs/GarbageCollection.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/
GarbageCollection.html?rev=41879&r1=41878&r2=41879&view=diff
======================================================================
========
--- llvm/trunk/docs/GarbageCollection.html (original)
+++ llvm/trunk/docs/GarbageCollection.html Wed Sep 12 12:53:10 2007
@@ -166,9 +166,7 @@
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 @@
%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:
Modified: llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/
Scalar/LowerGC.cpp?rev=41879&r1=41878&r2=41879&view=diff
======================================================================
========
--- llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp Wed Sep 12
12:53:10 2007
@@ -284,10 +284,7 @@
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]);
}
_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
— Gordon
_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits