1467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner//===- ProfilingUtils.h - Helper functions shared by profilers --*- C++ -*-===// 2fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman// 3467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// The LLVM Compiler Infrastructure 4467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman// 8467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner//===----------------------------------------------------------------------===// 9467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// 1029d8aa78773f0956c9b33170382403e5a61036f1Gabor Greif// This file defines a few helper functions which are used by profile 11467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// instrumentation code to instrument the code. This allows the profiler pass 12467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// to worry about *what* to insert, and these functions take care of *how* to do 13467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// it. 14467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner// 15467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner//===----------------------------------------------------------------------===// 16467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner 17467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner#ifndef PROFILINGUTILS_H 18467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner#define PROFILINGUTILS_H 19467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner 20467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattnernamespace llvm { 21918035f802be7840177f77389d0b70415f84b06fNick Lewycky class BasicBlock; 22467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner class Function; 23467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner class GlobalValue; 24918035f802be7840177f77389d0b70415f84b06fNick Lewycky class Module; 2504317cc618aeae28910916469e074d8ce0fcaa03Andrew Trick class PointerType; 26467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner 27467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner void InsertProfilingInitCall(Function *MainFn, const char *FnName, 2804317cc618aeae28910916469e074d8ce0fcaa03Andrew Trick GlobalValue *Arr = 0, 2904317cc618aeae28910916469e074d8ce0fcaa03Andrew Trick PointerType *arrayType = 0); 30467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner void IncrementCounterInBlock(BasicBlock *BB, unsigned CounterNum, 3104317cc618aeae28910916469e074d8ce0fcaa03Andrew Trick GlobalValue *CounterArray, 3204317cc618aeae28910916469e074d8ce0fcaa03Andrew Trick bool beginning = true); 33918035f802be7840177f77389d0b70415f84b06fNick Lewycky void InsertProfilingShutdownCall(Function *Callee, Module *Mod); 34467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner} 35467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner 36467dd2ec6192fca6fe1d2a4b339fbc9b45ca3b17Chris Lattner#endif 37