[llvm-commits] [llvm] r41668 - in /llvm/trunk: lib/Transforms/Scalar/LowerGC.cpp test/CodeGen/Generic/GC/lower_gcroot.ll
Evan Cheng
evan.cheng at apple.com
Fri Aug 31 19:00:51 PDT 2007
Author: evancheng
Date: Fri Aug 31 21:00:51 2007
New Revision: 41668
URL: http://llvm.org/viewvc/llvm-project?rev=41668&view=rev
Log:
Fix a gcroot lowering bug.
Added:
llvm/trunk/test/CodeGen/Generic/GC/lower_gcroot.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp?rev=41668&r1=41667&r2=41668&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LowerGC.cpp Fri Aug 31 21:00:51 2007
@@ -262,7 +262,7 @@
cast<PointerType>(GCRootInt->getFunctionType()->getParamType(0));
Constant *Null = ConstantPointerNull::get(PtrLocTy);
- // Initialize all of the gcroot records now, and eliminate them as we go.
+ // Initialize all of the gcroot records now.
for (unsigned i = 0, e = GCRoots.size(); i != e; ++i) {
// Initialize the meta-data pointer.
Par[2] = ConstantInt::get(Type::Int32Ty, i);
@@ -282,7 +282,6 @@
new StoreInst(Constant::getNullValue(PtrLocTy->getElementType()),
GCRoots[i]->getOperand(1), GCRoots[i]);
new StoreInst(GCRoots[i]->getOperand(1), RootPtrPtr, GCRoots[i]);
- GCRoots[i]->getParent()->getInstList().erase(GCRoots[i]);
}
// Now that the record is all initialized, store the pointer into the global
@@ -290,6 +289,10 @@
Value *C = new BitCastInst(AI, PointerType::get(MainRootRecordType), "", IP);
new StoreInst(C, RootChain, IP);
+ // Eliminate all the gcroot records now.
+ for (unsigned i = 0, e = GCRoots.size(); i != e; ++i)
+ GCRoots[i]->getParent()->getInstList().erase(GCRoots[i]);
+
// On exit from the function we have to remove the entry from the GC root
// chain. Doing this is straight-forward for return and unwind instructions:
// just insert the appropriate copy.
Added: llvm/trunk/test/CodeGen/Generic/GC/lower_gcroot.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/GC/lower_gcroot.ll?rev=41668&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Generic/GC/lower_gcroot.ll (added)
+++ llvm/trunk/test/CodeGen/Generic/GC/lower_gcroot.ll Fri Aug 31 21:00:51 2007
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | llc
+
+ %Env = type opaque*
+
+define void @.main(%Env) {
+ call void @llvm.gcroot( %Env* null, %Env null )
+ unreachable
+}
+
+declare void @llvm.gcroot(%Env*, %Env)
More information about the llvm-commits
mailing list