Skip to content

Commit

Permalink
Don't need to expose PIC in python
Browse files Browse the repository at this point in the history
  • Loading branch information
yashssh committed Feb 28, 2025
1 parent fd81b94 commit 35da642
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 56 deletions.
28 changes: 6 additions & 22 deletions ffi/newpassmanagers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ typedef OpaquePipelineTuningOptions *LLVMPipelineTuningOptionsRef;
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PipelineTuningOptions,
LLVMPipelineTuningOptionsRef)

struct OpaquePassInstrumentationCallbacks;
typedef OpaquePassInstrumentationCallbacks *LLVMPassInstrumentationCallbacksRef;
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PassInstrumentationCallbacks,
LLVMPassInstrumentationCallbacksRef)

struct OpaqueTimePassesHandler;
typedef OpaqueTimePassesHandler *LLVMTimePassesHandlerRef;
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(TimePassesHandler, LLVMTimePassesHandlerRef)
Expand Down Expand Up @@ -290,17 +285,6 @@ LLVMPY_DisposePipelineTuningOptions(LLVMPipelineTuningOptionsRef PTO) {

// PB

API_EXPORT(LLVMPassInstrumentationCallbacksRef)
LLVMPY_LLVMPassInstrumentationCallbacksCreate() {
return llvm::wrap(new PassInstrumentationCallbacks());
}

API_EXPORT(void)
LLVMPY_LLVMPassInstrumentationCallbacksDispose(
LLVMPassInstrumentationCallbacksRef PICRef) {
delete llvm::unwrap(PICRef);
}

API_EXPORT(LLVMTimePassesHandlerRef)
LLVMPY_CreateLLVMTimePassesHandler() {
return llvm::wrap(new TimePassesHandler(true));
Expand All @@ -312,11 +296,12 @@ LLVMPY_DisposeLLVMTimePassesHandler(LLVMTimePassesHandlerRef TimePassesRef) {
}

API_EXPORT(void)
LLVMPY_SetTimePassesNPM(LLVMTimePassesHandlerRef TimePassesRef,
LLVMPassInstrumentationCallbacksRef PICRef) {
LLVMPY_SetTimePassesNPM(LLVMPassBuilderRef PBRef, LLVMTimePassesHandlerRef TimePassesRef) {
TimePassesHandler *TP = llvm::unwrap(TimePassesRef);
TimePassesIsEnabled = true;
TP->registerCallbacks(*llvm::unwrap(PICRef));
PassBuilder *PB = llvm::unwrap(PBRef);
PassInstrumentationCallbacks *PIC = PB->getPassInstrumentationCallbacks();
TP->registerCallbacks(*PIC);
}

API_EXPORT(void)
Expand All @@ -334,11 +319,10 @@ LLVMPY_ReportAndResetTimingsNPM(LLVMTimePassesHandlerRef TimePassesRef,

API_EXPORT(LLVMPassBuilderRef)
LLVMPY_CreatePassBuilder(LLVMTargetMachineRef TMRef,
LLVMPipelineTuningOptionsRef PTORef,
LLVMPassInstrumentationCallbacksRef PICRef) {
LLVMPipelineTuningOptionsRef PTORef) {
TargetMachine *TM = llvm::unwrap(TMRef);
PipelineTuningOptions *PTO = llvm::unwrap(PTORef);
PassInstrumentationCallbacks *PIC = llvm::unwrap(PICRef);
PassInstrumentationCallbacks *PIC = new PassInstrumentationCallbacks();
#if LLVM_VERSION_MAJOR < 16
return llvm::wrap(new PassBuilder(TM, *PTO, None, PIC));
#else
Expand Down
2 changes: 0 additions & 2 deletions llvmlite/binding/ffi.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ def _make_opaque_ref(name):
LLVMSectionIteratorRef = _make_opaque_ref("LLVMSectionIterator")
LLVMOrcLLJITRef = _make_opaque_ref("LLVMOrcLLJITRef")
LLVMOrcDylibTrackerRef = _make_opaque_ref("LLVMOrcDylibTrackerRef")
LLVMPassInstrumentationCallbacksRef = \
_make_opaque_ref("LLVMPassInstrumentationCallbacks")
LLVMTimePassesHandlerRef = _make_opaque_ref("LLVMTimePassesHandler")
LLVMPipelineTuningOptionsRef = _make_opaque_ref("LLVMPipeLineTuningOptions")
LLVMModulePassManagerRef = _make_opaque_ref("LLVMModulePassManager")
Expand Down
42 changes: 10 additions & 32 deletions llvmlite/binding/newpassmanagers.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,32 +208,19 @@ def _dispose(self):
ffi.lib.LLVMPY_DisposePipelineTuningOptions(self)


class TimePassesHandler(ffi.ObjectRef):
def __init__(self):
super().__init__(ffi.lib.LLVMPY_CreateLLVMTimePassesHandler())

def _dispose(self):
ffi.lib.LLVMPY_DisposeLLVMTimePassesHandler(self)


class PassInstrumentationCallbacks(ffi.ObjectRef):
def __init__(self):
super().__init__(
ffi.lib.LLVMPY_LLVMPassInstrumentationCallbacksCreate()
)

def _dispose(self):
ffi.lib.LLVMPY_LLVMPassInstrumentationCallbacksDispose(self)


class PassBuilder(ffi.ObjectRef):
class TimePassesHandler(ffi.ObjectRef):
def __init__(self):
super().__init__(ffi.lib.LLVMPY_CreateLLVMTimePassesHandler())

def _dispose(self):
ffi.lib.LLVMPY_DisposeLLVMTimePassesHandler(self)

def __init__(self, tm, pto):
self._pic = PassInstrumentationCallbacks()
self._time_passes = TimePassesHandler()
super().__init__(ffi.lib.LLVMPY_CreatePassBuilder(tm, pto, self._pic))
super().__init__(ffi.lib.LLVMPY_CreatePassBuilder(tm, pto))
self._pto = pto
self._tm = tm
self._time_passes = self.TimePassesHandler()

def getModulePassManager(self):
return ModulePassManager(
Expand All @@ -250,7 +237,7 @@ def getFunctionPassManager(self):
def set_time_passes(self):
"""Enable the pass timers.
"""
ffi.lib.LLVMPY_SetTimePassesNPM(self._time_passes, self._pic)
ffi.lib.LLVMPY_SetTimePassesNPM(self, self._time_passes)

def report_and_reset_timings(self):
"""Returns the pass timings report and resets the LLVM internal timers.
Expand Down Expand Up @@ -380,7 +367,6 @@ def _dispose(self):
ffi.lib.LLVMPY_CreatePassBuilder.argtypes = [
ffi.LLVMTargetMachineRef,
ffi.LLVMPipelineTuningOptionsRef,
ffi.LLVMPassInstrumentationCallbacksRef,
]

ffi.lib.LLVMPY_DisposePassBuilder.argtypes = [ffi.LLVMPassBuilderRef,]
Expand All @@ -392,23 +378,15 @@ def _dispose(self):
ffi.LLVMTimePassesHandlerRef,]

ffi.lib.LLVMPY_SetTimePassesNPM.argtypes = [
ffi.LLVMPassBuilderRef,
ffi.LLVMTimePassesHandlerRef,
ffi.LLVMPassInstrumentationCallbacksRef,
]

ffi.lib.LLVMPY_ReportAndResetTimingsNPM.argtypes = [
ffi.LLVMTimePassesHandlerRef,
POINTER(c_char_p),
]

ffi.lib.LLVMPY_LLVMPassInstrumentationCallbacksCreate.restype = (
ffi.LLVMPassInstrumentationCallbacksRef
)

ffi.lib.LLVMPY_LLVMPassInstrumentationCallbacksDispose.argtypes = (
ffi.LLVMPassInstrumentationCallbacksRef,
)

# Pipeline builders

ffi.lib.LLVMPY_buildPerModuleDefaultPipeline.restype = \
Expand Down

0 comments on commit 35da642

Please sign in to comment.