def compile_extra(self, func): self.state.func_id = bytecode.FunctionIdentity.from_function(func) ExtractByteCode().run_pass(self.state) self.state.lifted = () self.state.lifted_from = None return self._compile_bytecode()
def compile_extra(self, func): self.state.func_id = bytecode.FunctionIdentity.from_function(func) try: ExtractByteCode().run_pass(self.state) except Exception as e: if self.state.status.can_giveup: CompileInterpMode().run_pass(self.state) return self.state.cr else: raise e self.state.lifted = () self.state.lifted_from = None return self._compile_bytecode()
def compile_to_ir(self, func, test_idempotence=None): """ Populate and run compiler pipeline """ self.state.func_id = bytecode.FunctionIdentity.from_function(func) ExtractByteCode().run_pass(self.state) self.state.lifted = () self.state.lifted_from = None state = self.state state.func_ir_copies = [] state.test_idempotence = test_idempotence name = 'array_analysis_testing' pm = PassManager(name) pm.add_pass(TranslateByteCode, "analyzing bytecode") pm.add_pass(FixupArgs, "fix up args") pm.add_pass(IRProcessing, "processing IR") # pre typing if not state.flags.no_rewrites: pm.add_pass(GenericRewrites, "nopython rewrites") pm.add_pass(RewriteSemanticConstants, "rewrite semantic constants") pm.add_pass(DeadBranchPrune, "dead branch pruning") pm.add_pass(InlineClosureLikes, "inline calls to locally defined closures") # typing pm.add_pass(NopythonTypeInference, "nopython frontend") pm.add_pass(AnnotateTypes, "annotate types") if not state.flags.no_rewrites: pm.add_pass(NopythonRewrites, "nopython rewrites") # Array Analysis pass pm.add_pass(ArrayAnalysisPass, "array analysis") if test_idempotence: # Do another pass of array analysis to test idempotence pm.add_pass(ArrayAnalysisPass, "idempotence array analysis") # legalise pm.add_pass(IRLegalization, "ensure IR is legal prior to lowering") # partial compile pm.finalize() pm.run(state) return state.array_analysis
def compile_to_ir(self, func, DCE=False): """ Compile and return IR """ func_id = bytecode.FunctionIdentity.from_function(func) self.state.func_id = func_id ExtractByteCode().run_pass(self.state) state = self.state name = "DCE_testing" pm = PassManager(name) pm.add_pass(TranslateByteCode, "analyzing bytecode") pm.add_pass(FixupArgs, "fix up args") pm.add_pass(IRProcessing, "processing IR") pm.add_pass(NopythonTypeInference, "nopython frontend") if DCE is True: pm.add_pass(DeadCodeElimination, "DCE after typing") pm.finalize() pm.run(state) return state.func_ir