[pypy-commit] pypy vecopt-merge: test_zjit now passed the annotator to the rtyper

plan_rich noreply at buildbot.pypy.org
Sat Sep 26 09:59:45 CEST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: vecopt-merge
Changeset: r79849:5d1e288a9250
Date: 2015-09-25 22:23 +0200
http://bitbucket.org/pypy/pypy/changeset/5d1e288a9250/

Log:	test_zjit now passed the annotator to the rtyper

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
@@ -618,8 +618,8 @@
                     # the mapping might be wrong!
                     if bridge_accum_info.vector_loc is not guard_accum_info.vector_loc:
                         self.mov(guard_accum_info.vector_loc, bridge_accum_info.vector_loc)
-                bridge_accum_info = bridge_accum_info.prev
-            guard_accum_info = guard_accum_info.prev
+                bridge_accum_info = bridge_accum_info.next()
+            guard_accum_info = guard_accum_info.next()
 
         # register mapping is most likely NOT valid, thus remap it in this
         # short piece of assembler
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -318,6 +318,7 @@
     def locs_for_fail(self, guard_op):
         faillocs = [self.loc(arg) for arg in guard_op.getfailargs()]
         descr = guard_op.getdescr()
+        assert isinstance(descr, ResumeGuardDescr)
         if descr and descr.rd_accum_list:
             accuminfo = descr.rd_accum_list
             while accuminfo:
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
@@ -15,7 +15,8 @@
     TargetToken, AbstractFailDescr, ConstInt)
 from rpython.jit.metainterp import history, jitexc
 from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.resume import NUMBERING, PENDINGFIELDSP, ResumeDataDirectReader
+from rpython.jit.metainterp.resume import (NUMBERING, PENDINGFIELDSP,
+        ResumeDataDirectReader, AccumInfo)
 from rpython.jit.codewriter import heaptracker, longlong
 
 def giveup():
@@ -679,8 +680,7 @@
 
 class ResumeGuardDescr(ResumeDescr):
     _attrs_ = ('rd_numb', 'rd_count', 'rd_consts', 'rd_virtuals',
-               'rd_frame_info_list', 'rd_pendingfields', 'rd_accum_list',
-               'status')
+               'rd_frame_info_list', 'rd_pendingfields', 'status')
 
     rd_numb = lltype.nullptr(NUMBERING)
     rd_count = 0
@@ -688,7 +688,6 @@
     rd_virtuals = None
     rd_frame_info_list = None
     rd_pendingfields = lltype.nullptr(PENDINGFIELDSP.TO)
-    rd_accum_list = None
 
     status = r_uint(0)
 
@@ -702,6 +701,8 @@
         self.rd_numb = other.rd_numb
         if other.rd_accum_list:
             self.rd_accum_list = other.rd_accum_list.clone()
+        else:
+            other.rd_accum_list = None
         # we don't copy status
 
     ST_BUSY_FLAG    = 0x01     # if set, busy tracing from the guard
@@ -850,6 +851,10 @@
     def exits_early(self):
         return True
 
+    def attach_accum_info(self, pos, operator, arg, loc):
+        self.rd_accum_list = \
+                AccumInfo(self.rd_accum_list, pos, operator, arg, loc)
+
 class ResumeGuardNonnullDescr(ResumeGuardDescr):
     guard_opnum = rop.GUARD_NONNULL
 
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
@@ -148,6 +148,8 @@
 
     _attrs_ = ('adr_jump_offset', 'rd_locs', 'rd_loop_token', 'rd_accum_list')
 
+    rd_accum_list = None
+
     def handle_fail(self, deadframe, metainterp_sd, jitdriver_sd):
         raise NotImplementedError
     def compile_and_attach(self, metainterp, new_loop, orig_inputargs):
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
@@ -446,7 +446,8 @@
         if vecop:
             args[index] = vecop
             return vecop
-        vecop = OpHelpers.create_vec_expand(arg, op.bytesize, op.signed, pack.numops())
+        left = pack.leftmost()
+        vecop = OpHelpers.create_vec_expand(arg, left.bytesize, left.signed, pack.numops())
         ops.append(vecop)
         if variables is not None:
             variables.append(vecop)
@@ -549,9 +550,10 @@
                     continue
                 accum = self.accumulation.get(arg, None)
                 if accum:
+                    from rpython.jit.metainterp.compile import ResumeGuardDescr
                     assert isinstance(accum, AccumPack)
-                    descr.rd_accum_list = AccumInfo(descr.rd_accum_list, i,
-                                                    accum.operator, arg, None)
+                    assert isinstance(descr, ResumeGuardDescr)
+                    descr.attach_accum_info(i, accum.operator, arg, None)
                     seed = accum.getleftmostseed()
                     failargs[i] = self.renamer.rename_map.get(seed, seed)
 


More information about the pypy-commit mailing list