[pypy-commit] pypy jit-leaner-frontend: another micro-optimization

fijal pypy.commits at gmail.com
Tue Mar 15 12:46:19 EDT 2016


Author: fijal
Branch: jit-leaner-frontend
Changeset: r83075:5f3c4d1e2f03
Date: 2016-03-15 18:45 +0200
http://bitbucket.org/pypy/pypy/changeset/5f3c4d1e2f03/

Log:	another micro-optimization

diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -325,9 +325,12 @@
             array[i] = self._encode(boxes[i])
         return array
 
-    def create_top_snapshot(self, jitcode, pc, boxes, vable_boxes, vref_boxes):
+    def new_array(self, lgt):
+        return [rffi.cast(rffi.SHORT, 0)] * lgt
+
+    def create_top_snapshot(self, jitcode, pc, frame, flag, vable_boxes, vref_boxes):
         self._total_snapshots += 1
-        array = self._list_of_boxes(boxes)
+        array = frame.get_list_of_active_boxes(flag, self.new_array, self._encode)
         vable_array = self._list_of_boxes(vable_boxes)
         vref_array = self._list_of_boxes(vref_boxes)
         s = TopSnapshot(combine_uint(jitcode.index, pc), array, vable_array,
@@ -350,9 +353,9 @@
         self._ops[self._pos - 1] = rffi.cast(rffi.SHORT, len(self._snapshots) - 1)
         return s
 
-    def create_snapshot(self, jitcode, pc, boxes):
+    def create_snapshot(self, jitcode, pc, frame, flag):
         self._total_snapshots += 1
-        array = self._list_of_boxes(boxes)
+        array = frame.get_list_of_active_boxes(flag, self.new_array, self._encode)
         return Snapshot(combine_uint(jitcode.index, pc), array)
 
     def get_iter(self, metainterp_sd=None):
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -127,7 +127,7 @@
     def get_current_position_info(self):
         return self.jitcode.get_live_vars_info(self.pc)
 
-    def get_list_of_active_boxes(self, in_a_call):
+    def get_list_of_active_boxes(self, in_a_call, new_array, encode):
         if in_a_call:
             # If we are not the topmost frame, self._result_argcode contains
             # the type of the result of the call instruction in the bytecode.
@@ -146,18 +146,18 @@
         start_f = start_r + info.get_register_count_r()
         total   = start_f + info.get_register_count_f()
         # allocate a list of the correct size
-        env = [None] * total
+        env = new_array(total)
         make_sure_not_resized(env)
         # fill it now
         for i in range(info.get_register_count_i()):
             index = info.get_register_index_i(i)
-            env[start_i + i] = self.registers_i[index]
+            env[start_i + i] = encode(self.registers_i[index])
         for i in range(info.get_register_count_r()):
             index = info.get_register_index_r(i)
-            env[start_r + i] = self.registers_r[index]
+            env[start_r + i] = encode(self.registers_r[index])
         for i in range(info.get_register_count_f()):
             index = info.get_register_index_f(i)
-            env[start_f + i] = self.registers_f[index]
+            env[start_f + i] = encode(self.registers_f[index])
         return env
 
     def replace_active_box_in_frame(self, oldbox, newbox):
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -90,8 +90,7 @@
     if target.parent_snapshot:
         snapshot.prev = target.parent_snapshot
         return
-    s = t.create_snapshot(back.jitcode, back.pc,
-                          back.get_list_of_active_boxes(True))
+    s = t.create_snapshot(back.jitcode, back.pc, back, True)
     snapshot.prev = s
     _ensure_parent_resumedata(framestack, n - 1, t, s)
     target.parent_snapshot = s
@@ -108,7 +107,7 @@
     if n >= 0:
         top = framestack[n]
         snapshot = t.create_top_snapshot(top.jitcode, top.pc,
-                    top.get_list_of_active_boxes(False), virtualizable_boxes,
+                    top, False, virtualizable_boxes,
                     virtualref_boxes)
         _ensure_parent_resumedata(framestack, n, t,snapshot)
     else:


More information about the pypy-commit mailing list