def _ensure_llvm(): """ Make sure llvmlite is operational. """ import warnings import llvmlite # Only look at the the major, minor and bugfix version numbers. # Ignore other stuffs regex = re.compile(r'(\d+)\.(\d+).(\d+)') m = regex.match(llvmlite.__version__) if m: ver = tuple(map(int, m.groups())) if ver < _min_llvmlite_version: msg = ("Numba requires at least version %d.%d.%d of llvmlite.\n" "Installed version is %s.\n" "Please update llvmlite." % (_min_llvmlite_version + (llvmlite.__version__, ))) raise ImportError(msg) else: # Not matching? warnings.warn("llvmlite version format not recognized!") from llvmlite.binding import llvm_version_info, check_jit_execution if llvm_version_info < _min_llvm_version: msg = ("Numba requires at least version %d.%d.%d of LLVM.\n" "Installed llvmlite is built against version %d.%d.%d.\n" "Please update llvmlite." % (_min_llvm_version + llvm_version_info)) raise ImportError(msg) check_jit_execution()
def _ensure_llvm(): """ Make sure llvmlite is operational. """ import warnings import llvmlite # Only look at the the major, minor and bugfix version numbers. # Ignore other stuffs regex = re.compile(r'(\d+)\.(\d+).(\d+)') m = regex.match(llvmlite.__version__) if m: ver = tuple(map(int, m.groups())) if ver < _min_llvmlite_version: msg = ("Numba requires at least version %d.%d.%d of llvmlite.\n" "Installed version is %s.\n" "Please update llvmlite." % (_min_llvmlite_version + (llvmlite.__version__,))) raise ImportError(msg) else: # Not matching? warnings.warn("llvmlite version format not recognized!") from llvmlite.binding import check_jit_execution check_jit_execution()
def __init__(self): llvm.initialize() llvm.initialize_all_targets() llvm.initialize_native_target() llvm.initialize_native_asmprinter() self.module = None self._llvmmod = llvm.parse_assembly("") self.target = llvm.Target.from_default_triple() self.cpu = llvm.get_host_cpu_name() self.cpu_features = llvm.get_host_cpu_features() self.target_machine = self.target.create_target_machine( cpu=self.cpu, features=self.cpu_features.flatten(), opt=2) llvm.check_jit_execution() self.ee = llvm.create_mcjit_compiler(self.llvmmod, self.target_machine) self.ee.finalize_object() self.fptr = None
def test_check_jit_execution(self): llvm.check_jit_execution()
import llvmlite.binding as llvm # All these initializations are required for code generation! llvm.initialize() llvm.initialize_native_target() llvm.initialize_native_asmprinter() # yes, even this one # Could be useful if you want to compile for other targets. # llvmlite.binding.initialize_all_targets() # Ensure JIT execution is allowed llvm.check_jit_execution() target = llvm.Target.from_triple(llvm.get_process_triple()) target_machine = target.create_target_machine(codemodel="default") target_data = target_machine.target_data # Configure optimization pass manager builder # https://llvmlite.readthedocs.io/en/latest/user-guide/binding/optimization-passes.html#llvmlite.binding.PassManagerBuilder pm_builder = llvm.PassManagerBuilder() pm_builder.disable_unroll_loops = False pm_builder.inlining_threshold = 100 pm_builder.loop_vectorize = True pm_builder.slp_vectorize = True pm_builder.opt_level = 3 pm_builder.size_level = 0 pass_manager = llvm.ModulePassManager() pm_builder.populate(pass_manager) # Target specific optimizations