[pypy-commit] pypy vecopt: minor simplifications, fixed some tests cases (more to go), the additional abc opt removes some opts, the tests should not check for equivalence of all instructions, but check for a sequence
plan_rich
noreply at buildbot.pypy.org
Fri Jul 17 16:37:43 CEST 2015
Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r78579:aa9a9d9cc94b
Date: 2015-07-17 16:37 +0200
http://bitbucket.org/pypy/pypy/changeset/aa9a9d9cc94b/
Log: minor simplifications, fixed some tests cases (more to go), the
additional abc opt removes some opts, the tests should not check for
equivalence of all instructions, but check for a sequence
diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -199,10 +199,12 @@
if loop.versions is not None:
token = jitcell_token
for version in loop.versions:
- for faildescr in version.faildescrs:
+ for i, faildescr in enumerate(version.faildescrs):
vl = create_empty_loop(metainterp)
vl.inputargs = version.inputargs
- vl.operations = version.copy_operations()
+ vl.operations = version.operations
+ if i > 0:
+ vl.operations = vl.copy_operations()
vl.original_jitcell_token = jitcell_token
send_bridge_to_backend(jitdriver_sd, metainterp_sd,
faildescr, version.inputargs,
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -746,9 +746,8 @@
class LoopVersion(object):
- def __init__(self, operations, aligned=False):
+ def __init__(self, operations):
self.operations = operations
- self.aligned = aligned
self.faildescrs = []
#
idx = index_of_first(rop.LABEL, operations)
@@ -796,9 +795,6 @@
op.setfailargs(self.inputargs)
op.rd_snapshot = None
- def copy_operations(self):
- return [op.clone() for op in self.operations]
-
def update_token(self, jitcell_token):
label = self.operations[self.label_pos]
jump = self.operations[-1]
@@ -858,18 +854,20 @@
return index_of_first(opnum, self.operations)
def snapshot(self):
- version = LoopVersion(self.copy_operations(), [])
+ version = LoopVersion(self.copy_operations())
self.versions.append(version)
return version
def copy_operations(self):
+ from rpython.jit.metainterp.compile import ResumeGuardDescr
operations = []
for op in self.operations:
cloned = op.clone()
operations.append(cloned)
- if cloned.getdescr():
- descr = cloned.getdescr().clone()
- cloned.setdescr(descr)
+ descr = cloned.getdescr()
+ if cloned.is_guard() and descr:
+ assert isinstance(descr, ResumeGuardDescr)
+ cloned.setdescr(descr.clone())
return operations
def get_display_text(self): # for graphpage.py
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -68,6 +68,12 @@
unroll_factor = opt.get_unroll_count(ARCH_VEC_REG_SIZE)
print ""
print "unroll factor: ", unroll_factor, opt.smallest_type_bytes
+ if opt.loop.find_first_index(rop.GUARD_EARLY_EXIT) == -1:
+ idx = loop.find_first_index(rop.LABEL)
+ guard = ResOperation(rop.GUARD_EARLY_EXIT, [], None)
+ guard.setfailargs([])
+ guard.setdescr(compile.ResumeAtLoopHeaderDescr())
+ loop.operations.insert(idx+1, guard)
opt.analyse_index_calculations()
if opt.dependency_graph is not None:
self._write_dot_and_convert_to_svg(opt.dependency_graph, "ee" + self.test_name)
@@ -216,7 +222,6 @@
def test_vectorize_empty_with_early_exit(self):
ops = """
[]
- guard_early_exit() []
jump()
"""
try:
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -94,20 +94,6 @@
return a.left.getindex() < b.left.getindex()
packsort = listsort.make_timsort_class(lt=cmp_pack_lt)
-def copy_fail_descr(op, optimizer):
- olddescr = op.getdescr()
- exits_early = olddescr.guard_opnum == rop.GUARD_EARLY_EXIT
- if exits_early:
- if isinstance(olddescr, CompileLoopVersionDescr):
- descr = CompileLoopVersionDescr()
- else:
- descr = ResumeAtLoopHeaderDescr()
- else:
- descr = invent_fail_descr_for_op(op.getopnum(), optimizer)
- if olddescr:
- descr.copy_all_attributes_from(olddescr)
- return descr
-
class VectorizingOptimizer(Optimizer):
""" Try to unroll the loop and find instructions to group """
@@ -195,15 +181,9 @@
self.emit_unrolled_operation(label_op)
renamer = Renamer()
- pure = True
operations = []
- ee_pos = -1
for i in range(1,op_count-1):
op = loop.operations[i].clone()
- opnum = op.getopnum()
- if opnum == rop.GUARD_EARLY_EXIT:
- ee_pos = i
-
if op.is_guard():
assert isinstance(op, GuardResOp)
failargs = renamer.rename_failargs(op, clone=True)
@@ -249,7 +229,9 @@
if copied_op.is_guard():
assert isinstance(copied_op, GuardResOp)
target_guard = copied_op
- copied_op.setdescr(copy_fail_descr(copied_op, self))
+ descr = copied_op.getdescr()
+ assert isinstance(descr, ResumeGuardDescr)
+ copied_op.setdescr(descr.clone())
descr = target_guard.getdescr()
# copy failargs/snapshot
copied_op.rd_snapshot = \
More information about the pypy-commit
mailing list