[pypy-commit] pypy vecopt-merge: some translation issues indicated by test_zjit

plan_rich noreply at buildbot.pypy.org
Fri Sep 25 20:48:49 CEST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: vecopt-merge
Changeset: r79843:658ed0c0b405
Date: 2015-09-25 20:49 +0200
http://bitbucket.org/pypy/pypy/changeset/658ed0c0b405/

Log:	some translation issues indicated by test_zjit

diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -18,6 +18,7 @@
     return pyjitpl._warmrunnerdesc.metainterp_sd.profiler
 
 class TestNumpyJit(Jit386Mixin):
+    enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll"
     graph = None
     interp = None
 
@@ -97,6 +98,11 @@
                                              backendopt=True,
                                              graph_and_interp_only=True,
                                              ProfilerClass=Profiler,
+                                             translate_support_code=True,
+                                             translationoptions={'gc':'minimark',
+                                                                 'gcrootfinder': 'asmgcc',
+                                                                 'gcremovetypeptr': False
+                                                                },
                                              vec=True)
             self.__class__.interp = interp
             self.__class__.graph = graph
diff --git a/rpython/jit/backend/x86/vector_ext.py b/rpython/jit/backend/x86/vector_ext.py
--- a/rpython/jit/backend/x86/vector_ext.py
+++ b/rpython/jit/backend/x86/vector_ext.py
@@ -99,7 +99,7 @@
             else:
                 not_implemented("accum operator %s not implemented" %
                                             (accum_info.accum_operation)) 
-            accum_info = accum_info.prev
+            accum_info = accum_info.next()
 
     def _accum_reduce_mul(self, arg, accumloc, targetloc):
         scratchloc = X86_64_XMM_SCRATCH_REG
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -52,6 +52,9 @@
                 token.original_jitcell_token = jitcell_token
                 jitcell_token.target_tokens.append(token)
                 self.label.setdescr(token)
+            else:
+                token = self.jump.getdescr()
+                assert isinstance(token, TargetToken)
             if self.prefix_label:
                 token = TargetToken(jitcell_token)
                 token.original_jitcell_token = jitcell_token
@@ -102,7 +105,7 @@
     user_code = not jitdriver_sd.vec and warmstate.vec_all
     loop = VectorLoop(loop_info.label_op, loop_ops[1:-1], loop_ops[-1])
     if user_code and user_loop_bail_fast_path(loop, warmstate):
-        return
+        return loop_info, loop_ops
     # the original loop (output of optimize_unroll)
     info = LoopVersionInfo(loop_info)
     version = info.snapshot(loop)
@@ -113,7 +116,7 @@
         #
         start = time.clock()
         opt = VectorizingOptimizer(metainterp_sd, jitdriver_sd, warmstate.vec_cost)
-        index_vars = opt.propagate_all_forward(info, loop)
+        index_vars = opt.run_optimization(info, loop)
         gso = GuardStrengthenOpt(index_vars)
         gso.propagate_all_forward(info, loop, user_code)
         end = time.clock()
@@ -144,6 +147,7 @@
             llop.debug_print_traceback(lltype.Void)
         else:
             raise
+    return loop_info, loop_ops
 
 def user_loop_bail_fast_path(loop, warmstate):
     """ In a fast path over the trace loop: try to prevent vecopt
@@ -200,7 +204,7 @@
         self.smallest_type_bytes = 0
         self.orig_label_args = None
 
-    def propagate_all_forward(self, info, loop):
+    def run_optimization(self, info, loop):
         self.orig_label_args = loop.label.getarglist_copy()
         self.linear_find_smallest_type(loop)
         byte_count = self.smallest_type_bytes
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -198,6 +198,12 @@
     def get_forwarded(self):
         return self._forwarded
 
+def vector_repr(self, num):
+    if self.opnum in (rop.VEC_UNPACK_I, rop.VEC_UNPACK_F):
+        return self.type + str(num)
+    return 'v%d[%dx%s%d]' % (num, self.count, self.datatype,
+                             self.bytesize * 8)
+
 
 class AbstractResOp(AbstractResOpOrInputArg):
     """The central ResOperation class, representing one operation."""
@@ -308,8 +314,7 @@
                 num = len(memo)
                 memo[self] = num
             if self.is_vector():
-                assert isinstance(self, VectorOp)
-                sres = self.vector_repr(num) + ' = '
+                sres = vector_repr(self, num) + ' = '
             else:
                 sres = self.type + str(num) + ' = '
         #if self.result is not None:
@@ -339,8 +344,7 @@
             num = len(memo)
             memo[self] = num
         if self.is_vector():
-            assert isinstance(self, VectorOp)
-            return self.vector_repr(num)
+            return vector_repr(self, num)
         return self.type + str(num)
 
     def __repr__(self):
@@ -714,12 +718,6 @@
 class VectorOp(object):
     _mixin_ = True
 
-    def vector_repr(self, num):
-        if self.opnum in (rop.VEC_UNPACK_I, rop.VEC_UNPACK_F):
-            return self.type + str(num)
-        return 'v%d[%dx%s%d]' % (num, self.count, self.datatype,
-                                 self.bytesize * 8)
-
     def vector_bytesize(self):
         assert self.count > 0
         return self.byte_size * self.count


More information about the pypy-commit mailing list