From d74927cf5d6b6601e9ac01c22475c2cbe07f1a0e Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Wed, 14 May 2014 14:44:27 +0200 Subject: V4 RegAlloc: change life-time intervals from closed to half-open. There are two changes in this patch, that go hand-in-hand. First, when re-numbering the statements in order of occurrence in the scheduled basic-blocks, the (new) position is not stored in the statement itself, but in the LifeTimeIntervals class. This makes it possible to re-use information gathered during SSA formation or optimization. The re-numbering itself has also changed, resulting in some minor changes to the life-time interval calculation. The new numbering is described in LifeTimeIntervals::renumber(). The reason is to make it easy for the register allocator and stack-slot allocator to distinguish between definition of a temporary and its uses. Example: 20: %3 = %2 + %1 22: print(%3) If the life-time of %2 or %1 ends at 20, then at the point that %3 gets assigned, it can re-use the storage occupied by %1 or %2. Also, when both %1 and %2 need to get a register assigned (because they were spilled to the stack, for example), %3 should be allocated "after" both %1 and %2. So, instead of having a closed interval of [20-22] for %3, we want to use an open interval of (20-22]. To simulate the "open" part, the life-time of %3 is set to [21-22]. So, all statements live on even positions, and temporaries defined by a statement start at statmentPosition + 1. Change-Id: I0eda2c653b0edf1a529bd0762d338b0ea9a66aa0 Sanity-Review: Qt Sanity Bot Reviewed-by: Lars Knoll --- tests/auto/qml/v4misc/tst_v4misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/auto/qml/v4misc/tst_v4misc.cpp') diff --git a/tests/auto/qml/v4misc/tst_v4misc.cpp b/tests/auto/qml/v4misc/tst_v4misc.cpp index 79ccdc9a4b..17f2fed3f9 100644 --- a/tests/auto/qml/v4misc/tst_v4misc.cpp +++ b/tests/auto/qml/v4misc/tst_v4misc.cpp @@ -139,7 +139,7 @@ void tst_v4misc::rangeSplitting_3() interval.validate(); QCOMPARE(interval.end(), 71); - LifeTimeInterval newInterval = interval.split(64, LifeTimeInterval::Invalid); + LifeTimeInterval newInterval = interval.split(64, LifeTimeInterval::InvalidPosition); interval.validate(); newInterval.validate(); QVERIFY(!newInterval.isValid()); -- cgit v1.2.3