Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79118:81c2f4a28f89
Date: 2015-08-21 15:54 +0200
http://bitbucket.org/pypy/pypy/changeset/81c2f4a28f89/
Log: translation issues and added documentation to some routines in the
scheduler
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -592,7 +592,7 @@
return AsmInfo(ops_offset, startpos + rawstart, codeendpos - startpos,
rawstart)
def stitch_bridge(self, faildescr, target):
- assert target != 0
+ assert target.rawstart != 0
self.patch_jump_for_descr(faildescr, target.rawstart)
def write_pending_failure_recoveries(self, regalloc):
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
@@ -771,7 +771,8 @@
return self._compiled is not None
def copy_operations(self, operations):
- from rpython.jit.metainterp.compile import ResumeGuardDescr
+ from rpython.jit.metainterp.compile import (ResumeGuardDescr,
+ CompileLoopVersionDescr)
ignore = (rop.DEBUG_MERGE_POINT,)
oplist = []
for op in operations:
@@ -787,6 +788,8 @@
cloned.setdescr(descr)
if olddescr.loop_version():
# copy the version
+ assert isinstance(olddescr, CompileLoopVersionDescr)
+ assert isinstance(descr, CompileLoopVersionDescr)
descr.version = olddescr.version
self.faildescrs.append(descr)
return oplist
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
@@ -303,6 +303,7 @@
def transform_pack(self):
+ """ high level transformation routine of a pack to operations """
op = self.pack.leftmost()
args = op.getarglist()
self.before_argument_transform(args)
@@ -344,6 +345,7 @@
return self.pack.operations
def transform_arguments(self, args):
+ """ transforming one argument to a vector box argument """
for i,arg in enumerate(args):
if isinstance(arg, BoxVector):
continue
@@ -444,6 +446,7 @@
return vbox_cloned
def unpack(self, vbox, index, count, arg_ptype):
+ """ extract parts of the vector box into another vector box """
assert index < vbox.getcount()
assert index + count <= vbox.getcount()
assert count > 0
@@ -491,6 +494,9 @@
assert result.getcount() > arg0.getcount()
def expand(self, arg, argidx):
+ """ expand a value into a vector box. useful for arith metic
+ of one vector with a scalar (either constant/varialbe)
+ """
elem_count = self.input_type.getcount()
vbox = self.input_type.new_vector_box(elem_count)
box_type = arg.type
@@ -665,10 +671,6 @@
def get_input_type_given(self, output_type, op):
raise AssertionError("cannot infer input type from output type")
- # OLD
- def determine_output_type(self, op):
- return None
-
GUARD_TF = PassThroughOp((PT_INT_GENERIC,))
INT_OP_TO_VOP = OpToVectorOp((PT_INT_GENERIC, PT_INT_GENERIC), INT_RES)
FLOAT_OP_TO_VOP = OpToVectorOp((PT_FLOAT_GENERIC, PT_FLOAT_GENERIC), FLOAT_RES)
@@ -784,6 +786,7 @@
scheduler.oplist.append(op)
def as_vector_operation(self, scheduler, pack):
+ """ transform a pack into a single or several operation """
assert pack.opcount() > 1
# properties that hold for the pack are:
# + isomorphism (see func above)
@@ -794,7 +797,6 @@
op = pack.operations[0].getoperation()
determine_trans(op).as_vector_operation(pack, self, scheduler, oplist)
#
- # XXX
if pack.is_accumulating():
box = oplist[position].result
assert box is not None
@@ -804,6 +806,9 @@
scheduler.renamer.start_renaming(op.result, box)
def unpack_from_vector(self, op, scheduler):
+ """ if a box is needed that is currently stored within a vector
+ box, this utility creates a unpacking instruction
+ """
args = op.getarglist()
# unpack for an immediate use
@@ -917,6 +922,7 @@
node.pack_position = i
def rightmost_match_leftmost(self, other):
+ """ check if pack A can be combined with pack B """
assert isinstance(other, Pack)
rightmost = self.operations[-1]
leftmost = other.operations[0]
@@ -955,6 +961,7 @@
self.right is other.right
class AccumPair(Pair):
+ """ A pair that keeps track of an accumulation value """
def __init__(self, left, right, input_type, output_type, accum):
assert isinstance(left, Node)
assert isinstance(right, Node)
diff --git a/rpython/jit/metainterp/test/test_vectorize.py
b/rpython/jit/metainterp/test/test_vectorize.py
--- a/rpython/jit/metainterp/test/test_vectorize.py
+++ b/rpython/jit/metainterp/test/test_vectorize.py
@@ -283,7 +283,7 @@
res = self.meta_interp(f, [i])
assert res == f(i)
- @py.test.mark.parametrize('i,v1,v2',[(25,2.5,0.3)])
+ @py.test.mark.parametrize('i,v1,v2',[(25,2.5,0.3), (15,44.0,22.2)])
def test_list_vectorize(self,i,v1,v2):
myjitdriver = JitDriver(greens = [],
reds = 'auto')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit