Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def struct_types(self):
"""
Return an iterator over the struct types defined in
the module. The iterator will yield a TypeRef.
"""
it = ffi.lib.LLVMPY_ModuleTypesIter(self)
return _TypesIterator(it, dict(module=self))
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel,
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_uint]
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel,
ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
_func.restype = c_uint
# Boolean PassManagerBuilder properties
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops,
ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize,
ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_bool]
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops,
ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize,
ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
_func.restype = c_bool
ffi.lib.LLVMPY_InvokeInstAttributesIter.restype = ffi.LLVMAttributeListIterator
ffi.lib.LLVMPY_GlobalAttributesIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_GlobalAttributesIter.restype = ffi.LLVMAttributeSetIterator
ffi.lib.LLVMPY_ArgumentAttributesIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_ArgumentAttributesIter.restype = ffi.LLVMAttributeSetIterator
ffi.lib.LLVMPY_FunctionBlocksIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_FunctionBlocksIter.restype = ffi.LLVMBlocksIterator
ffi.lib.LLVMPY_FunctionArgumentsIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_FunctionArgumentsIter.restype = ffi.LLVMArgumentsIterator
ffi.lib.LLVMPY_BlockInstructionsIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_BlockInstructionsIter.restype = ffi.LLVMInstructionsIterator
ffi.lib.LLVMPY_InstructionOperandsIter.argtypes = [ffi.LLVMValueRef]
ffi.lib.LLVMPY_InstructionOperandsIter.restype = ffi.LLVMOperandsIterator
ffi.lib.LLVMPY_DisposeAttributeListIter.argtypes = [ffi.LLVMAttributeListIterator]
ffi.lib.LLVMPY_DisposeAttributeSetIter.argtypes = [ffi.LLVMAttributeSetIterator]
ffi.lib.LLVMPY_DisposeBlocksIter.argtypes = [ffi.LLVMBlocksIterator]
ffi.lib.LLVMPY_DisposeInstructionsIter.argtypes = [ffi.LLVMInstructionsIterator]
ffi.lib.LLVMPY_DisposeOperandsIter.argtypes = [ffi.LLVMOperandsIterator]
ffi.lib.LLVMPY_AttributeListIterNext.argtypes = [ffi.LLVMAttributeListIterator]
ffi.lib.LLVMPY_AttributeListIterNext.restype = c_char_p
Return an iterator over this value's attributes.
The iterator will yield a string for each attribute.
"""
itr = iter(())
if self.is_function:
it = ffi.lib.LLVMPY_FunctionAttributesIter(self)
itr = _AttributeListIterator(it)
elif self.is_instruction:
if self.opcode == 'call':
it = ffi.lib.LLVMPY_CallInstAttributesIter(self)
itr = _AttributeListIterator(it)
elif self.opcode == 'invoke':
it = ffi.lib.LLVMPY_InvokeInstAttributesIter(self)
itr = _AttributeListIterator(it)
elif self.is_global:
it = ffi.lib.LLVMPY_GlobalAttributesIter(self)
itr = _AttributeSetIterator(it)
elif self.is_argument:
it = ffi.lib.LLVMPY_ArgumentAttributesIter(self)
itr = _AttributeSetIterator(it)
return itr
ffi.lib.LLVMPY_RunPassManager.argtypes = [ffi.LLVMPassManagerRef,
ffi.LLVMModuleRef]
ffi.lib.LLVMPY_RunPassManager.restype = c_bool
ffi.lib.LLVMPY_InitializeFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_InitializeFunctionPassManager.restype = c_bool
ffi.lib.LLVMPY_FinalizeFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_FinalizeFunctionPassManager.restype = c_bool
ffi.lib.LLVMPY_RunFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef,
ffi.LLVMValueRef]
ffi.lib.LLVMPY_RunFunctionPassManager.restype = c_bool
ffi.lib.LLVMPY_AddConstantMergePass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddDeadArgEliminationPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddFunctionAttrsPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddFunctionInliningPass.argtypes = [ffi.LLVMPassManagerRef, c_int]
ffi.lib.LLVMPY_AddGlobalDCEPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddGlobalOptimizerPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddIPSCCPPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddDeadCodeEliminationPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddCFGSimplificationPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddGVNPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddInstructionCombiningPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddLICMPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddSCCPPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddSROAPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddTypeBasedAliasAnalysisPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_AddBasicAliasAnalysisPass.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_PassManagerBuilderPopulateModulePassManager.argtypes = [
ffi.LLVMPassManagerBuilderRef,
ffi.LLVMPassManagerRef,
]
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager.argtypes = [
ffi.LLVMPassManagerBuilderRef,
ffi.LLVMPassManagerRef,
]
# Unsigned int PassManagerBuilder properties
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel,
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel,
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_uint]
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel,
ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
_func.restype = c_uint
# Boolean PassManagerBuilder properties
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops,
ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize,
ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_bool]
]
ffi.lib.LLVMPY_PassManagerBuilderPopulateFunctionPassManager.argtypes = [
ffi.LLVMPassManagerBuilderRef,
ffi.LLVMPassManagerRef,
]
# Unsigned int PassManagerBuilder properties
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetOptLevel,
ffi.lib.LLVMPY_PassManagerBuilderSetSizeLevel,
ffi.lib.LLVMPY_PassManagerBuilderUseInlinerWithThreshold,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_uint]
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetOptLevel,
ffi.lib.LLVMPY_PassManagerBuilderGetSizeLevel,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef]
_func.restype = c_uint
# Boolean PassManagerBuilder properties
for _func in (ffi.lib.LLVMPY_PassManagerBuilderSetDisableUnrollLoops,
ffi.lib.LLVMPY_PassManagerBuilderSetLoopVectorize,
ffi.lib.LLVMPY_PassManagerBuilderSetSLPVectorize,
):
_func.argtypes = [ffi.LLVMPassManagerBuilderRef, c_bool]
for _func in (ffi.lib.LLVMPY_PassManagerBuilderGetDisableUnrollLoops,
ffi.lib.LLVMPY_PassManagerBuilderGetLoopVectorize,
ffi.lib.LLVMPY_PassManagerBuilderGetSLPVectorize,
ffi.lib.LLVMPY_GetProcessTriple.argtypes = [POINTER(c_char_p)]
ffi.lib.LLVMPY_GetHostCPUFeatures.argtypes = [POINTER(c_char_p)]
ffi.lib.LLVMPY_GetHostCPUFeatures.restype = c_int
ffi.lib.LLVMPY_GetDefaultTargetTriple.argtypes = [POINTER(c_char_p)]
ffi.lib.LLVMPY_GetHostCPUName.argtypes = [POINTER(c_char_p)]
ffi.lib.LLVMPY_GetTripleObjectFormat.argtypes = [c_char_p]
ffi.lib.LLVMPY_GetTripleObjectFormat.restype = c_int
ffi.lib.LLVMPY_CreateTargetData.argtypes = [c_char_p]
ffi.lib.LLVMPY_CreateTargetData.restype = ffi.LLVMTargetDataRef
ffi.lib.LLVMPY_CopyStringRepOfTargetData.argtypes = [
ffi.LLVMTargetDataRef,
POINTER(c_char_p),
]
ffi.lib.LLVMPY_DisposeTargetData.argtypes = [
ffi.LLVMTargetDataRef,
]
ffi.lib.LLVMPY_ABISizeOfType.argtypes = [ffi.LLVMTargetDataRef,
ffi.LLVMTypeRef]
ffi.lib.LLVMPY_ABISizeOfType.restype = c_longlong
ffi.lib.LLVMPY_OffsetOfElement.argtypes = [ffi.LLVMTargetDataRef,
ffi.LLVMTypeRef,
c_int]
ffi.lib.LLVMPY_OffsetOfElement.restype = c_longlong
POINTER(c_char_p),
]
ffi.lib.LLVMPY_RemoveModule.restype = c_bool
ffi.lib.LLVMPY_AddModule.argtypes = [
ffi.LLVMExecutionEngineRef,
ffi.LLVMModuleRef
]
ffi.lib.LLVMPY_AddGlobalMapping.argtypes = [ffi.LLVMExecutionEngineRef,
ffi.LLVMValueRef,
c_void_p]
ffi.lib.LLVMPY_FinalizeObject.argtypes = [ffi.LLVMExecutionEngineRef]
ffi.lib.LLVMPY_GetExecutionEngineTargetData.argtypes = [
ffi.LLVMExecutionEngineRef
]
ffi.lib.LLVMPY_GetExecutionEngineTargetData.restype = ffi.LLVMTargetDataRef
ffi.lib.LLVMPY_TryAllocateExecutableMemory.argtypes = []
ffi.lib.LLVMPY_TryAllocateExecutableMemory.restype = c_int
ffi.lib.LLVMPY_GetFunctionAddress.argtypes = [
ffi.LLVMExecutionEngineRef,
c_char_p
]
ffi.lib.LLVMPY_GetFunctionAddress.restype = c_uint64
ffi.lib.LLVMPY_GetGlobalValueAddress.argtypes = [
ffi.LLVMExecutionEngineRef,
c_char_p
"""
return ffi.lib.LLVMPY_FinalizeFunctionPassManager(self)
def run(self, function):
"""
Run optimization passes on the given function.
"""
return ffi.lib.LLVMPY_RunFunctionPassManager(self, function)
# ============================================================================
# FFI
ffi.lib.LLVMPY_CreatePassManager.restype = ffi.LLVMPassManagerRef
ffi.lib.LLVMPY_CreateFunctionPassManager.argtypes = [ffi.LLVMModuleRef]
ffi.lib.LLVMPY_CreateFunctionPassManager.restype = ffi.LLVMPassManagerRef
ffi.lib.LLVMPY_DisposePassManager.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_RunPassManager.argtypes = [ffi.LLVMPassManagerRef,
ffi.LLVMModuleRef]
ffi.lib.LLVMPY_RunPassManager.restype = c_bool
ffi.lib.LLVMPY_InitializeFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_InitializeFunctionPassManager.restype = c_bool
ffi.lib.LLVMPY_FinalizeFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef]
ffi.lib.LLVMPY_FinalizeFunctionPassManager.restype = c_bool
ffi.lib.LLVMPY_RunFunctionPassManager.argtypes = [ffi.LLVMPassManagerRef,
ffi.LLVMValueRef]