[Issue 1149] New: Optimizer: obsolete array length loads, common subexpr. elimin. not working
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Apr 15 10:05:39 PDT 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1149
Summary: Optimizer: obsolete array length loads, common subexpr.
elimin. not working
Product: D
Version: 1.012
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla at digitalmars.com
ReportedBy: jascha at mainia.de
consider the following code:
void main()
{
uint[] arr;
arr.length = 4;
arr[0] = 1;
arr[1] = 1;
arr[2] = 1;
arr[3] = 1;
}
for the 4 assignments, "dmd -O -inline" generates
mov ECX,1
mov EDX,010h[ESP]
mov EAX,0Ch[ESP]
mov [EDX],ECX
mov EDX,010h[ESP]
mov EAX,0Ch[ESP]
mov 4[EDX],ECX
mov EDX,010h[ESP]
mov EAX,0Ch[ESP]
mov 8[EDX],ECX
mov EDX,010h[ESP]
mov EAX,0Ch[ESP]
mov 0Ch[EDX],ECX
instead of
mov ECX,1
mov EDX,010h[ESP]
mov [EDX],ECX
mov 4[EDX],ECX
mov 8[EDX],ECX
mov 0Ch[EDX],ECX
- the length of the array is always loaded, even if it's not used
- the array pointer is loaded multiple times into the same register
the common subexpression elimination appears to be working for the value in
ECX, but not for the pointer in EDX.
--
More information about the Digitalmars-d-bugs
mailing list