Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r71779:94a0df43071c
Date: 2014-05-29 19:50 +0200
http://bitbucket.org/pypy/pypy/changeset/94a0df43071c/

Log:    Fix noConst(): recent improvements to heapcache mean this hack no
        longer works. Use instead some direct way.

diff --git a/rpython/jit/codewriter/jtransform.py 
b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -561,8 +561,10 @@
             return [SpaceOperation('-live-', [], None), op1, None]
         if hints.get('force_virtualizable'):
             return SpaceOperation('hint_force_virtualizable', [op.args[0]], 
None)
-        else:
-            log.WARNING('ignoring hint %r at %r' % (hints, self.graph))
+        if hints.get('force_no_const'):   # for tests only
+            assert getkind(op.args[0].concretetype) == 'int'
+            return SpaceOperation('int_same_as', [op.args[0]], op.result)
+        log.WARNING('ignoring hint %r at %r' % (hints, self.graph))
 
     def _rewrite_raw_malloc(self, op, name, args):
         d = op.args[1].value.copy()
diff --git a/rpython/jit/metainterp/blackhole.py 
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -380,6 +380,10 @@
 
     # ----------
 
+    @arguments("i", returns="i")
+    def bhimpl_int_same_as(a):
+        return a
+
     @arguments("i", "i", returns="i")
     def bhimpl_int_add(a, b):
         return intmask(a + b)
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -231,6 +231,14 @@
         ''' % (_opimpl, _opimpl.upper())).compile()
 
     @arguments("box")
+    def opimpl_int_same_as(self, box):
+        # for tests only: emits a same_as, forcing the result to be in a Box
+        resbox = history.BoxInt(box.getint())
+        self.metainterp._record_helper_nonpure_varargs(
+            rop.SAME_AS, resbox, None, [box])
+        return resbox
+
+    @arguments("box")
     def opimpl_ptr_nonzero(self, box):
         return self.execute(rop.PTR_NE, box, history.CONST_NULL)
 
diff --git a/rpython/jit/metainterp/test/support.py 
b/rpython/jit/metainterp/test/support.py
--- a/rpython/jit/metainterp/test/support.py
+++ b/rpython/jit/metainterp/test/support.py
@@ -273,6 +273,5 @@
 def noConst(x):
     """Helper function for tests, returning 'x' as a BoxInt/BoxPtr
     even if it is a ConstInt/ConstPtr."""
-    f1 = _Foo(); f2 = _Foo()
-    f1.x = x; f2.x = 0
-    return f1.x
+    from rpython.rlib import jit
+    return jit.hint(x, force_no_const=True)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to