Author: Richard Plangger <r...@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 = \ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit