[pypy-svn] r74630 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter codewriter/test metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Fri May 21 16:01:52 CEST 2010
Author: arigo
Date: Fri May 21 16:01:50 2010
New Revision: 74630
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
Log:
Progress.
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py Fri May 21 16:01:50 2010
@@ -298,8 +298,8 @@
jitcode = self.callcontrol.get_jitcode(targetgraph,
called_from=self.graph)
lst.append(jitcode)
- op0 = SpaceOperation('int_guard_value', [op.args[0]], None)
- op1 = SpaceOperation('-live-', [op.args[0]], None)
+ op0 = SpaceOperation('-live-', [], None)
+ op1 = SpaceOperation('int_guard_value', [op.args[0]], None)
op2 = self.handle_residual_call(op, [IndirectCallTargets(lst)])
result = [op0, op1]
if isinstance(op2, list):
@@ -345,8 +345,8 @@
if hints.get('promote') and op.args[0].concretetype is not lltype.Void:
assert op.args[0].concretetype != lltype.Ptr(rstr.STR)
kind = getkind(op.args[0].concretetype)
- op0 = SpaceOperation('%s_guard_value' % kind, [op.args[0]], None)
- op1 = SpaceOperation('-live-', [op.args[0]], None)
+ op0 = SpaceOperation('-live-', [], None)
+ op1 = SpaceOperation('%s_guard_value' % kind, [op.args[0]], None)
# the special return value None forces op.result to be considered
# equal to op.args[0]
return [op0, op1, None]
@@ -463,8 +463,8 @@
op.args[0].concretetype.TO._hints.get('typeptr'))
def handle_getfield_typeptr(self, op):
- op0 = SpaceOperation('guard_class', [op.args[0]], op.result)
- op1 = SpaceOperation('-live-', [op.args[0]], None)
+ op0 = SpaceOperation('-live-', [], None)
+ op1 = SpaceOperation('guard_class', [op.args[0]], op.result)
return [op0, op1]
def rewrite_op_malloc(self, op):
@@ -657,9 +657,9 @@
for v in op.args[2:2+num_green_args]:
if isinstance(v, Variable) and v.concretetype is not lltype.Void:
kind = getkind(v.concretetype)
+ ops.append(SpaceOperation('-live-', [], None))
ops.append(SpaceOperation('%s_guard_value' % kind,
[v], None))
- ops.append(SpaceOperation('-live-', [v], None))
args = (self.make_three_lists(op.args[2:2+num_green_args]) +
self.make_three_lists(op.args[2+num_green_args:]))
ops.append(SpaceOperation('jit_merge_point', args, None))
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py Fri May 21 16:01:50 2010
@@ -506,8 +506,8 @@
myjitdriver.jit_merge_point(x=x, y=y)
myjitdriver.can_enter_jit(x=y, y=x)
self.encoding_test(f, [4, 5], """
- int_guard_value %i0
-live- %i0, %i1
+ int_guard_value %i0
jit_merge_point I[%i0], R[], F[], I[%i1], R[], F[]
can_enter_jit
void_return
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py Fri May 21 16:01:50 2010
@@ -303,11 +303,11 @@
tr.graph = 'someinitialgraph'
oplist = tr.rewrite_operation(op)
op0gv, op1gv, op0, op1 = oplist
- assert op0gv.opname == 'int_guard_value'
- assert op0gv.args == [op.args[0]]
- assert op0gv.result is None
- assert op1gv.opname == '-live-'
+ assert op0gv.opname == '-live-'
+ assert op0gv.args == []
+ assert op1gv.opname == 'int_guard_value'
assert op1gv.args == [op.args[0]]
+ assert op1gv.result is None
#
reskind = getkind(restype)[0]
assert op0.opname == 'residual_call_%s_%s' % (expectedkind, reskind)
@@ -364,11 +364,11 @@
op = SpaceOperation('getfield', [v_parent, c_name], v_result)
oplist = Transformer(FakeCPU()).rewrite_operation(op)
op0, op1 = oplist
- assert op0.opname == 'guard_class'
- assert op0.args == [v_parent]
- assert op0.result == v_result
- assert op1.opname == '-live-'
+ assert op0.opname == '-live-'
+ assert op0.args == []
+ assert op1.opname == 'guard_class'
assert op1.args == [v_parent]
+ assert op1.result == v_result
def test_setfield():
# XXX a more compact encoding would be possible; see test_getfield()
@@ -615,11 +615,11 @@
v2)
oplist = Transformer().rewrite_operation(op)
op0, op1, op2 = oplist
- assert op0.opname == 'int_guard_value'
- assert op0.args == [v1]
- assert op0.result is None
- assert op1.opname == '-live-'
+ assert op0.opname == '-live-'
+ assert op0.args == []
+ assert op1.opname == 'int_guard_value'
assert op1.args == [v1]
+ assert op1.result is None
assert op2 is None
def test_promote_2():
@@ -635,9 +635,9 @@
block.closeblock(Link([v2], returnblock))
Transformer().optimize_block(block)
assert len(block.operations) == 2
- assert block.operations[0].opname == 'int_guard_value'
- assert block.operations[0].args == [v1]
- assert block.operations[0].result is None
- assert block.operations[1].opname == '-live-'
+ assert block.operations[0].opname == '-live-'
+ assert block.operations[0].args == []
+ assert block.operations[1].opname == 'int_guard_value'
assert block.operations[1].args == [v1]
+ assert block.operations[1].result is None
assert block.exits[0].args == [v1]
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py Fri May 21 16:01:50 2010
@@ -196,7 +196,7 @@
if resulttype == 'i':
# argcode should be 'i' too
assert argcodes[next_argcode] == '>'
- assert argcodes[next_argcode+1] == 'i'
+ assert argcodes[next_argcode + 1] == 'i'
next_argcode = next_argcode + 2
if lltype.typeOf(result) is lltype.Bool:
result = int(result)
@@ -206,7 +206,7 @@
elif resulttype == 'r':
# argcode should be 'r' too
assert argcodes[next_argcode] == '>'
- assert argcodes[next_argcode+1] == 'r'
+ assert argcodes[next_argcode + 1] == 'r'
next_argcode = next_argcode + 2
assert lltype.typeOf(result) == llmemory.GCREF
self.registers_r[ord(code[position])] = result
@@ -214,7 +214,7 @@
elif resulttype == 'f':
# argcode should be 'f' too
assert argcodes[next_argcode] == '>'
- assert argcodes[next_argcode+1] == 'f'
+ assert argcodes[next_argcode + 1] == 'f'
next_argcode = next_argcode + 2
assert lltype.typeOf(result) is lltype.Float
self.registers_f[ord(code[position])] = result
@@ -307,12 +307,10 @@
e = get_llexception(self.cpu, e)
self.handle_exception_in_frame(e)
- def get_result_i(self):
- assert self._return_type == 'i'
+ def get_tmpreg_i(self):
return self.tmpreg_i
- def get_result_r(self):
- assert self._return_type == 'r'
+ def get_tmpreg_r(self):
result = self.tmpreg_r
if we_are_translated():
self.tmpreg_r = NULL
@@ -320,19 +318,30 @@
del self.tmpreg_r
return result
- def get_result_f(self):
- assert self._return_type == 'f'
+ def get_tmpreg_f(self):
return self.tmpreg_f
- def get_result_v(self):
+ def final_result_i(self):
+ assert self._return_type == 'i'
+ return self.get_tmpreg_i()
+
+ def final_result_r(self):
+ assert self._return_type == 'r'
+ return self.get_tmpreg_r()
+
+ def final_result_f(self):
+ assert self._return_type == 'f'
+ return self.get_tmpreg_f()
+
+ def final_result_v(self):
assert self._return_type == 'v'
- def _get_result_anytype(self):
+ def _final_result_anytype(self):
"NOT_RPYTHON"
- if self._return_type == 'i': return self.get_result_i()
- if self._return_type == 'r': return self.get_result_r()
- if self._return_type == 'f': return self.get_result_f()
- if self._return_type == 'v': return None
+ if self._return_type == 'i': return self.final_result_i()
+ if self._return_type == 'r': return self.final_result_r()
+ if self._return_type == 'f': return self.final_result_f()
+ if self._return_type == 'v': return self.final_result_v()
raise ValueError(self._return_type)
def cleanup_registers(self):
@@ -531,13 +540,13 @@
@arguments("self", returns="i")
def bhimpl_int_pop(self):
- return self.get_result_i()
+ return self.get_tmpreg_i()
@arguments("self", returns="r")
def bhimpl_ref_pop(self):
- return self.get_result_r()
+ return self.get_tmpreg_r()
@arguments("self", returns="f")
def bhimpl_float_pop(self):
- return self.get_result_f()
+ return self.get_tmpreg_f()
# ----------
# float operations
@@ -669,6 +678,8 @@
else:
return target
+ bhimpl_goto_if_not_int_is_true = bhimpl_goto_if_not
+
@arguments("i", "L", "pc", returns="L")
def bhimpl_goto_if_not_int_is_zero(a, target, pc):
if not a:
@@ -971,11 +982,11 @@
self._done_with_this_frame()
kind = self._return_type
if kind == 'i':
- caller._setup_return_value_i(self.get_result_i())
+ caller._setup_return_value_i(self.final_result_i())
elif kind == 'r':
- caller._setup_return_value_r(self.get_result_r())
+ caller._setup_return_value_r(self.final_result_r())
elif kind == 'f':
- caller._setup_return_value_f(self.get_result_f())
+ caller._setup_return_value_f(self.final_result_f())
else:
assert kind == 'v'
return NULL
@@ -1028,14 +1039,14 @@
# normally (in general we get a ContinueRunningNormally exception).
sd = self.builder.metainterp_sd
if sd.result_type == 'void':
- self.get_result_v()
+ self.final_result_v()
raise sd.DoneWithThisFrameVoid()
elif sd.result_type == 'int':
- raise sd.DoneWithThisFrameInt(self.get_result_i())
+ raise sd.DoneWithThisFrameInt(self.final_result_i())
elif sd.result_type == 'ref':
- raise sd.DoneWithThisFrameRef(self.get_result_r())
+ raise sd.DoneWithThisFrameRef(self.final_result_r())
elif sd.result_type == 'float':
- raise sd.DoneWithThisFrameFloat(self.get_result_f())
+ raise sd.DoneWithThisFrameFloat(self.final_result_f())
else:
assert False
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 21 16:01:50 2010
@@ -894,11 +894,12 @@
virtualizable_boxes = None
if metainterp.staticdata.virtualizable_info is not None:
virtualizable_boxes = metainterp.virtualizable_boxes
- if resumepc < 0:
- resumepc = self.pc
+ saved_pc = self.pc
+ if resumepc >= 0:
+ self.pc = resumepc
resume.capture_resumedata(metainterp.framestack, virtualizable_boxes,
- metainterp.virtualref_boxes, resumedescr,
- resumepc)
+ metainterp.virtualref_boxes, resumedescr)
+ self.pc = saved_pc
self.metainterp.staticdata.profiler.count_ops(opnum, GUARDS)
# count
metainterp.attach_debug_info(guard_op)
@@ -2030,8 +2031,10 @@
args += (value,)
#
num_return_args = len(argcodes) - next_argcode
- assert num_return_args == 0 or num_return_args == 1
- self.pc = position + num_return_args
+ assert num_return_args == 0 or num_return_args == 2
+ if num_return_args:
+ position += 1
+ self.pc = position
#
if not we_are_translated():
print '\tpyjitpl: %s(%s)' % (name, ', '.join(map(repr, args))),
@@ -2045,7 +2048,8 @@
assert resultbox is None
else:
print '-> %r' % (resultbox,)
- result_argcode = argcodes[next_argcode]
+ assert argcodes[next_argcode] == '>'
+ result_argcode = argcodes[next_argcode + 1]
assert resultbox.type == {'i': history.INT,
'r': history.REF,
'f': history.FLOAT}[result_argcode]
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 21 16:01:50 2010
@@ -45,12 +45,12 @@
back.get_list_of_active_boxes())
def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes,
- storage, pc):
+ storage):
n = len(framestack)-1
top = framestack[n]
_ensure_parent_resumedata(framestack, n)
frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
- top.jitcode, pc)
+ top.jitcode, top.pc)
storage.rd_frame_info_list = frame_info_list
snapshot = Snapshot(top.parent_resumedata_snapshot,
top.get_list_of_active_boxes())
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py Fri May 21 16:01:50 2010
@@ -45,7 +45,7 @@
raise TypeError(T)
blackholeinterp.setposition(cw.mainjitcode, 0)
blackholeinterp.run()
- return blackholeinterp._get_result_anytype()
+ return blackholeinterp._final_result_anytype()
def _run_with_pyjitpl(cw, args, testself):
from pypy.jit.metainterp import simple_optimize
More information about the Pypy-commit
mailing list