Fix the -DBUILD_SHARED_LIBS=ON build.
[oota-llvm.git] / lib / ExecutionEngine / IntelJITEvents / IntelJITEventsWrapper.h
1 //===-- IntelJITEventsWrapper.h - Intel JIT Events API Wrapper --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines a wrapper for the Intel JIT Events API. It allows for the
11 // implementation of the jitprofiling library to be swapped with an alternative
12 // implementation (for testing). To include this file, you must have the
13 // jitprofiling.h header available; it is available in Intel(R) VTune(TM)
14 // Amplifier XE 2011.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #ifndef INTEL_JIT_EVENTS_WRAPPER_H
19 #define INTEL_JIT_EVENTS_WRAPPER_H
20
21 #include "jitprofiling.h"
22
23 namespace llvm {
24
25 class IntelJITEventsWrapper {
26   // Function pointer types for testing implementation of Intel jitprofiling
27   // library
28   typedef int (*NotifyEventPtr)(iJIT_JVM_EVENT, void*);
29   typedef void (*RegisterCallbackExPtr)(void *, iJIT_ModeChangedEx );
30   typedef iJIT_IsProfilingActiveFlags (*IsProfilingActivePtr)(void);
31   typedef void (*FinalizeThreadPtr)(void);
32   typedef void (*FinalizeProcessPtr)(void);
33   typedef unsigned int (*GetNewMethodIDPtr)(void);
34
35   NotifyEventPtr NotifyEventFunc;
36   RegisterCallbackExPtr RegisterCallbackExFunc;
37   IsProfilingActivePtr IsProfilingActiveFunc;
38   GetNewMethodIDPtr GetNewMethodIDFunc;
39
40 public:
41   bool isAmplifierRunning() {
42     return iJIT_IsProfilingActive() == iJIT_SAMPLING_ON;
43   }
44
45   IntelJITEventsWrapper()
46   : NotifyEventFunc(::iJIT_NotifyEvent),
47     RegisterCallbackExFunc(::iJIT_RegisterCallbackEx),
48     IsProfilingActiveFunc(::iJIT_IsProfilingActive),
49     GetNewMethodIDFunc(::iJIT_GetNewMethodID) {
50   }
51
52   IntelJITEventsWrapper(NotifyEventPtr NotifyEventImpl,
53                    RegisterCallbackExPtr RegisterCallbackExImpl,
54                    IsProfilingActivePtr IsProfilingActiveImpl,
55                    FinalizeThreadPtr FinalizeThreadImpl,
56                    FinalizeProcessPtr FinalizeProcessImpl,
57                    GetNewMethodIDPtr GetNewMethodIDImpl)
58   : NotifyEventFunc(NotifyEventImpl),
59     RegisterCallbackExFunc(RegisterCallbackExImpl),
60     IsProfilingActiveFunc(IsProfilingActiveImpl),
61     GetNewMethodIDFunc(GetNewMethodIDImpl) {
62   }
63
64   // Sends an event announcing that a function has been emitted
65   //   return values are event-specific.  See Intel documentation for details.
66   int  iJIT_NotifyEvent(iJIT_JVM_EVENT EventType, void *EventSpecificData) {
67     if (!NotifyEventFunc)
68       return -1;
69     return NotifyEventFunc(EventType, EventSpecificData);
70   }
71
72   // Registers a callback function to receive notice of profiling state changes
73   void iJIT_RegisterCallbackEx(void *UserData,
74                                iJIT_ModeChangedEx NewModeCallBackFuncEx) {
75     if (RegisterCallbackExFunc)
76       RegisterCallbackExFunc(UserData, NewModeCallBackFuncEx);
77   }
78
79   // Returns the current profiler mode
80   iJIT_IsProfilingActiveFlags iJIT_IsProfilingActive(void) {
81     if (!IsProfilingActiveFunc)
82       return iJIT_NOTHING_RUNNING;
83     return IsProfilingActiveFunc();
84   }
85
86   // Generates a locally unique method ID for use in code registration
87   unsigned int iJIT_GetNewMethodID(void) {
88     if (!GetNewMethodIDFunc)
89       return -1;
90     return GetNewMethodIDFunc();
91   }
92 };
93
94 } //namespace llvm
95
96 #endif //INTEL_JIT_EVENTS_WRAPPER_H