[pypy-svn] r74846 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter metainterp

arigo at codespeak.net arigo at codespeak.net
Fri May 28 14:17:31 CEST 2010


Author: arigo
Date: Fri May 28 14:17:29 2010
New Revision: 74846

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
Log:
Translation fixes (step 2).


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py	Fri May 28 14:17:29 2010
@@ -1,4 +1,4 @@
-from pypy.jit.codewriter import support
+from pypy.jit.codewriter import support, heaptracker
 from pypy.jit.codewriter.regalloc import perform_register_allocation
 from pypy.jit.codewriter.flatten import flatten_graph, KINDS
 from pypy.jit.codewriter.assembler import Assembler, JitCode
@@ -72,6 +72,7 @@
             count += 1
             if not count % 500:
                 log.info("Produced %d jitcodes" % count)
+        heaptracker.finish_registering(self.cpu)
         log.info("there are %d JitCode instances." % count)
 
     def setup_vrefinfo(self, vrefinfo):

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py	Fri May 28 14:17:29 2010
@@ -52,10 +52,15 @@
         cpu._all_size_descrs_with_vtable.append(sizedescr)
         sizedescr._corresponding_vtable = vtable
 
+def finish_registering(cpu):
+    # annotation hack for small examples which have no vtable at all
+    if not hasattr(cpu, '_all_size_descrs_with_vtable'):
+        STRUCT = lltype.GcStruct('empty')
+        vtable = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
+        register_known_gctype(cpu, vtable, STRUCT)
+
 def vtable2descr(cpu, vtable):
     assert lltype.typeOf(vtable) is lltype.Signed
-    vtable = llmemory.cast_int_to_adr(vtable)
-    vtable = llmemory.cast_adr_to_ptr(vtable, VTABLETYPE)
     if we_are_translated():
         # Build the dict {vtable: sizedescr} at runtime.
         # This is necessary because the 'vtables' are just pointers to
@@ -64,9 +69,14 @@
         if d is None:
             d = cpu._vtable_to_descr_dict = {}
             for descr in cpu._all_size_descrs_with_vtable:
-                d[descr._corresponding_vtable] = descr
+                key = descr._corresponding_vtable
+                key = llmemory.cast_ptr_to_adr(key)
+                key = llmemory.cast_adr_to_int(key)
+                d[key] = descr
         return d[vtable]
     else:
+        vtable = llmemory.cast_int_to_adr(vtable)
+        vtable = llmemory.cast_adr_to_ptr(vtable, VTABLETYPE)
         for descr in cpu._all_size_descrs_with_vtable:
             if descr._corresponding_vtable == vtable:
                 return descr

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py	Fri May 28 14:17:29 2010
@@ -123,7 +123,7 @@
     def get_register_index_f(self, index):
         return ord(self.live_f[index])
 
-    def enumerate_vars(self, callback_i, callback_r, callback_f):
+    def enumerate_vars(self, callback_i, callback_r, callback_f, spec):
         index = 0
         for i in range(self.get_register_count_i()):
             callback_i(index, self.get_register_index_i(i))
@@ -134,6 +134,7 @@
         for i in range(self.get_register_count_f()):
             callback_f(index, self.get_register_index_f(i))
             index += 1
+    enumerate_vars._annspecialcase_ = 'specialize:arg(4)'
 
 _liveness_cache = {}
 

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py	Fri May 28 14:17:29 2010
@@ -16,6 +16,7 @@
 # ____________________________________________________________
 
 def do_call(cpu, metainterp, argboxes, descr):
+    assert metainterp is not None
     # count the number of arguments of the different types
     count_i = count_r = count_f = 0
     for i in range(1, len(argboxes)):
@@ -161,6 +162,7 @@
                   [x1box.getref_base(), x2box.getref_base()], None)
 
 def do_int_add_ovf(cpu, metainterp, box1, box2):
+    assert metainterp is not None
     a = box1.getint()
     b = box2.getint()
     try:
@@ -173,6 +175,7 @@
     return BoxInt(z)
 
 def do_int_sub_ovf(cpu, metainterp, box1, box2):
+    assert metainterp is not None
     a = box1.getint()
     b = box2.getint()
     try:
@@ -185,6 +188,7 @@
     return BoxInt(z)
 
 def do_int_mul_ovf(cpu, metainterp, box1, box2):
+    assert metainterp is not None
     a = box1.getint()
     b = box2.getint()
     try:

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py	Fri May 28 14:17:29 2010
@@ -232,6 +232,7 @@
 
 class ConstInt(Const):
     type = INT
+    value = 0
     _attrs_ = ('value',)
 
     def __init__(self, value):

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Fri May 28 14:17:29 2010
@@ -4,6 +4,7 @@
 from pypy.rlib.unroll import unrolling_iterable
 from pypy.rlib.debug import debug_start, debug_stop, debug_print
 from pypy.rlib.debug import make_sure_not_resized
+from pypy.rlib import nonconst
 
 from pypy.jit.metainterp import history, compile, resume
 from pypy.jit.metainterp.history import Const, ConstInt, ConstPtr, ConstFloat
@@ -59,6 +60,8 @@
         """Copy jitcode.constants[0] to registers[255],
                 jitcode.constants[1] to registers[254],
                 jitcode.constants[2] to registers[253], etc."""
+        if nonconst.NonConstant(0):             # force the right type
+            constants[0] = ConstClass.value     # (useful for small tests)
         i = len(constants) - 1
         while i >= 0:
             j = 255 - i
@@ -138,7 +141,7 @@
             count = self.jitcode.num_regs_f()
             registers = self.registers_f
         else:
-            assert 0, repr(oldbox)
+            assert 0, oldbox
         for i in range(count):
             if registers[i] is oldbox:
                 registers[i] = newbox

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	Fri May 28 14:17:29 2010
@@ -531,7 +531,8 @@
         # pypy.jit.codewriter.jitcode.  Some tests give a different 'info'.
         info.enumerate_vars(self._callback_i,
                             self._callback_r,
-                            self._callback_f)
+                            self._callback_f,
+                            self.unique_id)    # <-- annotation hack
         self.cur_numb = self.cur_numb.prev
 
     def _callback_i(self, index, register_index):
@@ -569,6 +570,7 @@
     return resumereader.liveboxes, virtualizable_boxes, virtualref_boxes
 
 class ResumeDataBoxReader(AbstractResumeDataReader):
+    unique_id = lambda: None
 
     def __init__(self, storage, metainterp):
         self._init(metainterp.cpu, storage)
@@ -752,6 +754,7 @@
     return resumereader.virtuals
 
 class ResumeDataDirectReader(AbstractResumeDataReader):
+    unique_id = lambda: None
     virtual_default = lltype.nullptr(llmemory.GCREF.TO)
     resume_after_guard_not_forced = 0
     #             0: not a GUARD_NOT_FORCED



More information about the Pypy-commit mailing list