[Issue 11420] New: Inefficient AA value setting
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Nov 2 05:51:23 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11420
Summary: Inefficient AA value setting
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: performance
Severity: major
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2013-11-02 05:51:21 PDT ---
This is both dmd and druntime issue.
By fixing issue 6178, AA value setting with opAssign behavior has been properly
fixed in 2.064.
struct S
{
int val;
this(int v) { val = 1; }
void opAssign(S) { val = 2; }
}
void main()
{
S[int] aa;
aa[1] = S(1); // S(1) is moved in the newly allocated AA slot
aa[1] = S(2); // opAssign(S1) is called on existing aa[1] value
assert(aa.length == 1 && aa[1].val == 2);
}
But, the generated code is a little inefficient because it would search the
given key twice.
// aa[1] = S(1); is lowered to:
1 in aa ? aa[1].opAssign(S(1)) : aa[1].__ctor(1);
// --> 1 in aa is the first key search.
// --> aa[1] is the second key search.
To fix the issue, we need to add a new internal function in druntime, and
compiler should generate code which uses the function.
The new function's spec is:
- it takes at least two arguments, the AA and assigned value.
- it should return two values, one is the allocated/found slot, and the other
is a boolean flag which the returned slot is newly allocated or not.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list