[pypy-commit] pypy regalloc-playground: fix an off-by-one error in register selection
cfbolz
pypy.commits at gmail.com
Sun Sep 3 03:12:43 EDT 2017
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: regalloc-playground
Changeset: r92306:69fc3fac05ad
Date: 2017-09-03 08:47 +0200
http://bitbucket.org/pypy/pypy/changeset/69fc3fac05ad/
Log: fix an off-by-one error in register selection
diff --git a/rpython/jit/backend/llsupport/regalloc.py b/rpython/jit/backend/llsupport/regalloc.py
--- a/rpython/jit/backend/llsupport/regalloc.py
+++ b/rpython/jit/backend/llsupport/regalloc.py
@@ -985,7 +985,7 @@
unfixed_reg = reg
continue
use_after = fixed_reg_pos.free_until_pos(position)
- if use_after < longevityvar.last_usage_including_sharing():
+ if use_after <= longevityvar.last_usage_including_sharing():
# can't fit
continue
assert use_after >= longevityvar.last_usage_including_sharing()
diff --git a/rpython/jit/backend/llsupport/test/test_regalloc.py b/rpython/jit/backend/llsupport/test/test_regalloc.py
--- a/rpython/jit/backend/llsupport/test/test_regalloc.py
+++ b/rpython/jit/backend/llsupport/test/test_regalloc.py
@@ -308,6 +308,17 @@
loc = longevity.try_pick_free_reg(0, b1, [r0, r1])
assert loc == r1
+def test_try_pick_free_reg_bug2():
+ b0, b1, b2, b3, b4 = newboxes(0, 0, 0, 0, 0)
+ l0 = Lifetime(1, 2)
+ l1 = Lifetime(2, 4)
+ longevity = LifetimeManager({b0: l0, b1: l1})
+ longevity.fixed_register(4, r1, b1)
+
+ # does not fit into r0, use r1
+ loc = longevity.try_pick_free_reg(0, b0, [r0, r1])
+ assert loc == r0
+
def test_simple_coalescing():
b0, b1, b2, b3, b4 = newboxes(0, 0, 0, 0, 0)
l0 = Lifetime(0, 4)
More information about the pypy-commit
mailing list