[Issue 4440] New: inlined delegates produces different asm than straight lined code
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Jul 8 22:59:53 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4440
Summary: inlined delegates produces different asm than straight
lined code
Product: D
Version: D1 & D2
Platform: Other
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: braddr at puremagic.com
--- Comment #0 from Brad Roberts <braddr at puremagic.com> 2010-07-08 22:59:51 PDT ---
split from bug 859:
Leandro Lucarella 2010-06-27 18:49:49 PDT
I'm having some performance problems moving some stuff from a lower-level
C-style to a higher-lever D-style. Here is an example:
---
int find_if(bool delegate(ref int) predicate)
{
for (int i = 0; i < 100; i++)
if (predicate(i))
return i;
return -1;
}
int main()
{
// for (int i = 0; i < 100; i++)
// if (i == 99)
// return i;
// return -1;
return find_if((ref int i) { return i == 99; });
}
---
The program produced by this source executes 4 times more instructions than the
more direct (lower-level) version commented out. I would expect DMD to inline
all functions/delegates and produce the same asm for both, but that's not the
case.
This is a reduced test-case, but I'm working on improving the GC and I'm really
hitting this problem. If I use this higher-level style in the GC, a Dil run for
generating the Tango docs is 3.33 times slower than the C-ish style used by the
current GC.
So I think this is a real problem for D, it's really important to be able to
encourage people to use the higher-level D constructs.
--
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