Skip to content
Snippets Groups Projects
Select Git revision
  • b79af3249a7bab83d0c793000320a1048e528abf
  • master default protected
  • callgraph
  • function
4 results

Skeleton.cpp

Blame
  • Skeleton.cpp 1.17 KiB
    #include "llvm/Pass.h"
    #include "llvm/IR/Function.h"
    #include "llvm/Support/raw_ostream.h"
    #include "llvm/IR/LegacyPassManager.h"
    #include "llvm/Transforms/IPO/PassManagerBuilder.h"
    #include "llvm/Analysis/Trace.h"
    #include "llvm/IR/BasicBlock.h"
    
    using namespace llvm;
    
    namespace
    {
    struct SkeletonPass : public FunctionPass
    {
      static char ID;
      SkeletonPass() : FunctionPass(ID) {}
    
      virtual bool runOnFunction(Function &F)
      {
        errs() << "Function " << F.getName() << "!\n";
    
        for (Function::BasicBlockListType::iterator i = F.begin(), ie = F.end(); i != ie; ++i)
        {
          for (llvm::BasicBlock::InstListType::iterator j = i->begin(), je = i->end(); j != je; ++j)
          {
            Instruction *ii = &*j;
            errs() << *ii << "\n";
          }
        }
        return false;
      }
    };
    } // namespace
    
    char SkeletonPass::ID = 0;
    
    // Automatically enable the pass.
    // http://adriansampson.net/blog/clangpass.html
    static void registerSkeletonPass(const PassManagerBuilder &,
                                     legacy::PassManagerBase &PM)
    {
      PM.add(new SkeletonPass());
    }
    static RegisterStandardPasses
        RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible,
                       registerSkeletonPass);