[pypy-commit] pypy vecopt2: adjusted the test suit after a refactoring the vectorization optimizer
plan_rich
noreply at buildbot.pypy.org
Tue May 5 09:45:27 CEST 2015
Author: Richard Plangger <rich at pasra.at>
Branch: vecopt2
Changeset: r77079:2298583fcc92
Date: 2015-03-16 11:44 +0100
http://bitbucket.org/pypy/pypy/changeset/2298583fcc92/
Log: adjusted the test suit after a refactoring the vectorization
optimizer
diff --git a/rpython/jit/metainterp/optimizeopt/dependency.py b/rpython/jit/metainterp/optimizeopt/dependency.py
--- a/rpython/jit/metainterp/optimizeopt/dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/dependency.py
@@ -18,10 +18,9 @@
Representation is an adjacent list. The number of edges between the
vertices is expected to be small.
"""
- def __init__(self, optimizer):
- self.loop = optimizer.loop
- self.operations = self.loop.operations
- self.optimizer = optimizer
+ def __init__(self, trace):
+ self.trace = trace
+ self.operations = self.trace.operations
self.adjacent_list = [ [] for i in range(len(self.operations)) ]
self.build_dependencies(self.operations)
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
@@ -1,4 +1,5 @@
import py
+
from rpython.rlib.objectmodel import instantiate
from rpython.jit.metainterp.optimizeopt.test.test_util import (
LLtypeMixin, BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets)
@@ -8,7 +9,7 @@
import rpython.jit.metainterp.optimizeopt.virtualize as virtualize
from rpython.jit.metainterp.optimizeopt.dependency import DependencyGraph
from rpython.jit.metainterp.optimizeopt.unroll import Inliner
-from rpython.jit.metainterp.optimizeopt.vectorize import OptVectorize, MemoryRef
+from rpython.jit.metainterp.optimizeopt.vectorize import VectorizingOptimizer, MemoryRef
from rpython.jit.metainterp.optimize import InvalidLoop
from rpython.jit.metainterp.history import ConstInt, BoxInt, get_const_ptr_for_string
from rpython.jit.metainterp import executor, compile, resume
@@ -27,7 +28,7 @@
def build_dependency(self, ops):
loop = self.parse_loop(ops)
- return DependencyGraph(None, loop)
+ return DependencyGraph(loop)
def parse_loop(self, ops):
loop = self.parse(ops, postprocess=self.postprocess)
@@ -45,7 +46,7 @@
def vec_optimizer(self, loop):
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
jitdriver_sd = FakeJitDriverStaticData()
- opt = OptVectorize(metainterp_sd, jitdriver_sd, loop, [])
+ opt = VectorizingOptimizer(metainterp_sd, jitdriver_sd, loop, [])
return opt
def vec_optimizer_unrolled(self, loop, unroll_factor = -1):
@@ -54,6 +55,7 @@
if unroll_factor == -1:
unroll_factor = opt.get_estimated_unroll_factor()
opt.unroll_loop_iterations(loop, unroll_factor)
+ opt.loop.operations = opt.get_newoperations()
return opt
def assert_unroll_loop_equals(self, loop, expected_loop, \
@@ -509,11 +511,11 @@
self.assert_memory_ref_not_adjacent(mref, mref2)
assert mref == mref2
- def test_array_memory_ref_diff_calc_but_equal(self):
+ def test_array_memory_ref_diff_not_equal(self):
ops = """
[p0,i0]
i1 = int_add(i0,4)
- i2 = int_floor(i1,2)
+ i2 = int_floordiv(i1,2)
i3 = raw_load(p0,i2,descr=chararraydescr)
i4 = int_add(i0,2)
i5 = int_mul(i4,2)
@@ -528,7 +530,7 @@
mref2 = vopt.vec_info.memory_refs[7]
self.assert_memory_ref_not_adjacent(mref, mref2)
- assert mref == mref2
+ assert mref != mref2
class TestLLtype(BaseTestDependencyGraph, LLtypeMixin):
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
@@ -52,19 +52,24 @@
def unroll_loop_iterations(self, loop, unroll_factor):
label_op = loop.operations[0]
jump_op = loop.operations[-1]
- operations = [loop.operations[i].clone() for i in range(1,len(loop.operations)-1)]
- loop.operations = []
+
+ # TODO use the new optimizer structure (branch of fijal currently)
+ label_op_args = [self.getvalue(box).get_key_box() for box in label_op.getarglist()]
+ values = [self.getvalue(box) for box in label_op.getarglist()]
+
+ operations = []
+ self.emit_unrolled_operation(label_op)
+
+ for i in range(1,len(loop.operations)-1):
+ op = loop.operations[i].clone()
+ operations.append(op)
+ self.emit_unrolled_operation(op)
op_index = len(operations) + 1
- iterations = [operations]
- label_op_args = [self.getvalue(box).get_key_box() for box in label_op.getarglist()]
- values = [self.getvalue(box) for box in label_op.getarglist()]
-
jump_op_args = jump_op.getarglist()
rename_map = {}
- self.emit_unrolled_operation(label_op)
for unroll_i in range(2, unroll_factor+1):
# for each unrolling factor the boxes are renamed.
self._rename_arguments_ssa(rename_map, label_op_args, jump_op_args)
@@ -146,7 +151,7 @@
self.find_adjacent_memory_refs()
def build_dependency_graph(self):
- self.dependency_graph = DependencyGraph(self)
+ self.dependency_graph = DependencyGraph(self.loop)
def find_adjacent_memory_refs(self):
""" the pre pass already builds a hash of memory references and the
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
@@ -15,11 +15,6 @@
class VectorizeTest(object):
enable_opts = ''
- automatic_promotion_result = {
- 'int_add' : 6, 'int_gt' : 1, 'guard_false' : 1, 'jump' : 1,
- 'guard_value' : 3
- }
-
def meta_interp(self, f, args, policy=None):
return ll_meta_interp(f, args, enable_opts=self.enable_opts,
policy=policy,
More information about the pypy-commit
mailing list