[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