[llvm-commits] CVS: llvm/lib/Transforms/Scalar/LowerGC.cpp

Chris Lattner lattner at cs.uiuc.edu
Wed Jul 21 22:51:23 PDT 2004



Changes in directory llvm/lib/Transforms/Scalar:

LowerGC.cpp updated: 1.4 -> 1.5

---
Log message:

Update GC intrinsics to take a pointer to the object as well as a pointer
to the field being updated.  Patch contributed by Tobias Nurmiranta


---
Diffs of the changes:  (+8 -5)

Index: llvm/lib/Transforms/Scalar/LowerGC.cpp
diff -u llvm/lib/Transforms/Scalar/LowerGC.cpp:1.4 llvm/lib/Transforms/Scalar/LowerGC.cpp:1.5
--- llvm/lib/Transforms/Scalar/LowerGC.cpp:1.4	Sun Jul 18 03:34:19 2004
+++ llvm/lib/Transforms/Scalar/LowerGC.cpp	Thu Jul 22 00:51:13 2004
@@ -109,10 +109,10 @@
   // If the program is using read/write barriers, find the implementations of
   // them from the GC runtime library.
   if (GCReadInt)        // Make:  sbyte* %llvm_gc_read(sbyte**)
-    GCRead = M.getOrInsertFunction("llvm_gc_read", VoidPtr, VoidPtrPtr, 0);
+    GCRead = M.getOrInsertFunction("llvm_gc_read", VoidPtr, VoidPtr, VoidPtrPtr, 0);
   if (GCWriteInt)       // Make:  void %llvm_gc_write(sbyte*, sbyte**)
     GCWrite = M.getOrInsertFunction("llvm_gc_write", Type::VoidTy,
-                                    VoidPtr, VoidPtrPtr, 0);
+                                    VoidPtr, VoidPtr, VoidPtrPtr, 0);
 
   // If the program has GC roots, get or create the global root list.
   if (GCRootInt) {
@@ -182,14 +182,17 @@
               CI->setOperand(0, GCWrite);
               // Insert casts of the operands as needed.
               Coerce(CI, 1, VoidPtr);
-              Coerce(CI, 2, VoidPtrPtr);
+              Coerce(CI, 2, VoidPtr);
+              Coerce(CI, 3, VoidPtrPtr);
             } else {
-              Coerce(CI, 1, VoidPtrPtr);
+              Coerce(CI, 1, VoidPtr);
+              Coerce(CI, 2, VoidPtrPtr);
               if (CI->getType() == VoidPtr) {
                 CI->setOperand(0, GCRead);
               } else {
                 // Create a whole new call to replace the old one.
-                CallInst *NC = new CallInst(GCRead, CI->getOperand(1),
+                CallInst *NC = new CallInst(GCRead, CI->getOperand(1), 
+                                            CI->getOperand(2),
                                             CI->getName(), CI);
                 Value *NV = new CastInst(NC, CI->getType(), "", CI);
                 CI->replaceAllUsesWith(NV);





More information about the llvm-commits mailing list