Author: Hakan Ardo <[email protected]>
Branch: jit-short_from_state
Changeset: r44372:71ffca3657a7
Date: 2011-05-23 08:14 +0200
http://bitbucket.org/pypy/pypy/changeset/71ffca3657a7/

Log:    better propataging of interned refs

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
@@ -363,9 +363,9 @@
 
         for ref, box in self.interned_refs.items():
             value = self.getvalue(box)
-            if isinstance(value, ConstantValue): # These are the only values 
surviving without being cloned
-                new.interned_refs[ref] = box
-                new.values[box] = value
+            assert value.is_constant()
+            new.interned_refs[ref] = box
+            new.values[box] = value.get_cloned(new, valuemap)
             
         new.pure_operations = args_dict()
         for key, op in self.pure_operations.items():
@@ -389,6 +389,7 @@
 
         for value in valuemap.values():
             box = value.get_key_box()
+            box = new.getinterned(box)
             if box not in new.values:
                 new.values[box] = value
 
@@ -407,7 +408,7 @@
         short_boxes = {}
         for box in inputargs:
             short_boxes[box] = None
-        
+
         for box in potential_ops.keys():
             try:
                 self.produce_short_preamble_box(box, short_boxes,
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py 
b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -169,7 +169,7 @@
             loop.preamble.quasi_immutable_deps = (
                 self.optimizer.quasi_immutable_deps)
             self.optimizer = self.optimizer.reconstruct_for_next_iteration(sb, 
jump_args)
-
+            
             self.constant_inputargs = {}
             loop.quasi_immutable_deps = self.optimizer.quasi_immutable_deps    
        
             for box in jump_args:
diff --git a/pypy/jit/metainterp/test/test_optimizeopt.py 
b/pypy/jit/metainterp/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/test/test_optimizeopt.py
@@ -6255,3 +6255,18 @@
         jump(i3, i4)
         """
         self.optimize_loop(ops, expected)
+
+    def test_constant_getfield(self):
+        ops = """
+        [p1, p187, i184]
+        p188 = getarrayitem_gc(p187, i184, descr=<GcPtrArrayDescr>)
+        guard_value(p188, ConstPtr(myptr)) []
+        p25 = getfield_gc(ConstPtr(myptr), descr=otherdescr)
+        jump(p25, p187, i184)
+        """
+        expected = """
+        [p25, p187, i184]
+        jump(p25, p187, i184)
+        """
+        self.optimize_loop(ops, expected, ops)
+        # FIXME: check jumparg 0 == getfield_gc()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to