[Issue 10509] Closure is allocated even if it may be not needed
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Sep 19 23:28:29 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10509
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|wrong-code |performance
Severity|critical |enhancement
--- Comment #1 from Don <clugdbug at yahoo.com.au> 2013-09-19 23:28:25 PDT ---
This is a very difficult optimization.
Consider:
void f(int i)
{
if (i)
del = () => i; // (1)
++i; // (2)
}
If you put i on the heap only at (1), then the compiler has trouble generating
code at (2) -- is i on the heap, or on the stack?
Another example:
if (cond1())
del = () => i;
if (cond2())
del = () => i*2;
The compiler would then have to generate code to move i onto the heap in two
places, and in the second case, it might already be on the heap.
> This hits with pain as one do not expect such behaviour
I think that is inevitable. In some simple cases, the compiler might be able to
avoid creating a closure, but it will always be rather conservative.
This isn't wrong code, it's a missed optimization opportunity.
--
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