[pypy-svn] r70725 - in pypy/branch/direct-assembler-call/pypy/jit/metainterp: . test

fijal at codespeak.net fijal at codespeak.net
Wed Jan 20 14:30:27 CET 2010


Author: fijal
Date: Wed Jan 20 14:30:26 2010
New Revision: 70725

Modified:
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/optimizeopt.py
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizefindnode.py
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
(pedronis, fijal) Consider CALL_ASSEMBLER a call with effectinfo=None


Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/optimizeopt.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/optimizeopt.py	Wed Jan 20 14:30:26 2010
@@ -996,8 +996,12 @@
             opnum == rop.DEBUG_MERGE_POINT):
             return
         if (opnum == rop.CALL or
-            opnum == rop.CALL_MAY_FORCE):
-            effectinfo = op.descr.get_extra_info()
+            opnum == rop.CALL_MAY_FORCE or
+            opnum == rop.CALL_ASSEMBLER):
+            if opnum == rop.CALL_ASSEMBLER:
+                effectinfo = None
+            else:
+                effectinfo = op.descr.get_extra_info()
             if effectinfo is not None:
                 # XXX we can get the wrong complexity here, if the lists
                 # XXX stored on effectinfo are large

Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizefindnode.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizefindnode.py	Wed Jan 20 14:30:26 2010
@@ -114,6 +114,9 @@
     mayforcevirtdescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                  EffectInfo([nextdescr], [], [],
                             forces_virtual_or_virtualizable=True))
+    class LoopToken(AbstractDescr):
+        pass
+    asmdescr = LoopToken() # it can be whatever, it's not a descr though
 
     from pypy.jit.metainterp.virtualref import VirtualRefInfo
     class FakeWarmRunnerDesc:

Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_optimizeopt.py	Wed Jan 20 14:30:26 2010
@@ -2420,6 +2420,16 @@
         """
         self.optimize_loop(ops, 'Not, Not, Not, Not', ops)
 
+    def test_call_assembler_invalidates_caches(self):
+        ops = '''
+        [p1, i1]
+        setfield_gc(p1, i1, descr=valuedescr)
+        i3 = call_assembler(i1, descr=asmdescr)
+        setfield_gc(p1, i3, descr=valuedescr)
+        jump(p1, i3)
+        '''
+        self.optimize_loop(ops, 'Not, Not', ops)
+
     def test_vref_nonvirtual_nonescape(self):
         ops = """
         [p1]



More information about the Pypy-commit mailing list