LLVM  8.0.1
IntelJITEventsWrapper.h
Go to the documentation of this file.
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 
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:
43  }
44 
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
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
This class represents lattice values for constants.
Definition: AllocatorList.h:24
iJIT_IsProfilingActiveFlags iJIT_IsProfilingActive(void)
enum iJIT_jvm_event iJIT_JVM_EVENT
void(* iJIT_ModeChangedEx)(void *UserData, iJIT_ModeFlags Flags)
Definition: jitprofiling.h:239
void iJIT_RegisterCallbackEx(void *UserData, iJIT_ModeChangedEx NewModeCallBackFuncEx)
IntelJITEventsWrapper(NotifyEventPtr NotifyEventImpl, RegisterCallbackExPtr RegisterCallbackExImpl, IsProfilingActivePtr IsProfilingActiveImpl, FinalizeThreadPtr FinalizeThreadImpl, FinalizeProcessPtr FinalizeProcessImpl, GetNewMethodIDPtr GetNewMethodIDImpl)
int iJIT_NotifyEvent(iJIT_JVM_EVENT EventType, void *EventSpecificData)
unsigned int iJIT_GetNewMethodID(void)
enum _iJIT_IsProfilingActiveFlags iJIT_IsProfilingActiveFlags