1 //===- RSProfiling.cpp - Various profiling using random sampling ----------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the abstract interface that a profiler must implement to
11 // support the random profiling transform.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_TRANSFORMS_RSPROFILING_H
16 #define LLVM_TRANSFORMS_RSPROFILING_H
18 #include "llvm/Pass.h"
23 //===--------------------------------------------------------------------===//
24 /// RSProfilers - The basic Random Sampling Profiler Interface Any profiler
25 /// that implements this interface can be transformed by the random sampling
26 /// pass to be sample based rather than always on.
28 /// The only exposed function can be queried to find out if an instruction
29 /// was original or if it was inserted by the profiler. Implementations of
30 /// this interface are expected to chain to other implementations, such that
31 /// multiple profilers can be support simultaniously.
32 struct RSProfilers : public ModulePass {
33 static char ID; // Pass identification, replacement for typeinfo
34 RSProfilers() : ModulePass(&ID) {}
36 /// isProfiling - This method returns true if the value passed it was
37 /// inserted by the profiler.
38 virtual bool isProfiling(Value* v) = 0;