[pypy-commit] pypy vecopt: added llgraph impl for reduce (+,-,*)n

plan_rich noreply at buildbot.pypy.org
Thu Jun 11 11:37:04 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r78029:fa11cb002cc1
Date: 2015-06-11 11:35 +0200
http://bitbucket.org/pypy/pypy/changeset/fa11cb002cc1/

Log:	added llgraph impl for reduce (+,-,*)n

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
@@ -3,7 +3,7 @@
 from rpython.jit.backend.llgraph import support
 from rpython.jit.backend.llsupport import symbolic
 from rpython.jit.metainterp.history import AbstractDescr
-from rpython.jit.metainterp.history import Const, getkind
+from rpython.jit.metainterp.history import Const, getkind, BoxVectorAccum
 from rpython.jit.metainterp.history import INT, REF, FLOAT, VOID, VECTOR
 from rpython.jit.metainterp.resoperation import rop
 from rpython.jit.metainterp.optimizeopt import intbounds
@@ -862,6 +862,17 @@
                 value = self.env[box]
             else:
                 value = None
+            if isinstance(box, BoxVectorAccum):
+                if box.operator == '+':
+                    value = sum(value)
+                elif box.operator == '-':
+                    def sub(acc, x): return acc - x
+                    value = reduce(sub, value, 0)
+                elif box.operator == '*':
+                    def prod(acc, x): return acc * x
+                    value = reduce(prod, value, 1)
+                else:
+                    raise NotImplementedError
             values.append(value)
         if hasattr(descr, '_llgraph_bridge'):
             target = (descr._llgraph_bridge, -1)


More information about the pypy-commit mailing list