Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> Branch: regalloc-playground Changeset: r92349:7a3cd6204340 Date: 2017-09-07 14:32 +0200 http://bitbucket.org/pypy/pypy/changeset/7a3cd6204340/
Log: make allocation decisions in the LEA case a bit more flexible by freeing the argument diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py --- a/rpython/jit/backend/x86/regalloc.py +++ b/rpython/jit/backend/x86/regalloc.py @@ -533,7 +533,11 @@ self.perform(op, [loc, argloc], loc) def _consider_lea(self, op): - loc = self.make_sure_var_in_reg(op.getarg(0)) + x = op.getarg(0) + loc = self.make_sure_var_in_reg(x) + # make it possible to have argloc be == loc if x dies + # (then LEA will not be used, but that's fine anyway) + self.possibly_free_var(x) argloc = self.loc(op.getarg(1)) resloc = self.force_allocate_reg(op) self.perform(op, [loc, argloc], resloc) diff --git a/rpython/jit/backend/x86/test/test_regalloc.py b/rpython/jit/backend/x86/test/test_regalloc.py --- a/rpython/jit/backend/x86/test/test_regalloc.py +++ b/rpython/jit/backend/x86/test/test_regalloc.py @@ -262,6 +262,7 @@ assert len(self.filter_log_moves()) == 2 def test_jump_hinting(self): + self.targettoken._ll_loop_code = 0 ops = ''' [i0] i1 = int_add(i0, 1) @@ -280,6 +281,22 @@ self.interpret(ops, [0], run=False) assert len(self.filter_log_moves()) == 1 + def test_jump_hinting_int_add(self): + self.targettoken._ll_loop_code = 0 + ops = ''' + [i0] + i1 = int_add(i0, 1) + i3 = int_lt(i1, 20) + guard_true(i3) [i1] + label(i1, descr=targettoken) + i4 = int_add(i1, 1) + i6 = int_lt(i4, 20) + guard_true(i6) [i4] + jump(i4, descr=targettoken) + ''' + self.interpret(ops, [0], run=False) + assert len(self.filter_log_moves()) == 1 + @pytest.mark.skip("later") def test_jump_different_args2(self): ops = ''' _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit