Author: fijal
Branch: jit-leaner-frontend
Changeset: r83290:05ae1cad8b2d
Date: 2016-03-23 11:19 +0200
http://bitbucket.org/pypy/pypy/changeset/05ae1cad8b2d/
Log: whack enough tests to pass
diff --git a/rpython/jit/metainterp/optimizeopt/dependency.py
b/rpython/jit/metainterp/optimizeopt/dependency.py
--- a/rpython/jit/metainterp/optimizeopt/dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/dependency.py
@@ -76,14 +76,14 @@
i += 1
continue
op = node.getoperation()
- if op.is_guard():
+ if rop.is_guard(op.opnum):
descr = op.getdescr()
if not descr:
return False
assert isinstance(descr, AbstractFailDescr)
if not descr.exits_early():
return False
- elif not op.is_always_pure():
+ elif not rop.is_always_pure(op.opnum):
return False
i += 1
return True
@@ -542,7 +542,7 @@
def __init__(self, loop):
self.loop = loop
self.label = Node(loop.label, 0)
- self.nodes = [ Node(op,0) for op in loop.operations if not
op.is_jit_debug() ]
+ self.nodes = [ Node(op,0) for op in loop.operations if not
rop.is_jit_debug(op.opnum) ]
for i,node in enumerate(self.nodes):
node.opidx = i+1
self.inodes = [] # imaginary nodes
@@ -594,9 +594,9 @@
# pass 1
for i,node in enumerate(self.nodes):
op = node.op
- if op.is_always_pure():
+ if rop.is_always_pure(op.opnum):
node.setpriority(1)
- if op.is_guard():
+ if rop.is_guard(op.opnum):
node.setpriority(2)
# the label operation defines all operations at the
# beginning of the loop
@@ -607,11 +607,11 @@
# In SSA form. Modifications get a new variable
tracker.define(op, node)
# usage of defined variables
- if op.is_always_pure() or op.is_final():
+ if rop.is_always_pure(op.opnum) or rop.is_final(op.opnum):
# normal case every arguments definition is set
for arg in op.getarglist():
tracker.depends_on_arg(arg, node)
- elif op.is_guard():
+ elif rop.is_guard(op.opnum):
if node.exits_early():
pass
else:
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py
b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -312,7 +312,7 @@
class LoadRestrict(OpRestrict):
def opcount_filling_vector_register(self, op, vec_reg_size):
- assert op.is_primitive_load()
+ assert rop.is_primitive_load(op.opnum)
descr = op.getdescr()
return vec_reg_size // descr.get_item_size_in_bytes()
@@ -332,7 +332,7 @@
return descr.get_item_size_in_bytes()
def opcount_filling_vector_register(self, op, vec_reg_size):
- assert op.is_primitive_store()
+ assert rop.is_primitive_store(op.opnum)
descr = op.getdescr()
return vec_reg_size // descr.get_item_size_in_bytes()
@@ -921,7 +921,7 @@
"""
left = self.leftmost()
if left.returns_void():
- if left.is_primitive_store():
+ if rop.is_primitive_store(left.opnum):
# make this case more general if it turns out this is
# not the only case where packs need to be trashed
descr = left.getdescr()
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_dependency.py
b/rpython/jit/metainterp/optimizeopt/test/test_dependency.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_dependency.py
@@ -96,7 +96,7 @@
assert oplist_i == len(oplist), msg
def parse_loop(self, ops, add_label=True):
- loop = self.parse(ops, postprocess=self.postprocess)
+ loop = self.parse(ops)
loop.operations = filter(lambda op: op.getopnum() !=
rop.DEBUG_MERGE_POINT, loop.operations)
token = JitCellToken()
if add_label:
@@ -230,10 +230,7 @@
for i,op in enumerate(loop.operations):
print "[",i,"]",op,
if op.is_guard():
- if op.rd_snapshot:
- print op.rd_snapshot.boxes
- else:
- print op.getfailargs()
+ print op.getfailargs()
else:
print ""
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -12,7 +12,7 @@
OpHelpers, InputArgRef
from rpython.jit.metainterp.resumecode import unpack_numbering
from rpython.rlib.rarithmetic import LONG_BIT
-from rpython.jit.tool.oparser import parse
+from rpython.jit.tool.oparser import parse, convert_loop_to_trace
# ____________________________________________________________
@@ -29,7 +29,7 @@
exp = parse(optops, namespace=self.namespace.copy())
expected = convert_old_style_to_targets(exp, jump=True)
call_pure_results = self._convert_call_pure_results(call_pure_results)
- trace = self.convert_loop_to_packed(loop)
+ trace = convert_loop_to_trace(loop)
compile_data = compile.SimpleCompileData(trace,
call_pure_results)
info, ops = self._do_optimize_loop(compile_data)
@@ -2029,8 +2029,6 @@
if varname not in virtuals:
if strict:
assert box.same_box(oparse.getvar(varname))
- else:
- assert box.getvalue() == oparse.getvar(varname).getvalue()
else:
tag, resolved, fieldstext = virtuals[varname]
if tag[0] == 'virtual':
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
@@ -2,8 +2,9 @@
from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest,\
LLtypeMixin, convert_old_style_to_targets
from rpython.jit.metainterp import compile
+from rpython.jit.tool import oparser
from rpython.jit.metainterp.resoperation import ResOperation, rop
-from rpython.jit.metainterp.history import TargetToken
+from rpython.jit.metainterp.history import TargetToken, IntFrontendOp,
RefFrontendOp
class TestOptimizeBridge(BaseTest, LLtypeMixin):
enable_opts =
"intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll"
@@ -12,12 +13,7 @@
inline_short_preamble=True, jump_values=None,
bridge_values=None):
loop = self.parse(ops)
- self.set_values(loop.operations, jump_values)
- if expected_loop is not None:
- xxx
- exp_loop = self.parse(expected_loop, postprocess=self.postprocess)
- self.assert_equal(loop, convert_old_style_to_targets(exp_loop))
- info = self.unroll_and_optimize(loop, None)
+ info = self.unroll_and_optimize(loop, None, jump_values=jump_values)
jitcell_token = compile.make_jitcell_token(None)
mid_label_descr = TargetToken(jitcell_token)
mid_label_descr.short_preamble = info.short_preamble
@@ -29,12 +25,11 @@
info.preamble.operations[0].setdescr(start_label_descr)
guards = [op for op in loop.operations if op.is_guard()]
assert len(guards) == 1, "more than one guard in the loop"
- bridge = self.parse(bridge_ops, postprocess=self.postprocess)
- self.set_values(bridge.operations, bridge_values)
- start_label = ResOperation(rop.LABEL, bridge.inputargs)
+ bridge = self.parse(bridge_ops)
bridge.operations[-1].setdescr(jitcell_token)
self.add_guard_future_condition(bridge)
- data = compile.BridgeCompileData(start_label, bridge.operations,
+ trace = oparser.convert_loop_to_trace(bridge)
+ data = compile.BridgeCompileData(trace,
self.convert_values(bridge.operations[-1].getarglist(), bridge_values),
enable_opts=self.enable_opts,
inline_short_preamble=inline_short_preamble)
bridge_info, ops = self._do_optimize_loop(data)
@@ -44,7 +39,7 @@
ops)
bridge.inputargs = bridge_info.inputargs
bridge.check_consistency(check_descr=False)
- expected = self.parse(expected, postprocess=self.postprocess)
+ expected = self.parse(expected)
self.assert_equal(bridge, convert_old_style_to_targets(expected,
jump=True))
jump_bridge = bridge.operations[-1]
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -19,6 +19,7 @@
VirtualStateInfo
from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.codewriter import heaptracker
+from rpython.jit.tool import oparser
class FakeOptimizer(object):
optearlyforce = None
@@ -39,7 +40,7 @@
enable_opts =
"intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll"
def optimize(self, ops):
- loop = self.parse(ops, postprocess=self.postprocess)
+ loop = self.parse(ops)
self.add_guard_future_condition(loop)
operations = loop.operations
jumpop = operations[-1]
@@ -54,15 +55,15 @@
token = JitCellToken()
start_label = ResOperation(rop.LABEL, inputargs,
descr=TargetToken(token))
stop_label = ResOperation(rop.LABEL, jump_args, descr=token)
- compile_data = LoopCompileData(start_label, stop_label, operations)
+ trace = oparser.convert_loop_to_trace(loop)
+ compile_data = LoopCompileData(trace, inputargs)
start_state, newops = self._do_optimize_loop(compile_data)
preamble.operations = newops
preamble.inputargs = start_state.renamed_inputargs
return start_state, loop, preamble
def compare_short(self, short, expected_short):
- expected_short = self.parse(expected_short,
- postprocess=self.postprocess)
+ expected_short = self.parse(expected_short)
remap = {}
exp = ([ResOperation(rop.LABEL, expected_short.inputargs)] +
expected_short.operations)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -55,11 +55,11 @@
loop2 = pure_parse(ops, namespace=namespace)
loop3 = pure_parse(ops.replace("i2 = int_add", "i2 = int_sub"),
namespace=namespace)
- assert equaloplists(loop1._get_operations(), loop2._get_operations(),
+ assert equaloplists(loop1.operations, loop2.operations,
remap=make_remap(loop1.inputargs,
loop2.inputargs))
py.test.raises(AssertionError,
- "equaloplists(loop1._get_operations(),
loop3._get_operations(),"
+ "equaloplists(loop1.operations, loop3.operations,"
"remap=make_remap(loop1.inputargs, loop3.inputargs))")
def test_equaloplists_fail_args():
@@ -509,7 +509,6 @@
# invent a GUARD_FUTURE_CONDITION to not have to change all tests
if res.operations[-1].getopnum() == rop.JUMP:
guard = ResOperation(rop.GUARD_FUTURE_CONDITION, [])
- guard.rd_snapshot = resume.TopSnapshot(None, [], [])
res.operations.insert(-1, guard)
@staticmethod
@@ -545,6 +544,24 @@
call_pure_results[list(k)] = v
return call_pure_results
+ def convert_values(self, inpargs, values):
+ from rpython.jit.metainterp.history import IntFrontendOp, RefFrontendOp
+ if values:
+ r = []
+ for arg, v in zip(inpargs, values):
+ if arg.type == 'i':
+ n = IntFrontendOp(0)
+ if v is not None:
+ n.setint(v)
+ else:
+ n = RefFrontendOp(0)
+ if v is not None:
+ n.setref_base(v)
+ assert arg.type == 'r'
+ r.append(n)
+ return r
+ return inpargs
+
def unroll_and_optimize(self, loop, call_pure_results=None,
jump_values=None):
self.add_guard_future_condition(loop)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
@@ -23,7 +23,7 @@
from rpython.jit.metainterp.optimizeopt.version import LoopVersionInfo
from rpython.jit.backend.llsupport.descr import ArrayDescr
from rpython.jit.metainterp.optimizeopt.dependency import Node, DependencyGraph
-from rpython.jit.tool.oparser import OpParser
+from rpython.jit.tool.oparser import OpParser, convert_loop_to_trace
from rpython.jit.backend.detect_cpu import getcpuclass
CPU = getcpuclass()
@@ -81,8 +81,8 @@
jitdriver_sd = FakeJitDriverStaticData()
def assert_vectorize(self, loop, expected_loop, call_pure_results=None):
- jump = ResOperation(rop.LABEL, loop.jump.getarglist(),
loop.jump.getdescr())
- compile_data = compile.LoopCompileData(loop.label, jump,
loop.operations)
+ trace = convert_loop_to_trace(loop)
+ compile_data = compile.LoopCompileData(trace, loop.jump.getarglist())
state = self._do_optimize_loop(compile_data)
loop.label = state[0].label_op
loop.opererations = state[1]
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -20,6 +20,7 @@
from rpython.jit.metainterp.resoperation import ResOperation, rop
from rpython.jit.metainterp import resume, compile
from rpython.jit.metainterp.optimizeopt import info
+from rpython.jit.tool import oparser
class FakeOptimizer(Optimizer):
def __init__(self, cpu):
@@ -812,7 +813,7 @@
class BaseTestBridges(BaseTest):
enable_opts =
"intbounds:rewrite:virtualize:string:pure:earlyforce:heap:unroll"
- def _do_optimize_bridge(self, bridge, call_pure_results):
+ def _do_optimize_bridge(self, bridge, call_pure_results, values):
from rpython.jit.metainterp.optimizeopt import optimize_trace
from rpython.jit.metainterp.optimizeopt.util import args_dict
@@ -827,8 +828,11 @@
if hasattr(self, 'callinfocollection'):
metainterp_sd.callinfocollection = self.callinfocollection
#
- start_label = ResOperation(rop.LABEL, bridge.inputargs)
- data = compile.BridgeCompileData(start_label, bridge.operations,
+ trace = oparser.convert_loop_to_trace(bridge)
+
+ runtime_boxes = self.convert_values(bridge.operations[-1].getarglist(),
+ values)
+ data = compile.BridgeCompileData(trace, runtime_boxes,
enable_opts=self.enable_opts, inline_short_preamble=True)
info, newops = optimize_trace(metainterp_sd, None, data)
@@ -841,24 +845,12 @@
boxvalues=None):
if isinstance(loops, str):
loops = (loops, )
- loops = [self.parse(loop, postprocess=self.postprocess)
+ loops = [self.parse(loop)
for loop in loops]
- bridge = self.parse(bridge, postprocess=self.postprocess)
+ bridge = self.parse(bridge)
self.add_guard_future_condition(bridge)
token = JitCellToken()
- jump_args = bridge.operations[-1].getarglist()
- if boxvalues is not None:
- assert isinstance(boxvalues, list)
- assert len(jump_args) == len(boxvalues)
- for jump_arg, v in zip(jump_args, boxvalues):
- jump_arg.setref_base(v)
for loop in loops:
- loop_jump_args = loop.operations[-1].getarglist()
- if boxvalues is not None:
- assert isinstance(boxvalues, list)
- assert len(jump_args) == len(boxvalues)
- for jump_arg, v in zip(loop_jump_args, boxvalues):
- jump_arg.setref_base(v)
info = self.unroll_and_optimize(loop)
loop.preamble = info.preamble
loop.preamble.operations[0].setdescr(TargetToken(token))
@@ -869,7 +861,7 @@
for b in bridge.inputargs + [op for op in bridge.operations]:
boxes[str(b)] = b
bridge.operations[-1].setdescr(token)
- info = self._do_optimize_bridge(bridge, None)
+ info = self._do_optimize_bridge(bridge, None, boxvalues)
if not info.final():
assert expected == 'RETRACE'
return
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py
b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -660,7 +660,7 @@
#
if origin_pack is None:
op = lnode.getoperation()
- if op.is_primitive_load():
+ if rop.is_primitive_load(op.opnum):
return Pair(lnode, rnode)
else:
return Pair(lnode, rnode)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit