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