1 //===- JITEventListener.h - Exposes events from JIT compilation -*- C++ -*-===//
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 JITEventListener interface, which lets users get
11 // callbacks when significant events happen during the JIT compilation process.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H
16 #define LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H
18 #include "llvm/Support/DataTypes.h"
19 #include "llvm/Support/DebugLoc.h"
25 class MachineFunction;
27 /// JITEvent_EmittedFunctionDetails - Helper struct for containing information
28 /// about a generated machine code function.
29 struct JITEvent_EmittedFunctionDetails {
31 /// The address at which the current line changes.
34 /// The new location information. These can be translated to DebugLocTuples
35 /// using MF->getDebugLocTuple().
39 /// The machine function the struct contains information for.
40 const MachineFunction *MF;
42 /// The list of line boundary information, sorted by address.
43 std::vector<LineStart> LineStarts;
46 /// JITEventListener - Abstract interface for use by the JIT to notify clients
47 /// about significant events during compilation. For example, to notify
48 /// profilers and debuggers that need to know where functions have been emitted.
50 /// The default implementation of each method does nothing.
51 class JITEventListener {
53 typedef JITEvent_EmittedFunctionDetails EmittedFunctionDetails;
57 virtual ~JITEventListener();
59 /// NotifyFunctionEmitted - Called after a function has been successfully
60 /// emitted to memory. The function still has its MachineFunction attached,
61 /// if you should happen to need that.
62 virtual void NotifyFunctionEmitted(const Function &,
64 const EmittedFunctionDetails &) {}
66 /// NotifyFreeingMachineCode - Called from freeMachineCodeForFunction(), after
67 /// the global mapping is removed, but before the machine code is returned to
70 /// OldPtr is the address of the machine code and will be the same as the Code
71 /// parameter to a previous NotifyFunctionEmitted call. The Function passed
72 /// to NotifyFunctionEmitted may have been destroyed by the time of the
73 /// matching NotifyFreeingMachineCode call.
74 virtual void NotifyFreeingMachineCode(void *) {}
77 // This returns NULL if support isn't available.
78 JITEventListener *createOProfileJITEventListener();
80 } // end namespace llvm.