[Issue 2356] array literal as non static initializer generates horribly inefficient code.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Apr 10 19:20:57 PDT 2013
http://d.puremagic.com/issues/show_bug.cgi?id=2356
--- Comment #15 from bearophile_hugs at eml.cc 2013-04-10 19:20:51 PDT ---
(In reply to comment #14)
> New D2 fix:
> https://github.com/D-Programming-Language/dmd/pull/1883
>From the pull request (dmd -O -inline -g test after):
c:\d\test.d:18 int[3] y = [n, n, n];
004020aa: 6a03 push 0x3
004020ac: 6a05 push 0x5
004020ae: 8d4c241c lea ecx, [esp+0x1c]
004020b2: 51 push ecx
004020b3: e880020000 call 0x402338 __memset32
Isn't calling memset for just 3 integers slower than inlining their
assignments? I suggest to not call memset if the number of bytes to be copied
is so small (I think LDC is already doing similar optimizations). Maybe a
benchmark is also useful here.
c:\d\test.d:20 S[3] z = [s2, s2, s2];
004020b8: 8d542418 lea edx, [esp+0x18]
004020bc: 52 push edx
004020bd: 8d442430 lea eax, [esp+0x30]
004020c1: e86affffff call 0x402030 test.S.__cpctor c:\d\test.d:3
004020c6: 8d5c2418 lea ebx, [esp+0x18]
004020ca: 53 push ebx
004020cb: 8d442434 lea eax, [esp+0x34]
004020cf: e85cffffff call 0x402030 test.S.__cpctor c:\d\test.d:3
004020d4: 53 push ebx
004020d5: 8d442438 lea eax, [esp+0x38]
004020d9: e852ffffff call 0x402030 test.S.__cpctor c:\d\test.d:3
004020de: 83c40c add esp, 0xc
004020e1: 31c0 xor eax, eax
If the s2 variable already contains the struct, then what's the purpose of
those calls to 0x402030?
In the "before" there are no calls to struct constructors:
c:\d\test.d:20 S[3] z = [s2, s2, s2];
00403913: 8d542474 lea edx, [esp+0x74]
00403917: b960014200 mov ecx, 0x420160
0040391c: 52 push edx
0040391d: 6a03 push 0x3
0040391f: 6a03 push 0x3
00403921: 51 push ecx
00403922: e8fd0a0000 call 0x404424 __d_arrayliteralTX
00403927: 83c408 add esp, 0x8
0040392a: 8d542470 lea edx, [esp+0x70]
0040392e: 52 push edx
0040392f: 89c6 mov esi, eax
--
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