[pypy-commit] pypy backend-vector-ops: make assert_aligned a call

fijal noreply at buildbot.pypy.org
Thu Feb 9 16:47:39 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: backend-vector-ops
Changeset: r52304:e61829326b21
Date: 2012-02-09 16:30 +0200
http://bitbucket.org/pypy/pypy/changeset/e61829326b21/

Log:	make assert_aligned a call

diff --git a/pypy/jit/codewriter/effectinfo.py b/pypy/jit/codewriter/effectinfo.py
--- a/pypy/jit/codewriter/effectinfo.py
+++ b/pypy/jit/codewriter/effectinfo.py
@@ -79,6 +79,8 @@
     OS_LLONG_U_TO_FLOAT         = 94
     #
     OS_MATH_SQRT                = 100
+    #
+    OS_ASSERT_ALIGNED           = 200
 
     # for debugging:
     _OS_CANRAISE = set([OS_NONE, OS_STR2UNICODE, OS_LIBFFI_CALL])
diff --git a/pypy/jit/metainterp/optimizeopt/fficall.py b/pypy/jit/metainterp/optimizeopt/fficall.py
--- a/pypy/jit/metainterp/optimizeopt/fficall.py
+++ b/pypy/jit/metainterp/optimizeopt/fficall.py
@@ -110,7 +110,7 @@
         Optimization.emit_operation(self, op)
 
     def optimize_CALL(self, op):
-        oopspec = self._get_oopspec(op)
+        oopspec = self.get_oopspec(op)
         ops = [op]
         if oopspec == EffectInfo.OS_LIBFFI_PREPARE:
             ops = self.do_prepare_call(op)
@@ -250,10 +250,6 @@
             debug_print(self.logops.repr_of_resop(op))
         dispatch_opt(self, op)
 
-    def _get_oopspec(self, op):
-        effectinfo = op.getdescr().get_extra_info()
-        return effectinfo.oopspecindex
-
     def _get_funcval(self, op):
         return self.getvalue(op.getarg(1))
 
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -330,6 +330,9 @@
     def forget_numberings(self, box):
         self.optimizer.forget_numberings(box)
 
+    def get_oopspec(self, op):
+        effectinfo = op.getdescr().get_extra_info()
+        return effectinfo.oopspecindex
 
 class Optimizer(Optimization):
 
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_vectorize.py b/pypy/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -1,15 +1,35 @@
 
 from pypy.jit.metainterp.optimizeopt.test.test_optimizebasic import BaseTestBasic, LLtypeMixin
+from pypy.rpython.lltypesystem import lltype
+from pypy.jit.codewriter.effectinfo import EffectInfo
 
 class TestVectorize(BaseTestBasic, LLtypeMixin):
     enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll:vectorize"
 
+    class namespace:
+        cpu = LLtypeMixin.cpu
+        FUNC = LLtypeMixin.FUNC
+        arraydescr = cpu.arraydescrof(lltype.GcArray(lltype.Signed))
+
+        def calldescr(cpu, FUNC, oopspecindex, extraeffect=None):
+            if extraeffect == EffectInfo.EF_RANDOM_EFFECTS:
+                f = None   # means "can force all" really
+            else:
+                f = []
+            einfo = EffectInfo(f, f, f, f, oopspecindex=oopspecindex,
+                               extraeffect=extraeffect)
+            return cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, einfo)
+        #
+        assert_aligned =  calldescr(cpu, FUNC, EffectInfo.OS_ASSERT_ALIGNED)
+
+    namespace = namespace.__dict__
+
     def test_basic(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
@@ -39,9 +59,9 @@
     def test_basic_sub(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_sub(f0, f1)
@@ -73,9 +93,9 @@
     def test_unfit_trees(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
@@ -111,9 +131,9 @@
     def test_unfit_trees_2(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
@@ -143,9 +163,9 @@
     def test_unfit_trees_3(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
@@ -179,9 +199,9 @@
     def test_guard_forces(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
@@ -213,9 +233,9 @@
     def test_guard_prevents(self):
         ops = """
         [p0, p1, p2, i0, i1, i2]
-        assert_aligned(p0, i0)
-        assert_aligned(p1, i1)
-        assert_aligned(p1, i2)
+        call(p0, i0, descr=assert_aligned)
+        call(p1, i1, descr=assert_aligned)
+        call(p1, i2, descr=assert_aligned)
         f0 = getarrayitem_raw(p0, i0, descr=arraydescr)
         f1 = getarrayitem_raw(p1, i1, descr=arraydescr)
         f2 = float_add(f0, f1)
diff --git a/pypy/jit/metainterp/optimizeopt/vectorize.py b/pypy/jit/metainterp/optimizeopt/vectorize.py
--- a/pypy/jit/metainterp/optimizeopt/vectorize.py
+++ b/pypy/jit/metainterp/optimizeopt/vectorize.py
@@ -3,6 +3,7 @@
 from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
 from pypy.jit.metainterp.resoperation import rop, ResOperation
 from pypy.jit.metainterp.history import BoxVector
+from pypy.jit.codewriter.effectinfo import EffectInfo
 
 VECTOR_SIZE = 2
 VEC_MAP = {rop.FLOAT_ADD: rop.FLOAT_VECTOR_ADD,
@@ -97,9 +98,13 @@
     def new(self):
         return OptVectorize()
     
-    def optimize_ASSERT_ALIGNED(self, op):
-        index = self.getvalue(op.getarg(1))
-        self.tracked_indexes[index] = TrackIndex(index, 0)
+    def optimize_CALL(self, op):
+        oopspec = self.get_oopspec(op)
+        if oopspec == EffectInfo.OS_ASSERT_ALIGNED:
+            index = self.getvalue(op.getarg(1))
+            self.tracked_indexes[index] = TrackIndex(index, 0)
+        else:
+            self.optimize_default(op)
 
     def optimize_GETARRAYITEM_RAW(self, op):
         arr = self.getvalue(op.getarg(0))


More information about the pypy-commit mailing list