def build_pass_managers(**kws): mod = kws.get('mod') if not mod: raise NameError("module must be provided") pm = llvm.create_module_pass_manager() if kws.get('fpm', True): assert isinstance(mod, llvm.ModuleRef) fpm = llvm.create_function_pass_manager(mod) else: fpm = None with llvm.create_pass_manager_builder() as pmb: pmb.opt_level = opt = kws.get('opt', 2) pmb.loop_vectorize = kws.get('loop_vectorize', False) pmb.slp_vectorize = kws.get('slp_vectorize', False) pmb.inlining_threshold = _inlining_threshold(optlevel=opt) if mod: dl = llvm.create_target_data(mod.data_layout) dl.add_pass(pm) if fpm is not None: dl.add_pass(fpm) tli = llvm.create_target_library_info(mod.triple) if kws.get('nobuiltins', False): # Disable all builtins (-fno-builtins) tli.disable_all() else: # Disable a list of builtins given for k in kws.get('disable_builtins', ()): libf = tli.get_libfunc(k) tli.set_unavailable(libf) tli.add_pass(pm) if fpm is not None: tli.add_pass(fpm) tm = kws.get('tm') if tm: tm.add_analysis_passes(pm) if fpm is not None: tm.add_analysis_passes(fpm) pmb.populate(pm) if fpm is not None: pmb.populate(fpm) return namedtuple("pms", ['pm', 'fpm'])(pm=pm, fpm=fpm)
def build_pass_managers(**kws): mod = kws.get('mod') if not mod: raise NameError("module must be provided") pm = llvm.create_module_pass_manager() if kws.get('fpm', True): assert isinstance(mod, llvm.ModuleRef) fpm = llvm.create_function_pass_manager(mod) else: fpm = None with llvm.create_pass_manager_builder() as pmb: pmb.opt_level = opt = kws.get('opt', 2) pmb.loop_vectorize = kws.get('loop_vectorize', False) pmb.inlining_threshold = _inline_threshold(optlevel=opt) if mod: dl = llvm.create_target_data(mod.data_layout) dl.add_pass(pm) if fpm is not None: dl.add_pass(fpm) tli = llvm.create_target_library_info(mod.triple) if kws.get('nobuiltins', False): # Disable all builtins (-fno-builtins) tli.disable_all() else: # Disable a list of builtins given for k in kws.get('disable_builtins', ()): libf = tli.get_libfunc(k) tli.set_unavailable(libf) tli.add_pass(pm) if fpm is not None: tli.add_pass(fpm) tm = kws.get('tm') if tm: tm.add_analysis_passes(pm) if fpm is not None: tm.add_analysis_passes(fpm) pmb.populate(pm) if fpm is not None: pmb.populate(fpm) return namedtuple("pms", ['pm', 'fpm'])(pm=pm, fpm=fpm)
def _init(self, llvm_module): assert list(llvm_module.global_variables) == [], "Module isn't empty" target = ll.Target.from_default_triple() tm_options = dict(cpu='', features='', opt=config.OPT) self._customize_tm_options(tm_options) tm = target.create_target_machine(**tm_options) engine = ll.create_mcjit_compiler(llvm_module, tm) tli = ll.create_target_library_info(llvm_module.triple) self._tli = tli self._tm = tm self._engine = engine self._target_data = engine.target_data self._data_layout = str(self._target_data) self._mpm = self._module_pass_manager()
def _init(self, llvm_module): assert list(llvm_module.global_variables) == [], "Module isn't empty" target = ll.Target.from_default_triple() tm_options = dict(cpu='', features='', opt=config.OPT) self._customize_tm_options(tm_options) tm = target.create_target_machine(**tm_options) # MCJIT is still defective under Windows if sys.platform.startswith('win32'): engine = ll.create_jit_compiler_with_tm(llvm_module, tm) else: engine = ll.create_mcjit_compiler(llvm_module, tm) tli = ll.create_target_library_info(llvm_module.triple) self._tli = tli self._tm = tm self._engine = engine self._target_data = engine.target_data self._data_layout = str(self._target_data) self._mpm = self._module_pass_manager()
def test_create_target_library_info(self): tli = llvm.create_target_library_info(llvm.get_default_triple()) with tli: pass tli.close()
def tli(self): return llvm.create_target_library_info(llvm.get_default_triple())