[AC] gcc-3.3.6 / Strange optimization bug when using -Os
Jakub Bogusz
qboosh w pld-linux.org
Śro, 29 Cze 2005, 18:35:45 CEST
On Wed, Jun 29, 2005 at 05:01:39PM +0200, Paweł Sikora wrote:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22167
> gcc w ix86 z AC na tym poleglo.
Ale bzdury kompletne produkuje...
Fragment main() z -O2:
804858c: e8 bf ff ff ff call 8048550 <_ZN1S4initEv>
8048591: 8b 5d ec mov 0xffffffec(%ebp),%ebx
8048594: 8d 45 d8 lea 0xffffffd8(%ebp),%eax
8048597: 89 04 24 mov %eax,(%esp)
804859a: e8 a1 ff ff ff call 8048540 <_Z10do_nothingRK1A>
804859f: 89 5c 24 08 mov %ebx,0x8(%esp)
80485a3: 89 5c 24 04 mov %ebx,0x4(%esp)
80485a7: c7 04 24 a0 87 04 08 movl $0x80487a0,(%esp)
80485ae: e8 9d fe ff ff call 8048450 <printf w plt>
80485b3: 85 db test %ebx,%ebx
80485b5: 74 2d je 80485e4 <main+0x74>
80485b7: 8b 45 ec mov 0xffffffec(%ebp),%eax
80485ba: 39 d8 cmp %ebx,%eax
80485bc: 74 14 je 80485d2 <main+0x62>
80485be: 89 5c 24 08 mov %ebx,0x8(%esp)
80485c2: 89 44 24 04 mov %eax,0x4(%esp)
80485c6: c7 04 24 e0 87 04 08 movl $0x80487e0,(%esp)
80485cd: e8 7e fe ff ff call 8048450 <printf w plt>
80485d2: 89 1c 24 mov %ebx,(%esp)
80485d5: e8 46 fe ff ff call 8048420 <_ZdlPv w plt>
80485da: 8b 5d f8 mov 0xfffffff8(%ebp),%ebx
80485dd: 8b 75 fc mov 0xfffffffc(%ebp),%esi
80485e0: 31 c0 xor %eax,%eax
80485e2: c9 leave
80485e3: c3 ret
To samo z -Os:
804856b: e8 ce ff ff ff call 804853e <_ZN1S4initEv>
--- ??? tej instrukcji być nie powinno
8048570: eb 41 jmp 80485b3 <main+0x61>
8048572: 56 push %esi
8048573: 89 c7 mov %eax,%edi
8048575: e8 be ff ff ff call 8048538 <_Z10do_nothingRK1A>
804857a: 89 1c 24 mov %ebx,(%esp)
804857d: 53 push %ebx
804857e: 68 20 87 04 08 push $0x8048720
8048583: e8 c8 fe ff ff call 8048450 <printf w plt>
8048588: 83 c4 0c add $0xc,%esp
804858b: 85 db test %ebx,%ebx
804858d: 74 05 je 8048594 <main+0x42>
804858f: 39 5d e8 cmp %ebx,0xffffffe8(%ebp)
8048592: 74 11 je 80485a5 <main+0x53>
8048594: 53 push %ebx
8048595: ff 75 e8 pushl 0xffffffe8(%ebp)
8048598: 68 60 87 04 08 push $0x8048760
804859d: e8 ae fe ff ff call 8048450 <printf w plt>
80485a2: 83 c4 0c add $0xc,%esp
80485a5: 53 push %ebx
80485a6: e8 75 fe ff ff call 8048420 <_ZdlPv w plt>
--- odtąd jakieś śmieci...
80485ab: 89 3c 24 mov %edi,(%esp)
80485ae: e8 ad fe ff ff call 8048460 <_Unwind_Resume w plt>
80485b3: 56 push %esi
80485b4: e8 7f ff ff ff call 8048538 <_Z10do_nothingRK1A>
80485b9: c7 04 24 00 00 00 00 movl $0x0,(%esp)
80485c0: 6a 00 push $0x0
80485c2: 68 20 87 04 08 push $0x8048720
80485c7: e8 84 fe ff ff call 8048450 <printf w plt>
80485cc: 83 c4 0c add $0xc,%esp
80485cf: 6a 00 push $0x0
80485d1: ff 75 e8 pushl 0xffffffe8(%ebp)
80485d4: 68 60 87 04 08 push $0x8048760
80485d9: e8 72 fe ff ff call 8048450 <printf w plt>
80485de: 83 c4 0c add $0xc,%esp
80485e1: 6a 00 push $0x0
80485e3: e8 38 fe ff ff call 8048420 <_ZdlPv w plt>
--- ...aż dotąd
80485e8: 5a pop %edx
80485e9: 8d 65 f4 lea 0xfffffff4(%ebp),%esp
80485ec: 31 c0 xor %eax,%eax
80485ee: 5b pop %ebx
80485ef: 5e pop %esi
80485f0: 5f pop %edi
80485f1: c9 leave
80485f2: c3 ret
--
Jakub Bogusz http://qboosh.cs.net.pl/
Więcej informacji o liście dyskusyjnej pld-devel-pl