[pypy-commit] pypy memoryerror3: furhter stripping down the commit

plan_rich noreply at buildbot.pypy.org
Mon Aug 24 12:45:02 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: memoryerror3
Changeset: r79194:10602d3c86f4
Date: 2015-08-24 12:45 +0200
http://bitbucket.org/pypy/pypy/changeset/10602d3c86f4/

Log:	furhter stripping down the commit

diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -194,30 +194,32 @@
     if loop.versions is not None:
         # compile each version once for the first fail descr!
         # this assumes that the root trace (= loop) is already compiled
-        root = loop.versions[0]
-        for faildescr in root.faildescrs:
-            version = faildescr.version
-            if not version or version.compiled():
-                continue
-            vl = create_empty_loop(metainterp)
-            vl.inputargs = version.inputargs
-            vl.operations = version.operations
-            vl.original_jitcell_token = jitcell_token
-            asminfo = send_bridge_to_backend(jitdriver_sd, metainterp_sd,
-                                   faildescr, version.inputargs,
-                                   version.operations, jitcell_token)
-            record_loop_or_bridge(metainterp_sd, vl)
-            version.compile_data = asminfo
+        for version in loop.versions:
+            if not version.compiled():
+                faildescr = version.faildescrs[0]
+                vl = create_empty_loop(metainterp)
+                vl.inputargs = version.inputargs
+                vl.operations = version.operations
+                vl.original_jitcell_token = jitcell_token
+                asminfo = send_bridge_to_backend(jitdriver_sd, metainterp_sd,
+                                       faildescr, version.inputargs,
+                                       version.operations, jitcell_token)
+                record_loop_or_bridge(metainterp_sd, vl)
+                version.compile_data = asminfo
+                version.operations = None
+                version.inputargs = None
         # stitch the rest of the traces
         for lv in loop.versions:
             if not lv.compiled():
                 # the version was never compiled, do not bother
                 # to assign it's fail descr
                 continue
-            for faildescr in lv.faildescrs:
-                version = faildescr.version
+            for faildescr in lv.faildescrs[1:]:
                 if version and version.compiled():
                     cpu.stitch_bridge(faildescr, version.compile_data)
+        for lv in loop.versions:
+            lv.compile_data = None
+            lv.faildescrs = []
 
 def compile_retrace(metainterp, greenkey, start,
                     inputargs, jumpargs,
@@ -525,7 +527,7 @@
 class ResumeGuardDescr(ResumeDescr):
     _attrs_ = ('rd_numb', 'rd_count', 'rd_consts', 'rd_virtuals',
                'rd_frame_info_list', 'rd_pendingfields', 'rd_accum_list',
-               'status', 'version')
+               'status')
     
     rd_numb = lltype.nullptr(NUMBERING)
     rd_count = 0
@@ -536,7 +538,6 @@
     rd_accum_list = None
 
     status = r_uint(0)
-    version = None
 
     def copy_all_attributes_from(self, other):
         assert isinstance(other, ResumeGuardDescr)
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -759,13 +759,12 @@
 
     def __init__(self, loop):
         self.faildescrs = []
-        if loop:
-            self.operations = self.copy_operations(loop.operations) 
-            idx = index_of_first(rop.LABEL, self.operations)
-            assert idx >= 0
-            label = self.operations[idx]
-            self.inputargs = label.getarglist()
-            self.renamed_inputargs = label.getarglist()
+        self.operations = self.copy_operations(loop.operations) 
+        idx = index_of_first(rop.LABEL, self.operations)
+        assert idx >= 0
+        label = self.operations[idx]
+        self.inputargs = label.getarglist()
+        self.renamed_inputargs = label.getarglist()
 
     def compiled(self):
         if self.operations is None:
@@ -804,7 +803,6 @@
         if not descr.loop_version():
             assert 0, "cannot register a guard that is not a CompileLoopVersionDescr"
         assert isinstance(descr, CompileLoopVersionDescr)
-        descr.version = version
         self.faildescrs.append(descr)
         # note: stitching a guard must resemble the order of the label
         # otherwise a wrong mapping is handed to the register allocator
@@ -844,6 +842,7 @@
     call_pure_results = None
     logops = None
     quasi_immutable_deps = None
+    versions = []
 
     def _token(*args):
         raise Exception("TreeLoop.token is killed")
@@ -856,7 +855,6 @@
 
     def __init__(self, name):
         self.name = name
-        self.versions = []
         # self.operations = list of ResOperations
         #   ops of the kind 'guard_xxx' contain a further list of operations,
         #   which may itself contain 'guard_xxx' and so on, making a tree.
@@ -911,15 +909,7 @@
         return None
 
     def snapshot(self):
-        if len(self.versions) == 0:
-            # create a root version, simplyfies the code in compile.py
-            self.versions.append(LoopVersion(None))
-        root_version = self.versions[0]
         version = LoopVersion(self)
-        if not we_are_translated():
-            print "LOOP SNAPSHOT"
-            for op in version.operations:
-                print "", op
         self.versions.append(version)
         return version
 


More information about the pypy-commit mailing list