D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 5684 - Extremely show compile times with large tuples with -O -inline
Summary: Extremely show compile times with large tuples with -O -inline
Status: RESOLVED DUPLICATE of issue 2396
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: Other Windows
: P2 normal
Assignee: No Owner
URL:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2011-03-02 15:46 UTC by David Simcha
Modified: 2012-02-01 06:26 UTC (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description David Simcha 2011-03-02 15:46:03 UTC
// test.d:
import std.typecons;

void main() {
    tuple(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
        26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,57,48,
        49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
        71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,
        94,95,96,97,98,99,100,

        1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
        26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,57,48,
        49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
        71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,
        94,95,96,97,98,99,100);
}

$ time dmd -c test.d -inline -O

real    1m44.177s
user    0m0.015s
sys     0m0.000s
Comment 1 Don 2011-03-03 00:51:08 UTC
I think this is basically the same issue as bug 4379. Each optimiser pass can only remove ONE comma expression -- but the entire expression gets traversed each time.
So, the optimisation time is O(n^^2) where n = depth of comma expressions.
Comment 2 Steven Schveighoffer 2011-03-03 06:24:54 UTC
Bug 4900 could also be related.

I would recommend profiling the compiler to see what functions it is spending the most time in.  It's not a simple thing, but the makefile has (or at least had) some commented out flags that should do the trick.
Comment 3 yebblies 2012-02-01 06:26:32 UTC

*** This issue has been marked as a duplicate of issue 2396 ***