[Issue 13976] New: Value range propagation to disable some slice bound tests
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Jan 13 04:56:05 PST 2015
https://issues.dlang.org/show_bug.cgi?id=13976
Issue ID: 13976
Summary: Value range propagation to disable some slice bound
tests
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: k.hara.pg at gmail.com
In general, with a slice expression:
arr[a..b]
The array boundaries are checked by the condition at runtime:
b <= arr.length && a <= b`
But with the following program:
void main()
{
int[10] a;
size_t n;
auto s = a[n%3 .. n%3 + 3];
assert(s.length == 3);
}
Compiler can deduce:
ValueRangeOf(lower) == ValueRangeOf(n%3) --> [0, 2]
ValueRangeOf(upper) == ValueRangeOf(n%3 + 3) --> [3, 5]
a.length == 10
and those formulas are satisfied always:
ValueRangeOf(upper) <= arr.length
ValueRangeOf(lower) <= ValueRangeOf(upper)
Finally, compiler can eliminate redundant runtime bound tests.
Note that, optimization for the array indexing is already done in issue 9097.
--
More information about the Digitalmars-d-bugs
mailing list