Author: Richard Plangger <r...@pasra.at>
Branch: vecopt-merge
Changeset: r79091:10582848a63f
Date: 2015-08-20 14:18 +0200
http://bitbucket.org/pypy/pypy/changeset/10582848a63f/

Log:    llgraph is now working with accum data

diff --git a/rpython/jit/backend/llgraph/runner.py 
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -265,8 +265,8 @@
         self.stats = stats or MiniStats()
         self.vinfo_for_tests = kwds.get('vinfo_for_tests', None)
 
-    def stitch_bridge(self, faildescr, jitcell_token):
-        pass
+    def stitch_bridge(self, faildescr, compiled_faildescr, jitcell_token):
+        faildescr._llgraph_bridge = compiled_faildescr._llgraph_bridge
 
     def compile_loop(self, inputargs, operations, looptoken, jd_id=0,
                      unique_id=0, log=True, name='', logger=None):
@@ -736,7 +736,10 @@
     def bh_vec_box_unpack(self, vx, index):
         return vx[index]
 
-    def bh_vec_expand(self, x, count):
+    def bh_vec_float_expand(self, x, count):
+        return [x] * count
+
+    def bh_vec_int_expand(self, x, count):
         return [x] * count
 
     def bh_vec_int_signext(self, vx, ext):
diff --git a/rpython/jit/backend/llsupport/assembler.py 
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -70,7 +70,7 @@
         self.rtyper = cpu.rtyper
         self._debug = False
 
-    def stitch_bridge(self, faildescr, token):
+    def stitch_bridge(self, faildescr, compiled_faildescr, token):
         raise NotImplementedError
 
     def setup_once(self):
diff --git a/rpython/jit/backend/llsupport/llmodel.py 
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -97,8 +97,8 @@
                                             inputargs, operations,
                                             looptoken, log=log)
 
-    def stitch_bridge(self, faildescr, token):
-        self.assembler.stitch_bridge(faildescr, token)
+    def stitch_bridge(self, faildescr, compiled_faildescr, token):
+        self.assembler.stitch_bridge(faildescr, compiled_faildescr, token)
 
     def _setup_frame_realloc(self, translate_support_code):
         FUNC_TP = lltype.Ptr(lltype.FuncType([llmemory.GCREF, lltype.Signed],
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
@@ -505,7 +505,6 @@
         full_size = self.mc.get_relative_pos()
         #
         rawstart = self.materialize_loop(looptoken)
-        looptoken.rawstart = rawstart
         self.patch_stack_checks(frame_depth_no_fixed_size + 
JITFRAME_FIXED_SIZE,
                                 rawstart)
         looptoken._ll_loop_code = looppos + rawstart
@@ -570,6 +569,7 @@
         fullsize = self.mc.get_relative_pos()
         #
         rawstart = self.materialize_loop(original_loop_token)
+        faildescr.rawstart = rawstart
         self.patch_stack_checks(frame_depth_no_fixed_size + 
JITFRAME_FIXED_SIZE,
                                 rawstart)
         debug_bridge(descr_number, rawstart, codeendpos)
@@ -592,9 +592,8 @@
                                                        rawstart, fullsize)
         return AsmInfo(ops_offset, startpos + rawstart, codeendpos - startpos)
 
-    def stitch_bridge(self, faildescr, token):
-        assert token.rawstart != 0
-        self.patch_jump_for_descr(faildescr, token.rawstart)
+    def stitch_bridge(self, faildescr, compiled_faildescr, token):
+        self.patch_jump_for_descr(faildescr, compiled_faildescr.rawstart)
 
     def write_pending_failure_recoveries(self, regalloc):
         # for each pending guard, generate the code of the recovery stub
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
@@ -186,7 +186,8 @@
 
 def generate_pending_loop_versions(loop, jitdriver_sd, metainterp, 
jitcell_token):
     """ if a loop version is created for a guard instruction (e.g. they are 
known
-        to fail frequently, then a version can be created that is immediatly 
compiled.
+        to fail frequently) then a version can be created that is immediatly 
compiled
+        and stitched to the guard.
     """
     metainterp_sd = metainterp.staticdata
     cpu = metainterp_sd.cpu
@@ -203,8 +204,8 @@
                                    faildescr, version.inputargs,
                                    version.operations, jitcell_token)
             record_loop_or_bridge(metainterp_sd, vl)
-            for faildescr in version.faildescrs[1:]:
-                cpu.stitch_bridge(faildescr, jitcell_token)
+            for fd in version.faildescrs[1:]:
+                cpu.stitch_bridge(fd, faildescr, jitcell_token)
     loop.versions = None
 
 def compile_retrace(metainterp, greenkey, start,
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
@@ -515,7 +515,7 @@
             i += 1
         else:
             expand_opnum = getexpandopnum(box_type)
-            op = ResOperation(expand_opnum, [arg], vbox)
+            op = ResOperation(expand_opnum, [arg, ConstInt(vbox.item_count)], 
vbox)
             ops.append(op)
             if variables is not None:
                 variables.append(vbox)
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
@@ -528,8 +528,8 @@
     'VEC_FLOAT_PACK/4',          # VEC_FLOAT_PACK(vX, var/const, index, 
item_count)
     'VEC_INT_UNPACK/3',          # iX|fX = VEC_INT_UNPACK(vX, index, 
item_count)
     'VEC_INT_PACK/4',            # VEC_INT_PACK(vX, var/const, index, 
item_count)
-    'VEC_FLOAT_EXPAND/1',        # vX = VEC_FLOAT_EXPAND(var/const)
-    'VEC_INT_EXPAND/1',          # vX = VEC_INT_EXPAND(var/const)
+    'VEC_FLOAT_EXPAND/2',        # vX = VEC_FLOAT_EXPAND(var/const, item_count)
+    'VEC_INT_EXPAND/2',          # vX = VEC_INT_EXPAND(var/const, item_count)
     'VEC_BOX/1',
     '_VEC_PURE_LAST',
     #
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
@@ -194,7 +194,7 @@
             i = 0
             while i < d:
                 myjitdriver.jit_merge_point()
-                if not (i < 60):
+                if not (i < d):
                     raise IndexError
                 va[i] = va[i] + 34.5
                 i += 1
@@ -231,14 +231,14 @@
             i = 0
             while i < d:
                 myjitdriver.jit_merge_point()
-                if i >= d:
+                if not(i < d):
                     raise IndexError
                 r += va[i]
                 i += 1
             lltype.free(va, flavor='raw')
             return r
-        res = self.meta_interp(f, [60,0.1], vec_all=True)
-        assert res == f(60,0.1) == 60*0.1
+        res = self.meta_interp(f, [60,0.5], vec_all=True)
+        assert res == f(60,0.5) == 60*0.5
 
 
     @py.test.mark.parametrize('i',[15])
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to