Select Git revision
Skeleton.cpp
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);