[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