Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r77990:ec09c339cc68 Date: 2015-06-09 13:55 +0200 http://bitbucket.org/pypy/pypy/changeset/ec09c339cc68/
Log: works now for the int16 case 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 @@ -609,6 +609,15 @@ rop.VEC_CAST_INT_TO_FLOAT: OpToVectorOpConv(PT_INT32_2, PT_DOUBLE_2), } +def determine_output_type(node, input_type): + op = node.getoperation() + op2vecop = ROP_ARG_RES_VECTOR.get(op.vector, None) + if op2vecop is None: + raise NotImplementedError("missing vecop for '%s'" % (op.getopname(),)) + if isinstance(op2vecop, OpToVectorOpConv): + return op2vecop.determine_output_type(op) + return input_type + class VecScheduleData(SchedulerData): def __init__(self, vec_reg_size): self.box_to_vbox = {} @@ -681,7 +690,11 @@ self.accum_variable = None self.accum_position = -1 self.input_type = input_type + if input_type: + self.input_type.count = len(ops) self.output_type = output_type + if output_type: + self.output_type.count = len(ops) def opcount(self): return len(self.operations) 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 @@ -547,11 +547,17 @@ return None if origin_pack is None: descr = lnode.getoperation().getdescr() - input_type = PackType.by_descr(descr, self.vec_reg_size) - return Pair(lnode, rnode, input_type, None) + ptype = PackType.by_descr(descr, self.vec_reg_size) + if lnode.getoperation().is_raw_load(): + # load outputs value, no input + return Pair(lnode, rnode, None, ptype) + else: + # store only has an input + return Pair(lnode, rnode, ptype, None) if self.profitable_pack(lnode, rnode, origin_pack): - ptype = origin_pack.output_type - return Pair(lnode, rnode, ptype, ptype) + input_type = origin_pack.output_type + output_type = determine_output_type(lnode, input_type) + return Pair(lnode, rnode, input_type, output_type) else: if self.contains_pair(lnode, rnode): return None @@ -665,7 +671,7 @@ var = pack.accum_variable pos = pack.accum_position # create a new vector box for the parameters - box = pack.input_type.new_vector_box(0) + box = pack.input_type.new_vector_box() op = ResOperation(rop.VEC_BOX, [ConstInt(0)], box) sched_data.invariant_oplist.append(op) result = box.clonebox() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit