summaryrefslogtreecommitdiff
path: root/docs/GarbageCollection.html
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2007-12-22 23:32:32 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2007-12-22 23:32:32 +0000
commit0adede059ed76940700195342bb5b02c79e58516 (patch)
treeac5a7a03048bef2f5b480c602499a2bcea3d5716 /docs/GarbageCollection.html
parent52ec3754382a2c47f94c647938286258681c5434 (diff)
downloadllvm-0adede059ed76940700195342bb5b02c79e58516.tar.gz
llvm-0adede059ed76940700195342bb5b02c79e58516.tar.bz2
llvm-0adede059ed76940700195342bb5b02c79e58516.tar.xz
Document a more robust implementation of performCustomLowering.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45326 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/GarbageCollection.html')
-rw-r--r--docs/GarbageCollection.html30
1 files changed, 14 insertions, 16 deletions
diff --git a/docs/GarbageCollection.html b/docs/GarbageCollection.html
index 4b5bd50aca..c9324859ba 100644
--- a/docs/GarbageCollection.html
+++ b/docs/GarbageCollection.html
@@ -1084,37 +1084,35 @@ href="WritingAnLLVMPass.html#doInitialization_mod"><tt>doInitialization(Module
<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;