Author: gordon
Date: Sat Dec 22 17:32:32 2007
New Revision: 45326

URL: http://llvm.org/viewvc/llvm-project?rev=45326&view=rev
Log:
Document a more robust implementation of performCustomLowering.

Modified:
    llvm/trunk/docs/GarbageCollection.html

Modified: llvm/trunk/docs/GarbageCollection.html
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/GarbageCollection.html?rev=45326&r1=45325&r2=45326&view=diff

==============================================================================
--- llvm/trunk/docs/GarbageCollection.html (original)
+++ llvm/trunk/docs/GarbageCollection.html Sat Dec 22 17:32:32 2007
@@ -1084,37 +1084,35 @@
 
 <blockquote><pre
 >#include "llvm/Module.h"
-#include "llvm/Instructions.h"
+#include "llvm/IntrinsicInst.h"
 
 bool MyCollector::initializeCustomLowering(Module &amp;M) {
   return false;
 }
 
 bool MyCollector::performCustomLowering(Function &amp;F) {
-  const Module *M = F.getParent();
-  
-  Function *GCReadInt  = M-&gt;getFunction("llvm.gcread"),
-           *GCWriteInt = M-&gt;getFunction("llvm.gcwrite"),
-           *GCRootInt  = M-&gt;getFunction("llvm.gcroot");
-  
   bool MadeChange = false;
   
   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
-    for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E;)
-      if (CallInst *CI = dyn_cast&lt;CallInst&gt;(II++))
-        if (Function *F = CI->getCalledFunction())
-          if (F == GCWriteInt) {
+    for (BasicBlock::iterator II = BB-&gt;begin(), E = BB-&gt;end(); II != E; 
++II)
+      if (IntrinsicInst *CI = dyn_cast&lt;IntrinsicInst&gt;(II))
+        if (Function *F = CI-&gt;getCalledFunction())
+          switch (F-&gt;getIntrinsicID()) {
+          case Intrinsic::gcwrite:
             // Handle llvm.gcwrite.
-            CI->eraseFromParent();
+            CI-&gt;eraseFromParent();
             MadeChange = true;
-          } else if (F == GCReadInt) {
+            break;
+          case Intrinsic::gcread:
             // Handle llvm.gcread.
-            CI->eraseFromParent();
+            CI-&gt;eraseFromParent();
             MadeChange = true;
-          } else if (F == GCRootInt) {
+            break;
+          case Intrinsic::gcroot:
             // Handle llvm.gcroot.
-            CI->eraseFromParent();
+            CI-&gt;eraseFromParent();
             MadeChange = true;
+            break;
           }
   
   return MadeChange;


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to