[pypy-commit] pypy numpypy-axisops: add jit_merge_point

mattip noreply at buildbot.pypy.org
Sat Jan 7 22:04:40 CET 2012


Author: mattip
Branch: numpypy-axisops
Changeset: r51126:f3a9a6a5871d
Date: 2012-01-06 16:32 +0200
http://bitbucket.org/pypy/pypy/changeset/f3a9a6a5871d/

Log:	add jit_merge_point

diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -297,7 +297,7 @@
     descr_min = _reduce_ufunc_impl("minimum")
 
     def _reduce_argmax_argmin_impl(op_name):
-        reduce_driver = jit.JitDriver(
+        axisreduce_driver = jit.JitDriver(
             greens=['shapelen', 'sig'],
             reds=['result', 'idx', 'frame', 'self', 'cur_best', 'dtype'],
             get_printable_location=signature.new_printable_location(op_name),
@@ -312,7 +312,7 @@
             result = 0
             idx = 1
             while not frame.done():
-                reduce_driver.jit_merge_point(sig=sig,
+                axisreduce_driver.jit_merge_point(sig=sig,
                                               shapelen=shapelen,
                                               self=self, dtype=dtype,
                                               frame=frame, result=result,
@@ -783,18 +783,28 @@
         return value
 
     def compute(self):
+        reduce_driver = jit.JitDriver(
+            greens=['shapelen', 'sig', 'self'],
+            reds=['result', 'ri', 'frame', 'nextval', 'dtype', 'value'],
+            get_printable_location=\
+                              signature.new_printable_location(self.binfunc),
+        )
         self.computing = True
         dtype = self.dtype
         result = W_NDimArray(self.size, self.shape, dtype)
         self.values = self.values.get_concrete()
         shapelen = len(result.shape)
-        objlen = len(self.values.shape)
         sig = self.find_sig(res_shape=result.shape, arr=self.values)
         ri = ArrayIterator(result.size)
         frame = sig.create_frame(self.values, dim=self.dim)
         value = self.get_identity(sig, frame, shapelen)
+        nextval = 0.
         while not frame.done():
-            #XXX add jit_merge_point
+            reduce_driver.jit_merge_point(frame=frame, self=self,
+                                          value=value, sig=sig,
+                                          shapelen=shapelen, ri=ri,
+                                          nextval=nextval, dtype=dtype,
+                                          result=result)
             if frame.iterators[0].axis_done:
                 value = self.get_identity(sig, frame, shapelen)
                 ri = ri.next(shapelen)
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
@@ -115,6 +115,21 @@
                                 "int_add": 1, "int_ge": 1, "guard_false": 1,
                                 "jump": 1, 'arraylen_gc': 1})
 
+    def define_sum2d():
+        return """
+        a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
+        b = sum(a,0)
+        b -> 1
+        """
+
+    def test_axissum(self):
+        py.test.skip("2dsum")
+        result = self.run("sum2d")
+        assert result == 30
+        self.check_simple_loop({"getinteriorfield_raw": 2, "float_add": 2,
+                                "int_add": 1, "int_ge": 1, "guard_false": 1,
+                                "jump": 1, 'arraylen_gc': 1})
+
     def define_prod():
         return """
         a = |30|


More information about the pypy-commit mailing list