From b79af3249a7bab83d0c793000320a1048e528abf Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Tue, 27 Nov 2018 08:59:54 +0100 Subject: [PATCH] function --- skeleton/Skeleton.cpp | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/skeleton/Skeleton.cpp b/skeleton/Skeleton.cpp index 0abdf21..6ca5431 100644 --- a/skeleton/Skeleton.cpp +++ b/skeleton/Skeleton.cpp @@ -3,28 +3,44 @@ #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) {} +namespace +{ +struct SkeletonPass : public FunctionPass +{ + static char ID; + SkeletonPass() : FunctionPass(ID) {} + + virtual bool runOnFunction(Function &F) + { + errs() << "Function " << F.getName() << "!\n"; - virtual bool runOnFunction(Function &F) { - errs() << "I saw a function called " << F.getName() << "!\n"; - return false; + 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) { + legacy::PassManagerBase &PM) +{ PM.add(new SkeletonPass()); } static RegisterStandardPasses - RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible, - registerSkeletonPass); + RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible, + registerSkeletonPass); -- GitLab