[Issue 8828] New: Long compilation time of a destroy() on a large fixed-sized matrix

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Oct 15 19:07:17 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8828

           Summary: Long compilation time of a destroy() on a large
                    fixed-sized matrix
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: bearophile_hugs at eml.cc


--- Comment #0 from bearophile_hugs at eml.cc 2012-10-15 19:07:14 PDT ---
Problem found by Damian on D.learn:
http://forum.dlang.org/thread/duzbdlfgtmqxtrztfpdi@forum.dlang.org


This program takes a lot of time to compile:

void main() {
    int[500][500] arr;
    destroy(arr);
}



It generates an assembly like:

        mov    EAX,offset FLAT:_D13TypeInfo_G50i6__initZ
        push    EAX
        call    near ptr __d_arrayliteralTX
        mov    [EAX],EBX
        mov    4[EAX],EBX
        mov    8[EAX],EBX
        mov    0Ch[EAX],EBX
        mov    010h[EAX],EBX
        mov    014h[EAX],EBX
        mov    018h[EAX],EBX
        mov    01Ch[EAX],EBX
        mov    020h[EAX],EBX
        mov    024h[EAX],EBX
        mov    028h[EAX],EBX
        mov    02Ch[EAX],EBX
        mov    030h[EAX],EBX
        mov    034h[EAX],EBX
        mov    038h[EAX],EBX
        mov    03Ch[EAX],EBX
        mov    040h[EAX],EBX
        mov    044h[EAX],EBX
        mov    048h[EAX],EBX
        mov    04Ch[EAX],EBX
        mov    050h[EAX],EBX
        mov    054h[EAX],EBX
        mov    058h[EAX],EBX
        mov    05Ch[EAX],EBX
        mov    060h[EAX],EBX
        mov    064h[EAX],EBX
        mov    068h[EAX],EBX
        mov    06Ch[EAX],EBX
        mov    070h[EAX],EBX
        mov    074h[EAX],EBX
        mov    078h[EAX],EBX
        mov    07Ch[EAX],EBX
        mov    080h[EAX],EBX
        mov    084h[EAX],EBX
        mov    088h[EAX],EBX
        mov    08Ch[EAX],EBX
        mov    090h[EAX],EBX
        mov    094h[EAX],EBX
        mov    098h[EAX],EBX
        mov    09Ch[EAX],EBX
        mov    0A0h[EAX],EBX
        mov    0A4h[EAX],EBX
        mov    0A8h[EAX],EBX
        mov    0ACh[EAX],EBX
        mov    0B0h[EAX],EBX
        mov    0B4h[EAX],EBX
        mov    0B8h[EAX],EBX
...


I don't think that's good for a large 2D fixed-sized matrix.

Workaround: use something like:

foreach (ref row; arr)
    row[] = typeof(row[0]).init;

-- 
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