[Issue 6767] New: Range case statements generate horrific code
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Oct 4 10:43:46 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6767
Summary: Range case statements generate horrific code
Product: D
Version: D2
Platform: x86
OS/Version: Mac OS X
Status: NEW
Severity: major
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: peter.alexander.au at gmail.com
--- Comment #0 from Peter Alexander <peter.alexander.au at gmail.com> 2011-10-04 10:43:04 PDT ---
int foo(int n)
{
switch (n)
{
case 0: .. case 255:
return 0;
default:
return 1;
}
}
Compiled with all optimisation (-O -inline -release) in DMD 2.055, I get the
following code generated (it's the same without optimisation, too):
_D4test3fooFiZi:
00001bb4 pushl %ebp
00001bb5 movl %esp,%ebp
00001bb7 pushl %eax
00001bb8 testl %eax,%eax
00001bba je 0x00002571
00001bc0 cmpl $0x01,%eax
00001bc3 je 0x00002571
00001bc9 cmpl $0x02,%eax
00001bcc je 0x00002571
00001bd2 cmpl $0x03,%eax
00001bd5 je 0x00002571
00001bdb cmpl $0x04,%eax
00001bde je 0x00002571
00001be4 cmpl $0x05,%eax
00001be7 je 0x00002571
... for all 256 values ...
0000255a cmpl $0x000000fd,%eax
0000255f je 0x00002571
00002561 cmpl $0x000000fe,%eax
00002566 je 0x00002571
00002568 cmpl $0x000000ff,%eax
0000256d je 0x00002571
0000256f jmp 0x00002577
00002571 movl %ebp,%esp
00002573 xorl %eax,%eax
00002575 popl %ebp
00002576 ret
00002577 movl %ebp,%esp
00002579 movl $0x00000001,%eax
0000257e popl %ebp
0000257f ret
Essentially, it has generated a massive O(n) function for what should be a
couple of compares if not better.
--
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