Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: optinfo-into-bridges-3
Changeset: r90289:3b86571d166a
Date: 2017-02-21 19:50 +0100
http://bitbucket.org/pypy/pypy/changeset/3b86571d166a/

Log:    do the right thing with descsr

        (port of 96fe6ec4dec2 and 52ad37a21275)

diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py 
b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -75,12 +75,12 @@
     # heap knowledge
     if optimizer.optheap:
         triples = optimizer.optheap.serialize_optheap(liveboxes_set)
+        # can only encode descrs that have a known index into
+        # metainterp_sd.all_descrs
+        triples = [triple for triple in triples if triple[1].descr_index != -1]
         numb_state.append_int(len(triples))
         for box1, descr, box2 in triples:
-            index = metainterp_sd.descrs_dct.get(descr, -1)
-            if index == -1:
-                # XXX XXX XXX fix length!
-                continue # just skip it, if the descr is not encodable
+            index = descr.descr_index
             numb_state.append_short(tag_box(box1, liveboxes_from_env, memo))
             numb_state.append_int(index)
             numb_state.append_short(tag_box(box2, liveboxes_from_env, memo))
@@ -117,8 +117,8 @@
     for i in range(length):
         tagged = reader.next_item()
         box1 = decode_box(resumestorage, tagged, liveboxes, metainterp_sd.cpu)
-        tagged = reader.next_item()
-        descr = metainterp_sd.opcode_descrs[tagged]
+        index = reader.next_item()
+        descr = metainterp_sd.all_descrs[index]
         tagged = reader.next_item()
         box2 = decode_box(resumestorage, tagged, liveboxes, metainterp_sd.cpu)
         result.append((box1, descr, box2))
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
@@ -1863,9 +1863,6 @@
 
     def setup_descrs(self, descrs):
         self.opcode_descrs = descrs
-        self.descrs_dct = {}
-        for index, descr in enumerate(descrs):
-            self.descrs_dct[descr] = index
 
     def setup_indirectcalltargets(self, indirectcalltargets):
         self.indirectcalltargets = list(indirectcalltargets)
diff --git a/rpython/jit/metainterp/test/test_compile.py 
b/rpython/jit/metainterp/test/test_compile.py
--- a/rpython/jit/metainterp/test/test_compile.py
+++ b/rpython/jit/metainterp/test/test_compile.py
@@ -79,6 +79,7 @@
 def test_compile_loop():
     cpu = FakeCPU()
     staticdata = FakeMetaInterpStaticData()
+    staticdata.all_descrs = LLtypeMixin.cpu.setup_descrs()
     staticdata.cpu = cpu
     staticdata.jitlog = jl.JitLogger(cpu)
     staticdata.jitlog.trace_id = 1
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to