[pypy-svn] r53245 - in pypy/branch/jit-hotpath/pypy/jit/codegen: . ppc ppc/test test

fijal at codespeak.net fijal at codespeak.net
Wed Apr 2 04:24:52 CEST 2008


Author: fijal
Date: Wed Apr  2 04:24:52 2008
New Revision: 53245

Added:
   pypy/branch/jit-hotpath/pypy/jit/codegen/emit_moves.py
      - copied unchanged from r53202, pypy/branch/jit-hotpath/pypy/jit/codegen/ppc/emit_moves.py
   pypy/branch/jit-hotpath/pypy/jit/codegen/test/test_emit_moves.py   (contents, props changed)
Removed:
   pypy/branch/jit-hotpath/pypy/jit/codegen/ppc/emit_moves.py
   pypy/branch/jit-hotpath/pypy/jit/codegen/ppc/test/test_emit_moves.py
Log:
Move emit_moves one level up, for more general use


Added: pypy/branch/jit-hotpath/pypy/jit/codegen/test/test_emit_moves.py
==============================================================================
--- (empty file)
+++ pypy/branch/jit-hotpath/pypy/jit/codegen/test/test_emit_moves.py	Wed Apr  2 04:24:52 2008
@@ -0,0 +1,99 @@
+import py
+from pypy.jit.codegen.ppc.emit_moves import emit_moves, emit_moves_safe
+
+class TheHeap(object):
+    def __init__(self, locs):
+        self.data = {}
+        for i in range(locs):
+            self.data[i] = i
+        self.numlocs = locs
+    def emit_move(self, tar, src):
+        self.data[tar] = self.data[src]
+    def create_fresh_location(self):
+        self.numlocs += 1
+        return self.numlocs-1
+
+def test_simple_cycle():
+    heap = TheHeap(2)
+    tar2src = {'A':'b', 'B':'a'}
+    tar2loc = {'A':0, 'B':1}
+    src2loc = {'a':0, 'b':1}
+    assert heap.data[0] == 0
+    assert heap.data[1] == 1
+    emit_moves(heap, tar2src.keys(), tar2src, tar2loc, src2loc)
+    assert heap.data[0] == 1
+    assert heap.data[1] == 0
+    assert heap.numlocs == 3 # only creates 1 extra loc
+
+def test_cycle_3():
+    heap = TheHeap(3)
+    tar2src = {'A':'b', 'B':'c', 'C':'a'}
+    tar2loc = {'A':0, 'B':1, 'C':2}
+    src2loc = {'a':0, 'b':1, 'c':2}
+    assert heap.data[0] == 0
+    assert heap.data[1] == 1
+    assert heap.data[2] == 2
+    emit_moves(heap, tar2src.keys(), tar2src, tar2loc, src2loc)
+    assert heap.data[0] == 1
+    assert heap.data[1] == 2
+    assert heap.data[2] == 0
+    assert heap.numlocs == 4 # only creates 1 extra loc
+
+def test_dag():
+    heap = TheHeap(3)
+    tar2src = {'A':'a', 'B':'b'}
+    tar2loc = {'A':0, 'B':1}
+    src2loc = {'a':1, 'b':2}
+    assert heap.data[0] == 0
+    assert heap.data[1] == 1
+    assert heap.data[2] == 2
+    emit_moves(heap, tar2src.keys(), tar2src, tar2loc, src2loc)
+    assert heap.data[0] == 1
+    assert heap.data[1] == 2
+    assert heap.data[2] == 2
+    assert heap.numlocs == 3 # only creates 1 extra loc
+
+def test_one_to_many():
+    heap = TheHeap(4)
+    tar2src = {'A':'a', 'B':'b', 'C':'a'}
+    tar2loc = {'A':2, 'B':1, 'C':3}
+    src2loc = {'a':1, 'b':0}
+    assert heap.data[0] == 0 # b
+    assert heap.data[1] == 1 # a
+    assert heap.data[2] == 2
+    assert heap.data[3] == 3
+    emit_moves(heap, ['B', 'A', 'C'], tar2src, tar2loc, src2loc)
+    assert heap.data[1] == 0 # B
+    assert heap.data[2] == 1 # A
+    assert heap.data[3] == 1 # C
+
+def test_random():
+    for _ in range(20):
+        import random
+        NVAR = random.randrange(1000)
+        heap = TheHeap(NVAR)
+        varlist = range(NVAR)
+        tar2src = {}
+        src2loc = {}
+        tar2loc = {}
+        for i in varlist:
+            tar2src[i] = random.randrange(NVAR)
+        srcs = list(dict.fromkeys(tar2src.values()))
+        srclocs = srcs[:]
+        random.shuffle(srclocs)
+        for j, k in zip(srcs, srclocs):
+            src2loc[j] = k
+        varlist2 = varlist[:]
+        random.shuffle(varlist2)
+        for i, j in zip(varlist, varlist2):
+            tar2loc[i] = j
+        for i in range(10):
+            random.shuffle(varlist)
+            heap1 = TheHeap(NVAR)
+            emit_moves(heap1, varlist,
+                            tar2src.copy(), tar2loc.copy(), src2loc.copy())
+            heap2 = TheHeap(NVAR)
+            emit_moves_safe(heap2, varlist,
+                            tar2src.copy(), tar2loc.copy(), src2loc.copy())
+            for i in range(NVAR):
+                assert heap1.data[i] == heap2.data[i]



More information about the Pypy-commit mailing list