[Issue 2750] Optimize slice copy with size known at compile time
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Mar 19 13:39:57 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2750
------- Comment #1 from snake.scaly at gmail.com 2009-03-19 15:40 -------
Sorry, bad example. The patched compiler simply optimized the copy away, which
wasn't bad in itself, but neither was what I wanted to demonstrate. Here's a
better example:
void main() {
auto h = "hello\n";
auto buf = new char[16];
buf[0 .. h.length] = h;
}
Original 1.041:
__Dmain comdat
assume CS:__Dmain
L0: sub ESP,018h
mov EDX,FLAT:_DATA[0Ch]
mov EAX,FLAT:_DATA[08h]
push EBX
push ESI
mov ESI,EDX
push EDI
lea EDI,0Ch[ESP]
movsd
movsb
movsb
lea ESI,0Ch[ESP]
mov ECX,offset FLAT:_D11TypeInfo_Aa6__initZ
push 010h
push ECX
call near ptr __d_newarrayiT
mov EBX,6
mov ECX,EBX
mov EDI,EDX
rep
movsb
add ESP,8
xor EAX,EAX
pop EDI
pop ESI
pop EBX
add ESP,018h
ret
__Dmain ends
Assembly produced by a patched compiler:
__Dmain comdat
assume CS:__Dmain
L0: sub ESP,01Ch
mov EDX,FLAT:_DATA[0Ch]
mov EAX,FLAT:_DATA[08h]
push ESI
mov ESI,EDX
push EDI
lea EDI,0Ch[ESP]
movsd
movsb
movsb
mov ECX,offset FLAT:_D11TypeInfo_Aa6__initZ
push 010h
push ECX
call near ptr __d_newarrayiT
lea ESI,014h[ESP]
mov EDI,EDX
movsd
movsb
movsb
add ESP,8
xor EAX,EAX
pop EDI
pop ESI
add ESP,01Ch
ret
__Dmain ends
--
More information about the Digitalmars-d-bugs
mailing list