[Issue 1149] Optimizer: obsolete array length loads, common subexpr. elimin. not working

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Feb 22 15:38:38 PST 2012


http://d.puremagic.com/issues/show_bug.cgi?id=1149


bearophile_hugs at eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs at eml.cc


--- Comment #3 from bearophile_hugs at eml.cc 2012-02-22 15:38:35 PST ---
With the test code, this is the X86 asm I was seeing before this patch (-O
-release -inline):


__Dmain comdat
L0:     sub ESP,0Ch
        lea EAX,[ESP]
        mov ECX,offset FLAT:_D11TypeInfo_Ak6__initZ
        mov [ESP],0
        mov dword ptr 4[ESP],0
        push    EAX
        push    4
        push    ECX
        call    near ptr __d_arraysetlengthT
        mov ECX,010h[ESP]
        mov EDX,1
        mov EAX,0Ch[ESP]
        mov [ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 4[ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 8[ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 0Ch[ECX],EDX
        add ESP,0Ch
        add ESP,0Ch
        xor EAX,EAX
        ret

-----------------------------

After the patch:

__Dmain comdat
L0:     sub ESP,0Ch
        lea EAX,[ESP]
        mov ECX,offset FLAT:_D11TypeInfo_Ak6__initZ
        mov [ESP],0
        mov dword ptr 4[ESP],0
        push    EAX
        push    4
        push    ECX
        call    near ptr __d_arraysetlengthT
        mov ECX,010h[ESP]
        mov EDX,1
        mov EAX,0Ch[ESP]
        mov [ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 4[ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 8[ECX],EDX
        mov ECX,010h[ESP]
        mov EAX,0Ch[ESP]
        mov 0Ch[ECX],EDX
        add ESP,0Ch
        add ESP,0Ch
        xor EAX,EAX
        ret

--------------------------------

objectdump after the patch, on a 64 bit systems (courtesy of q66 on IRC #D),
compiled with -release:

0000000000000000 <_Dmain>:
   0:   55                      push   %rbp
   1:   48 8b ec                mov    %rsp,%rbp
   4:   48 83 ec 18             sub    $0x18,%rsp
   8:   53                      push   %rbx
   9:   48 c7 45 f0 00 00 00    movq   $0x0,-0x10(%rbp)
  10:   00 
  11:   48 c7 45 f8 00 00 00    movq   $0x0,-0x8(%rbp)
  18:   00 
  19:   48 8d 55 f0             lea    -0x10(%rbp),%rdx
  1d:   48 be 04 00 00 00 00    mov    $0x4,%rsi
  24:   00 00 00 
  27:   48 bf 00 00 00 00 00    mov    $0x0,%rdi
  2e:   00 00 00 
  31:   e8 00 00 00 00          callq  36 <_Dmain+0x36>
  36:   b8 01 00 00 00          mov    $0x1,%eax
  3b:   48 8b 55 f8             mov    -0x8(%rbp),%rdx
  3f:   48 8b 5d f0             mov    -0x10(%rbp),%rbx
  43:   89 02                   mov    %eax,(%rdx)
  45:   48 8b 55 f8             mov    -0x8(%rbp),%rdx
  49:   48 8b 5d f0             mov    -0x10(%rbp),%rbx
  4d:   89 42 04                mov    %eax,0x4(%rdx)
  50:   48 8b 55 f8             mov    -0x8(%rbp),%rdx
  54:   48 8b 5d f0             mov    -0x10(%rbp),%rbx
  58:   89 42 08                mov    %eax,0x8(%rdx)
  5b:   48 8b 55 f8             mov    -0x8(%rbp),%rdx
  5f:   48 8b 5d f0             mov    -0x10(%rbp),%rbx
  63:   89 42 0c                mov    %eax,0xc(%rdx)
  66:   31 c0                   xor    %eax,%eax
  68:   5b                      pop    %rbx
  69:   c9                      leaveq 
  6a:   c3                      retq   

--------------------------------

So is this patch working?

-- 
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