[pypy-commit] pypy ppc-updated-backend: Fix regalloc initialization and usage

ISF noreply at buildbot.pypy.org
Fri May 9 16:15:49 CEST 2014


Author: Ivan Sichmann Freitas <ivansichfreitas at gmail.com>
Branch: ppc-updated-backend
Changeset: r71432:ac487b65dce6
Date: 2014-05-09 14:14 +0000
http://bitbucket.org/pypy/pypy/changeset/ac487b65dce6/

Log:	Fix regalloc initialization and usage

diff --git a/rpython/jit/backend/ppc/ppc_assembler.py b/rpython/jit/backend/ppc/ppc_assembler.py
--- a/rpython/jit/backend/ppc/ppc_assembler.py
+++ b/rpython/jit/backend/ppc/ppc_assembler.py
@@ -812,9 +812,9 @@
                                                      'e', looptoken.number)
 
         self.startpos = self.mc.currpos()
-        regalloc = Regalloc(assembler=self, frame_manager=PPCFrameManager())
+        regalloc = Regalloc(assembler=self)
 
-        regalloc.prepare_loop(inputargs, operations)
+        regalloc.prepare_loop(inputargs, operations, looptoken)
 
         start_pos = self.mc.currpos()
         looptoken._ppc_loop_code = start_pos
diff --git a/rpython/jit/backend/ppc/regalloc.py b/rpython/jit/backend/ppc/regalloc.py
--- a/rpython/jit/backend/ppc/regalloc.py
+++ b/rpython/jit/backend/ppc/regalloc.py
@@ -1,10 +1,11 @@
 from rpython.jit.backend.llsupport.regalloc import (RegisterManager, FrameManager,
-                                                    TempBox, compute_vars_longevity)
+                                                    TempBox, compute_vars_longevity,
+                                                    BaseRegalloc)
 from rpython.jit.backend.ppc.arch import (WORD, MY_COPY_OF_REGS, IS_PPC_32)
 from rpython.jit.codewriter import longlong
 from rpython.jit.backend.ppc.jump import (remap_frame_layout,
                                           remap_frame_layout_mixed)
-from rpython.jit.backend.ppc.locations import imm
+from rpython.jit.backend.ppc.locations import imm, get_fp_offset, get_spp_offset
 from rpython.jit.backend.ppc.helper.regalloc import (_check_imm_arg,
                                                      prepare_cmp_op,
                                                      prepare_unary_int_op,
@@ -174,14 +175,14 @@
         return reg
 
 class PPCFrameManager(FrameManager):
-    def __init__(self):
+    def __init__(self, base_ofs):
         FrameManager.__init__(self)
         self.used = []
+        self.base_ofs = base_ofs
 
-    @staticmethod
-    def frame_pos(loc, type):
-        num_words = PPCFrameManager.frame_size(type)
-        return locations.StackLocation(loc, num_words=num_words, type=type)
+    def frame_pos(self, loc, box_type):
+        #return locations.StackLocation(loc, get_fp_offset(self.base_ofs, loc), box_type)
+        return locations.StackLocation(loc, get_fp_offset(self.base_ofs, loc), box_type)
 
     @staticmethod
     def frame_size(type):
@@ -192,18 +193,19 @@
         assert loc.is_stack()
         return loc.position
 
-class Regalloc(object):
+class Regalloc(BaseRegalloc):
 
-    def __init__(self, frame_manager=None, assembler=None):
+    def __init__(self, assembler=None):
         self.cpu = assembler.cpu
-        self.frame_manager = frame_manager
+        self.frame_manager = PPCFrameManager(self.cpu.get_baseofs_of_frame_field())
         self.assembler = assembler
         self.jump_target_descr = None
         self.final_jump_op = None
 
     def _prepare(self,  inputargs, operations):
-        longevity, last_real_usage = compute_vars_longevity(
-                                                    inputargs, operations)
+        self.fm = self.frame_manager
+        longevity, last_real_usage = compute_vars_longevity(inputargs,
+                                                            operations)
         self.longevity = longevity
         self.last_real_usage = last_real_usage
         fm = self.frame_manager
@@ -211,9 +213,9 @@
         self.fprm = FPRegisterManager(longevity, fm, asm)
         self.rm = PPCRegisterManager(longevity, fm, asm)
 
-    def prepare_loop(self, inputargs, operations):
+    def prepare_loop(self, inputargs, operations, looptoken):
         self._prepare(inputargs, operations)
-        self._set_initial_bindings(inputargs)
+        self._set_initial_bindings(inputargs, looptoken)
         self.possibly_free_vars(inputargs)
 
     def prepare_bridge(self, inputargs, arglocs, ops):


More information about the pypy-commit mailing list