[pypy-commit] pypy virtual-arguments: invent a new operation

fijal noreply at buildbot.pypy.org
Fri Jul 20 11:01:22 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: virtual-arguments
Changeset: r56285:dd4cccdf8382
Date: 2012-07-20 11:00 +0200
http://bitbucket.org/pypy/pypy/changeset/dd4cccdf8382/

Log:	invent a new operation

diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -1430,9 +1430,10 @@
 
     def do_fixed_newlist(self, op, args, arraydescr):
         v_length = self._get_initial_newlist_length(op, args)
-        if v_length.concretetype == lltype.Signed:
-            raise Exception("[item] * lgt must have lgt to be proven non-negative for the JIT")
-        return SpaceOperation('new_array', [arraydescr, v_length], op.result)
+        v = Variable('new_length')
+        v.concretetype = lltype.Signed
+        return [SpaceOperation('int_force_ge_zero', [v_length], v),
+            SpaceOperation('new_array', [arraydescr, v], op.result)]
 
     def do_fixed_list_len(self, op, args, arraydescr):
         if args[0] in self.vable_array_vars:     # virtualizable array
diff --git a/pypy/jit/codewriter/test/test_codewriter.py b/pypy/jit/codewriter/test/test_codewriter.py
--- a/pypy/jit/codewriter/test/test_codewriter.py
+++ b/pypy/jit/codewriter/test/test_codewriter.py
@@ -231,4 +231,7 @@
     jitdriver_sd = FakeJitDriverSD(rtyper.annotator.translator.graphs[0])
     cw = CodeWriter(FakeCPU(rtyper), [jitdriver_sd])
     cw.find_all_graphs(FakePolicy())
-    py.test.raises(Exception, "cw.make_jitcodes(verbose=True)")
+    cw.make_jitcodes(verbose=True)
+    s = jitdriver_sd.mainjitcode.dump()
+    assert 'int_force_ge_zero' in s
+    assert 'new_array' in s


More information about the pypy-commit mailing list