[Issue 12785] New: Optimize with switches some associative array usage idioms
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed May 21 16:23:00 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=12785
Issue ID: 12785
Summary: Optimize with switches some associative array usage
idioms
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
In D there are handy associative array literals, so D code contains idioms that
are more typical of dynamic languages as Python:
size_t foo(in char c) {
immutable size_t[char] indexer =
['D': 2, 'R': 5, 'C': 8, 'H': 9, 'W': 0];
return indexer[c];
}
size_t foo(in char c) {
return ['D': 2, 'R': 5, 'C': 8, 'H': 9, 'W': 0][c];
}
So I suggest to add to D front-end an optimization, that rewrites those usages
of associative arrays with a switch:
size_t foo(in char c) {
size_t value = size_t.max;
switch (c) {
case 'D': value = 2; break;
case 'R': value = 5; break;
case 'C': value = 8; break;
case 'H': value = 9; break;
case 'W': value = 0; break;
default: assert(false);
}
return value;
}
This should be faster, avoid GC activity, and produce simpler binaries.
--
More information about the Digitalmars-d-bugs
mailing list