diff options
author | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-22 23:32:32 +0000 |
---|---|---|
committer | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-22 23:32:32 +0000 |
commit | 0adede059ed76940700195342bb5b02c79e58516 (patch) | |
tree | ac5a7a03048bef2f5b480c602499a2bcea3d5716 /docs/GarbageCollection.html | |
parent | 52ec3754382a2c47f94c647938286258681c5434 (diff) | |
download | llvm-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.html | 30 |
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 &M) { return false; } bool MyCollector::performCustomLowering(Function &F) { - const Module *M = F.getParent(); - - Function *GCReadInt = M->getFunction("llvm.gcread"), - *GCWriteInt = M->getFunction("llvm.gcwrite"), - *GCRootInt = M->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<CallInst>(II++)) - if (Function *F = CI->getCalledFunction()) - if (F == GCWriteInt) { + for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) + if (IntrinsicInst *CI = dyn_cast<IntrinsicInst>(II)) + if (Function *F = CI->getCalledFunction()) + switch (F->getIntrinsicID()) { + case Intrinsic::gcwrite: // Handle llvm.gcwrite. - CI->eraseFromParent(); + CI->eraseFromParent(); MadeChange = true; - } else if (F == GCReadInt) { + break; + case Intrinsic::gcread: // Handle llvm.gcread. - CI->eraseFromParent(); + CI->eraseFromParent(); MadeChange = true; - } else if (F == GCRootInt) { + break; + case Intrinsic::gcroot: // Handle llvm.gcroot. - CI->eraseFromParent(); + CI->eraseFromParent(); MadeChange = true; + break; } return MadeChange; |