def test_transform(): #XXX This uses Module transforms, think about Function transforms too. llvmjit.restart() llvmjit.parse(lldeadcode) deadcode = llvmjit.getNamedFunction('deadcode') assert llvmjit.execute(deadcode, 10) == 10 * 2 assert llvmjit.transform(3) #optlevel = [0123] assert llvmjit.execute(deadcode, 20) == 20 * 2
def test_transform( ): #XXX This uses Module transforms, think about Function transforms too. llvmjit.restart() llvmjit.parse(lldeadcode) deadcode = llvmjit.getNamedFunction('deadcode') assert llvmjit.execute(deadcode, 10) == 10 * 2 assert llvmjit.transform(3) #optlevel = [0123] assert llvmjit.execute(deadcode, 20) == 20 * 2
def end(self): log(' RLLVMGenOp.end') self.blocklist.append(EpilogueBlock()) asmlines = [] for block in self.blocklist: block.writecode(asmlines) if LINENO: asmlines = ['%s ;%d' % (asmlines[i], i+1) for i in range(len(asmlines))] asm_string = '\n'.join(asmlines) self.blocklist = None if PRINT_SOURCE: print asm_string logger.dump(asm_string) parse_ok = llvmjit.parse(asm_string) if not parse_ok: raise ParseException() llvmjit.transform(3) #optimize module (should be on functions actually) function = llvmjit.getNamedFunction(self.name) entrypoint = llvmjit.getPointerToFunctionAsInt(function) # XXX or directly cast the ctypes ptr to int with: # ctypes.cast(ptr, c_void_p).value self.funcsig[entrypoint] = self.funcsig[self.gv_entrypoint.value] self.gv_entrypoint.value = entrypoint