[pypy-svn] r74929 - pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport

arigo at codespeak.net arigo at codespeak.net
Sun May 30 19:27:05 CEST 2010


Author: arigo
Date: Sun May 30 19:27:03 2010
New Revision: 74929

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py
Log:
Don't compute unnecessary stuff for 'size', which is
not used half of the time.


Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py	Sun May 30 19:27:03 2010
@@ -203,20 +203,30 @@
 
     def unpack_fielddescr(self, fielddescr):
         assert isinstance(fielddescr, BaseFieldDescr)
+        return fielddescr.offset
+    unpack_fielddescr._always_inline_ = True
+
+    def unpack_fielddescr_size(self, fielddescr):
+        assert isinstance(fielddescr, BaseFieldDescr)
         ofs = fielddescr.offset
         size = fielddescr.get_field_size(self.translate_support_code)
         return ofs, size
-    unpack_fielddescr._always_inline_ = True
+    unpack_fielddescr_size._always_inline_ = True
 
     def arraydescrof(self, A):
         return get_array_descr(self.gc_ll_descr, A)
 
     def unpack_arraydescr(self, arraydescr):
         assert isinstance(arraydescr, BaseArrayDescr)
+        return arraydescr.get_base_size(self.translate_support_code)
+    unpack_arraydescr._always_inline_ = True
+
+    def unpack_arraydescr_size(self, arraydescr):
+        assert isinstance(arraydescr, BaseArrayDescr)
         ofs = arraydescr.get_base_size(self.translate_support_code)
         size = arraydescr.get_item_size(self.translate_support_code)
         return ofs, size
-    unpack_arraydescr._always_inline_ = True
+    unpack_arraydescr_size._always_inline_ = True
 
     def calldescrof(self, FUNC, ARGS, RESULT, extrainfo=None):
         return get_call_descr(self.gc_ll_descr, ARGS, RESULT, extrainfo)
@@ -241,7 +251,7 @@
         return rffi.cast(rffi.CArrayPtr(lltype.Signed), array)[ofs/WORD]
 
     def bh_getarrayitem_gc_i(self, arraydescr, gcref, itemindex):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs, size = self.unpack_arraydescr_size(arraydescr)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
         for TYPE, itemsize in unroll_basic_sizes:
@@ -254,7 +264,7 @@
             raise NotImplementedError("size = %d" % size)
 
     def bh_getarrayitem_gc_r(self, arraydescr, gcref, itemindex):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs = self.unpack_arraydescr(arraydescr)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
         items = rffi.cast(rffi.CArrayPtr(lltype.Signed), items)
@@ -263,7 +273,7 @@
         return pval
 
     def bh_getarrayitem_gc_f(self, arraydescr, gcref, itemindex):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs = self.unpack_arraydescr(arraydescr)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
         items = rffi.cast(rffi.CArrayPtr(lltype.Float), items)
@@ -272,7 +282,7 @@
         return fval
 
     def bh_setarrayitem_gc_i(self, arraydescr, gcref, itemindex, newvalue):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs, size = self.unpack_arraydescr_size(arraydescr)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
         for TYPE, itemsize in unroll_basic_sizes:
@@ -285,7 +295,7 @@
             raise NotImplementedError("size = %d" % size)
 
     def bh_setarrayitem_gc_r(self, arraydescr, gcref, itemindex, newvalue):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs = self.unpack_arraydescr(arraydescr)
         self.gc_ll_descr.do_write_barrier(gcref, newvalue)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
@@ -294,7 +304,7 @@
         # --- end of GC unsafe code ---
 
     def bh_setarrayitem_gc_f(self, arraydescr, gcref, itemindex, newvalue):
-        ofs, size = self.unpack_arraydescr(arraydescr)
+        ofs = self.unpack_arraydescr(arraydescr)
         # --- start of GC unsafe code (no GC operation!) ---
         items = rffi.ptradd(rffi.cast(rffi.CCHARP, gcref), ofs)
         items = rffi.cast(rffi.CArrayPtr(lltype.Float), items)
@@ -319,7 +329,7 @@
 
     @specialize.argtype(1)
     def _base_do_getfield_i(self, struct, fielddescr):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs, size = self.unpack_fielddescr_size(fielddescr)
         # --- start of GC unsafe code (no GC operation!) ---
         fieldptr = rffi.ptradd(rffi.cast(rffi.CCHARP, struct), ofs)
         for TYPE, itemsize in unroll_basic_sizes:
@@ -332,7 +342,7 @@
 
     @specialize.argtype(1)
     def _base_do_getfield_r(self, struct, fielddescr):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs = self.unpack_fielddescr(fielddescr)
         # --- start of GC unsafe code (no GC operation!) ---
         fieldptr = rffi.ptradd(rffi.cast(rffi.CCHARP, struct), ofs)
         pval = rffi.cast(rffi.CArrayPtr(lltype.Signed), fieldptr)[0]
@@ -342,7 +352,7 @@
 
     @specialize.argtype(1)
     def _base_do_getfield_f(self, struct, fielddescr):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs = self.unpack_fielddescr(fielddescr)
         # --- start of GC unsafe code (no GC operation!) ---
         fieldptr = rffi.ptradd(rffi.cast(rffi.CCHARP, struct), ofs)
         fval = rffi.cast(rffi.CArrayPtr(lltype.Float), fieldptr)[0]
@@ -358,7 +368,7 @@
 
     @specialize.argtype(1)
     def _base_do_setfield_i(self, struct, fielddescr, newvalue):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs, size = self.unpack_fielddescr_size(fielddescr)
         # --- start of GC unsafe code (no GC operation!) ---
         fieldptr = rffi.ptradd(rffi.cast(rffi.CCHARP, struct), ofs)
         for TYPE, itemsize in unroll_basic_sizes:
@@ -372,7 +382,7 @@
 
     @specialize.argtype(1)
     def _base_do_setfield_r(self, struct, fielddescr, newvalue):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs = self.unpack_fielddescr(fielddescr)
         assert lltype.typeOf(struct) is not lltype.Signed, (
             "can't handle write barriers for setfield_raw")
         self.gc_ll_descr.do_write_barrier(struct, newvalue)
@@ -384,7 +394,7 @@
 
     @specialize.argtype(1)
     def _base_do_setfield_f(self, struct, fielddescr, newvalue):
-        ofs, size = self.unpack_fielddescr(fielddescr)
+        ofs = self.unpack_fielddescr(fielddescr)
         # --- start of GC unsafe code (no GC operation!) ---
         fieldptr = rffi.ptradd(rffi.cast(rffi.CCHARP, struct), ofs)
         fieldptr = rffi.cast(rffi.CArrayPtr(lltype.Float), fieldptr)



More information about the Pypy-commit mailing list