http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21182



--- Comment #11 from Denis Vlasenko <vda.linux at googlemail dot com> 
2013-01-20 14:39:42 UTC ---

(In reply to comment #10)

> 4.4.7 and 4.5.4 generate the same code (no stack use) for -D/-UNAIL_REGS.

> With 4.6.3, the -DNAIL_REGS code regresses very much (IRA ...), the

> -UNAIL_REGS code is nearly perfect but less good than 4.4/4.5 (if you

> only consider grep esp serpent.s | wc -l).  Same behavior with 4.7.2.

> 

> Trunk got somewhat worse with -UNAIL_REGS but better with -DNAIL_REGS (at 
> -O2):

> 

>      -UNAIL_REGS  -DNAIL_REGS

> 4.5.4     3             3

> 4.6.3    15           101



This matches what I see with 4.6.3 - 15 insns with %esp (and no %ebp):



$ grep '%esp' serpent-4.6.3-O2.asm

   4:   83 ec 04                sub    $0x4,%esp

   7:   8b 4c 24 20             mov    0x20(%esp),%ecx

   b:   8b 44 24 18             mov    0x18(%esp),%eax

 22e:   89 0c 24                mov    %ecx,(%esp)

 239:   23 3c 24                and    (%esp),%edi

 588:   89 0c 24                mov    %ecx,(%esp)

 58f:   23 3c 24                and    (%esp),%edi

 8f4:   89 0c 24                mov    %ecx,(%esp)

 8fd:   23 3c 24                and    (%esp),%edi

 c60:   89 0c 24                mov    %ecx,(%esp)

 c6b:   23 3c 24                and    (%esp),%edi

 d37:   89 14 24                mov    %edx,(%esp)

 d5a:   8b 44 24 1c             mov    0x1c(%esp),%eax

 d5e:   33 14 24                xor    (%esp),%edx

 d70:   83 c4 04                add    $0x4,%esp



> The most important thing to fix is the -UNAIL_REGS case of course.



Sure. NAIL_REGS is only a hack meant to demonstrate that regs *can* be

allocated optimally.

Reply via email to