[pypy-commit] pypy jit-leaner-frontend: revert the changes to oparser, will try to hack differently
fijal
pypy.commits at gmail.com
Wed Mar 2 11:47:53 EST 2016
Author: fijal
Branch: jit-leaner-frontend
Changeset: r82661:23fc5965ce9d
Date: 2016-03-02 17:47 +0100
http://bitbucket.org/pypy/pypy/changeset/23fc5965ce9d/
Log: revert the changes to oparser, will try to hack differently
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -9,9 +9,8 @@
from rpython.jit.metainterp.resoperation import rop, ResOperation, \
InputArgInt, InputArgRef, InputArgFloat, InputArgVector, \
- ResOpWithDescr, N_aryOp, UnaryOp, PlainResOp, optypes, OpHelpers,\
+ ResOpWithDescr, N_aryOp, UnaryOp, PlainResOp, optypes, OpHelpers, \
VectorizationInfo
-from rpython.jit.metainterp.opencoder import Trace
class ParseError(Exception):
pass
@@ -325,7 +324,7 @@
assert descr is None
return op
else:
- res = self.record(opnum, args, descr)
+ res = ResOperation(opnum, args, -1, descr)
if fail_args is not None:
res.setfailargs(fail_args)
if self._postproces:
@@ -392,6 +391,7 @@
def parse(self):
lines = self.input.splitlines()
+ ops = []
newlines = []
first_comment = None
for line in lines:
@@ -411,25 +411,26 @@
continue # a comment or empty line
newlines.append(line)
base_indent, inpargs, newlines = self.parse_inpargs(newlines)
- self.trace = self.model.Trace(inpargs)
- num, last_offset = self.parse_ops(base_indent, newlines, 0)
+ num, ops, last_offset = self.parse_ops(base_indent, newlines, 0)
if num < len(newlines):
raise ParseError("unexpected dedent at line: %s" % newlines[num])
- self.trace.comment = first_comment
- self.trace.original_jitcell_token = self.original_jitcell_token
- return self.trace
-
- def record(self, opnum, args, descr):
- return self.trace.record_op(opnum, args, descr)
+ loop = self.model.ExtendedTreeLoop("loop")
+ loop.comment = first_comment
+ loop.original_jitcell_token = self.original_jitcell_token
+ loop.operations = ops
+ loop.inputargs = inpargs
+ loop.last_offset = last_offset
+ return loop
def parse_ops(self, indent, lines, start):
num = start
+ ops = []
last_offset = None
while num < len(lines):
line = lines[num]
if not line.startswith(" " * indent):
# dedent
- return num, None
+ return num, ops
elif line.startswith(" "*(indent + 1)):
raise ParseError("indentation not valid any more")
elif line.startswith(" " * indent + "#"):
@@ -444,8 +445,9 @@
op = self.parse_next_op(line)
if offset:
op.offset = offset
+ ops.append(op)
num += 1
- return num, last_offset
+ return num, ops, last_offset
def postprocess(self, loop):
""" A hook that can be overloaded to do some postprocessing
diff --git a/rpython/jit/tool/test/test_oparser.py b/rpython/jit/tool/test/test_oparser.py
--- a/rpython/jit/tool/test/test_oparser.py
+++ b/rpython/jit/tool/test/test_oparser.py
@@ -24,12 +24,11 @@
finish() # (tricky)
"""
loop = self.parse(x)
- ops = loop._get_operations()
- assert len(ops) == 3
- assert [op.getopnum() for op in ops] == [rop.INT_ADD, rop.INT_SUB,
+ assert len(loop.operations) == 3
+ assert [op.getopnum() for op in loop.operations] == [rop.INT_ADD, rop.INT_SUB,
rop.FINISH]
assert len(loop.inputargs) == 2
- assert ops[-1].getdescr()
+ assert loop.operations[-1].getdescr()
def test_const_ptr_subops(self):
x = """
@@ -39,10 +38,9 @@
S = lltype.Struct('S')
vtable = lltype.nullptr(S)
loop = self.parse(x, None, locals())
- ops = loop._get_operations()
- assert len(ops) == 1
- assert ops[0].getdescr()
- assert not ops[0].getfailargs()
+ assert len(loop.operations) == 1
+ assert loop.operations[0].getdescr()
+ assert loop.operations[0].getfailargs() == []
def test_descr(self):
class Xyz(AbstractDescr):
@@ -54,8 +52,7 @@
"""
stuff = Xyz()
loop = self.parse(x, None, locals())
- ops = loop._get_operations()
- assert ops[0].getdescr() is stuff
+ assert loop.operations[0].getdescr() is stuff
def test_after_fail(self):
x = """
@@ -64,7 +61,7 @@
i1 = int_add(1, 2)
"""
loop = self.parse(x, None, {})
- assert len(loop._get_operations()) == 2
+ assert len(loop.operations) == 2
def test_descr_setfield(self):
class Xyz(AbstractDescr):
@@ -76,7 +73,7 @@
"""
stuff = Xyz()
loop = self.parse(x, None, locals())
- assert loop._get_operations()[0].getdescr() is stuff
+ assert loop.operations[0].getdescr() is stuff
def test_getvar_const_ptr(self):
x = '''
@@ -86,7 +83,7 @@
TP = lltype.GcArray(lltype.Signed)
NULL = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.nullptr(TP))
loop = self.parse(x, None, {'func_ptr' : NULL})
- assert loop._get_operations()[0].getarg(0).value == NULL
+ assert loop.operations[0].getarg(0).value == NULL
def test_jump_target(self):
x = '''
@@ -94,7 +91,7 @@
jump()
'''
loop = self.parse(x)
- assert loop._get_operations()[0].getdescr() is loop.original_jitcell_token
+ assert loop.operations[0].getdescr() is loop.original_jitcell_token
def test_jump_target_other(self):
looptoken = JitCellToken()
@@ -104,7 +101,7 @@
jump(descr=looptoken)
'''
loop = self.parse(x, namespace=locals())
- assert loop._get_operations()[0].getdescr() is looptoken
+ assert loop.operations[0].getdescr() is looptoken
def test_floats(self):
x = '''
@@ -112,7 +109,7 @@
f1 = float_add(f0, 3.5)
'''
loop = self.parse(x)
- box = loop._get_operations()[0].getarg(0)
+ box = loop.operations[0].getarg(0)
# we cannot use isinstance, because in case of mock the class will be
# constructed on the fly
assert box.__class__.__name__ == 'InputArgFloat'
@@ -126,13 +123,12 @@
debug_merge_point(0, 0, '(stuff) #1')
'''
loop = self.parse(x)
- ops = loop._get_operations()
- assert ops[0].getarg(2)._get_str() == 'info'
- assert ops[0].getarg(1).value == 0
- assert ops[1].getarg(2)._get_str() == 'info'
- assert ops[2].getarg(2)._get_str() == "<some ('other.')> info"
- assert ops[2].getarg(1).value == 1
- assert ops[3].getarg(2)._get_str() == "(stuff) #1"
+ assert loop.operations[0].getarg(2)._get_str() == 'info'
+ assert loop.operations[0].getarg(1).value == 0
+ assert loop.operations[1].getarg(2)._get_str() == 'info'
+ assert loop.operations[2].getarg(2)._get_str() == "<some ('other.')> info"
+ assert loop.operations[2].getarg(1).value == 1
+ assert loop.operations[3].getarg(2)._get_str() == "(stuff) #1"
def test_descr_with_obj_print(self):
@@ -168,7 +164,7 @@
p0 = new(, descr=<SizeDescr 12>)
'''
loop = self.parse(x)
- assert loop._get_operations()[0].getopname() == 'new'
+ assert loop.operations[0].getopname() == 'new'
def test_no_fail_args(self):
x = '''
@@ -176,7 +172,7 @@
guard_true(i0, descr=<Guard0>)
'''
loop = self.parse(x, nonstrict=True)
- assert not loop._get_operations()[0].getfailargs()
+ assert loop.operations[0].getfailargs() == []
def test_offsets(self):
x = """
@@ -212,9 +208,8 @@
jump(i0, descr=1)
"""
loop = self.parse(x)
- ops = loop._get_operations()
- assert ops[0].getdescr() is ops[1].getdescr()
- assert isinstance(ops[0].getdescr(), TargetToken)
+ assert loop.operations[0].getdescr() is loop.operations[1].getdescr()
+ assert isinstance(loop.operations[0].getdescr(), TargetToken)
class ForbiddenModule(object):
More information about the pypy-commit
mailing list