Author: Richard Plangger <planri...@gmail.com> Branch: s390x-backend Changeset: r81777:4a9e35058f3e Date: 2016-01-15 09:13 +0100 http://bitbucket.org/pypy/pypy/changeset/4a9e35058f3e/
Log: jumping over pair (end of regalloc) if one of them is forbidden diff --git a/rpython/jit/backend/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py --- a/rpython/jit/backend/zarch/regalloc.py +++ b/rpython/jit/backend/zarch/regalloc.py @@ -189,7 +189,7 @@ even, odd = None, None REGS = r.registers i = len(self.free_regs)-1 - candidates = [] + candidates = {} while i >= 0: even = self.free_regs[i] if even.is_even(): @@ -198,7 +198,7 @@ if odd not in self.free_regs: # sadly odd is not free, but for spilling # we found a candidate - candidates.append(odd) + candidates[odd] = True i -= 1 continue assert var not in self.reg_bindings @@ -218,7 +218,7 @@ if even in r.MANAGED_REGS and even not in self.free_regs: # yes even might be a candidate # this means that odd is free, but not even - candidates.append(even) + candidates[even] = True i -= 1 if len(candidates) != 0: @@ -275,8 +275,10 @@ reg2 = r.MANAGED_REGS[i+1] assert reg.is_even() and reg2.is_odd() ovar = reverse_mapping[reg] - ovar2 = reverse_mapping[reg2] - if ovar in forbidden_vars or ovar2 in forbidden_vars: + if ovar in forbidden_vars: + continue + ovar2 = reverse_mapping.get(reg2, None) + if ovar2 is not None and ovar2 in forbidden_vars: # blocked, try other register pair continue even = reg @@ -284,7 +286,8 @@ self._sync_var(ovar) self._sync_var(ovar2) del self.reg_bindings[ovar] - del self.reg_bindings[ovar2] + if ovar2 is not None: + del self.reg_bindings[ovar2] # both are not added to free_regs! no need to do so self.reg_bindings[var] = even self.reg_bindings[var2] = odd _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit