Mercurial > hg > CbC > CbC_llvm
view lib/CodeGen/CountingFunctionInserter.cpp @ 129:9ec641e857f8
Fix compile error to update llvm 5.0
author | mir3636 |
---|---|
date | Tue, 12 Dec 2017 19:42:58 +0900 |
parents | 803732b1fca8 |
children |
line wrap: on
line source
//===- CountingFunctionInserter.cpp - Insert mcount-like function calls ---===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Insert calls to counter functions, such as mcount, intended to be called // once per function, at the beginning of each function. // //===----------------------------------------------------------------------===// #include "llvm/Analysis/GlobalsModRef.h" #include "llvm/CodeGen/Passes.h" #include "llvm/IR/Function.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/Module.h" #include "llvm/IR/Type.h" #include "llvm/Pass.h" using namespace llvm; namespace { struct CountingFunctionInserter : public FunctionPass { static char ID; // Pass identification, replacement for typeid CountingFunctionInserter() : FunctionPass(ID) { initializeCountingFunctionInserterPass(*PassRegistry::getPassRegistry()); } void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addPreserved<GlobalsAAWrapperPass>(); } bool runOnFunction(Function &F) override { StringRef CountingFunctionName = F.getFnAttribute("counting-function").getValueAsString(); if (CountingFunctionName.empty()) return false; Type *VoidTy = Type::getVoidTy(F.getContext()); Constant *CountingFn = F.getParent()->getOrInsertFunction(CountingFunctionName, VoidTy); CallInst::Create(CountingFn, "", &*F.begin()->getFirstInsertionPt()); return true; } }; char CountingFunctionInserter::ID = 0; } INITIALIZE_PASS(CountingFunctionInserter, "cfinserter", "Inserts calls to mcount-like functions", false, false) FunctionPass *llvm::createCountingFunctionInserterPass() { return new CountingFunctionInserter(); }