Author: David Malcolm <dmalc...@redhat.com> Branch: libgccjit-backend Changeset: r75253:619395643793 Date: 2015-01-05 16:28 -0500 http://bitbucket.org/pypy/pypy/changeset/619395643793/
Log: Introduce AssemblerLibgccjit.shared_ctxt to avoid rebuilding the basic types each time diff --git a/rpython/jit/backend/libgccjit/assembler.py b/rpython/jit/backend/libgccjit/assembler.py --- a/rpython/jit/backend/libgccjit/assembler.py +++ b/rpython/jit/backend/libgccjit/assembler.py @@ -175,59 +175,65 @@ self.add_comments = 1 - def make_context(self): - self.ctxt = Context.acquire(self.lib)#self.lib.gcc_jit_context_acquire() + # Create "shared_ctxt" to hold the common types + # needed by every loop/bridge + # Compiling a loop or bridge will involve creating a child + # context of the shared_ctxt. + self.shared_ctxt = Context.acquire(self.lib) if 0: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE, r_int(1)) if 0: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_DUMP_INITIAL_GIMPLE, r_int(1)) if 1: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_DEBUGINFO, r_int(1)) if 1: - self.ctxt.set_int_option( + self.shared_ctxt.set_int_option( self.lib.GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, r_int(2)) if 1: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES, r_int(1)) if 1: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING, r_int(1)) if 0: - self.ctxt.set_bool_option( + self.shared_ctxt.set_bool_option( self.lib.GCC_JIT_BOOL_OPTION_DUMP_GENERATED_CODE, r_int(1)) - self.t_Signed = self.ctxt.get_int_type(r_int(self.sizeof_signed), + self.t_Signed = self.shared_ctxt.get_int_type(r_int(self.sizeof_signed), r_int(1)) self.t_signed_ptr = self.t_Signed.get_pointer() - self.t_UINT = self.ctxt.get_int_type(r_int(self.sizeof_signed), + self.t_UINT = self.shared_ctxt.get_int_type(r_int(self.sizeof_signed), r_int(0)) - self.t_float = self.ctxt.get_type(self.lib.GCC_JIT_TYPE_DOUBLE) # FIXME - self.t_bool = self.ctxt.get_type(self.lib.GCC_JIT_TYPE_BOOL) - self.t_void_ptr = self.ctxt.get_type(self.lib.GCC_JIT_TYPE_VOID_PTR) - self.t_void = self.ctxt.get_type(self.lib.GCC_JIT_TYPE_VOID) - self.t_char_ptr = self.ctxt.get_type( + self.t_float = self.shared_ctxt.get_type(self.lib.GCC_JIT_TYPE_DOUBLE) # FIXME + self.t_bool = self.shared_ctxt.get_type(self.lib.GCC_JIT_TYPE_BOOL) + self.t_void_ptr = self.shared_ctxt.get_type(self.lib.GCC_JIT_TYPE_VOID_PTR) + self.t_void = self.shared_ctxt.get_type(self.lib.GCC_JIT_TYPE_VOID) + self.t_char_ptr = self.shared_ctxt.get_type( self.lib.GCC_JIT_TYPE_CHAR).get_pointer() - self.u_signed = self.ctxt.new_field(self.t_Signed, "u_signed") - self.u_float = self.ctxt.new_field(self.t_float, "u_float") - self.u_void_ptr = self.ctxt.new_field(self.t_void_ptr, "u_void_ptr") - self.u_signed_ptr = self.ctxt.new_field(self.t_signed_ptr, "u_signed_ptr") - self.t_any = self.ctxt.new_union_type ("any", + self.u_signed = self.shared_ctxt.new_field(self.t_Signed, "u_signed") + self.u_float = self.shared_ctxt.new_field(self.t_float, "u_float") + self.u_void_ptr = self.shared_ctxt.new_field(self.t_void_ptr, "u_void_ptr") + self.u_signed_ptr = self.shared_ctxt.new_field(self.t_signed_ptr, "u_signed_ptr") + self.t_any = self.shared_ctxt.new_union_type ("any", [self.u_signed, self.u_float, self.u_void_ptr, self.u_signed_ptr]) + def make_context(self): + self.ctxt = self.shared_ctxt.new_child_context() + def setup(self, looptoken): allblocks = self.get_asmmemmgr_blocks(looptoken) self.datablockwrapper = MachineDataBlockWrapper(self.cpu.asmmemmgr, diff --git a/rpython/jit/backend/libgccjit/rffi_bindings.py b/rpython/jit/backend/libgccjit/rffi_bindings.py --- a/rpython/jit/backend/libgccjit/rffi_bindings.py +++ b/rpython/jit/backend/libgccjit/rffi_bindings.py @@ -99,6 +99,9 @@ (self.GCC_JIT_CONTEXT_P, 'gcc_jit_context_acquire', []), + (self.GCC_JIT_CONTEXT_P, + 'gcc_jit_context_new_child_context', [self.GCC_JIT_CONTEXT_P]), + (lltype.Void, 'gcc_jit_context_release', [self.GCC_JIT_CONTEXT_P]), @@ -530,6 +533,10 @@ def acquire(lib): return Context(lib, lib.gcc_jit_context_acquire()) + def new_child_context(self): + return Context(self.lib, + self.lib.gcc_jit_context_new_child_context(self.inner_ctxt)) + def release(self): self.lib.gcc_jit_context_release(self.inner_ctxt) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit