[pypy-svn] r37807 - pypy/dist/pypy/jit/codegen/ppc

mwh at codespeak.net mwh at codespeak.net
Fri Feb 2 15:06:17 CET 2007


Author: mwh
Date: Fri Feb  2 15:06:16 2007
New Revision: 37807

Modified:
   pypy/dist/pypy/jit/codegen/ppc/rgenop.py
Log:
make sure that when we need a fresh location for before-jump rearrangements, we
don't use part of the stack the target block considers important.
with this change, the ppc backend passes demo/autorun for several hours and is
so probably solid.


Modified: pypy/dist/pypy/jit/codegen/ppc/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/ppc/rgenop.py	Fri Feb  2 15:06:16 2007
@@ -131,13 +131,12 @@
         self.allocator = allocator
 
     def emit_move(self, tarloc, srcloc):
+        srcvar = None
         if DEBUG_PRINT:
             for v, loc in self.allocator.var2loc.iteritems():
                 if loc is srcloc:
                     srcvar = v
                     break
-        else:
-            srcvar = None
         emit = self.insns.append
         if tarloc == srcloc:
             return
@@ -180,6 +179,9 @@
             tar2loc[tloc] = tloc
             tar2src[tloc] = src
             tarvars.append(tloc)
+        if not tloc.is_register:
+            if tloc in allocator.free_stack_slots:
+                allocator.free_stack_slots.remove(tloc)
 
     gen = JumpPatchupGenerator(insns, allocator)
     emit_moves_safe(gen, tarvars, tar2src, tar2loc, src2loc)
@@ -425,6 +427,7 @@
             before_moves = len(self.insns)
             print outputargs_gv
             print target.args_gv
+        allocator.spill_offset = min(allocator.spill_offset, target.min_stack_offset)
         prepare_for_jump(
             self.insns, outputargs_gv, allocator.var2loc, target, allocator)
         if DEBUG_PRINT:



More information about the Pypy-commit mailing list