[llvm-dev] Recent -Os code size regressions

Steve King via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 20 17:22:34 PST 2015


On Fri, Nov 20, 2015 at 5:15 PM, Steve King <steve at metrokings.com> wrote:
>
> On Fri, Nov 20, 2015 at 5:06 PM, James Molloy <james at jamesmolloy.co.uk>
wrote:
> >
> > Hi,
> >
> > We'd need to look precisely at what's causing the code size bloat. The
midend commit pointed out by Steve shouldn't cause bloat in and of itself -
it should reduce code size. It removes a load of stores and branches.
> >
> > I know a backend change I made to ARM isn't behaving as well as it
could, and I have patches to fix that. Speculatively reverting midend
patches isn't the best way to approach this, in my opinion! :)
> >
>
> For i586, the effect of r252152 seems to cause cmoves instead of branches.
>  Code size increase is +35% for i586.
> Unfortunately the object files are wildly different in a way that does
not seem to occur in other workloads.  I tried to clip a concise before and
after case.
>
> Before
> :
> As a reference point, I found OR $0x408 and OR $0x810 in close proximity.
>
>
>  278: 81 ca 10 08 00 00     or     $0x810,%edx
>  27e: 89 10                 mov    %edx,(%eax)
>  280: f6 c1 40
>
>     test   $0x40,%cl
>  283: 74 08                 je     28d <t_run_test+0x28d>
>  285: 81 ca 08 04 00 00     or     $0x408,%edx
>  28b: 89 10                 mov    %edx,(%eax)
>  28d: 84 c9                 test   %cl,%cl
>  28f: 0f 89 34 01 00 00     jns    3c9 <t_run_test+0x3c9>
>
>
> After
> r252152:
>
> Note that the OR $0x408 and OR $0x810 come
> now
> in reverse order.
>
>
> 35d: 81 c9 08 04 00 00     or     $0x408,%ecx
> 363: 89 4c 24 28           mov    %ecx,0x28(%esp)
> 367: 89 df                 mov    %ebx,%edi
> 369: 83 e7 10
>
>       and    $0x10,%edi
> 36c: 89 7c 24 20           mov    %edi,0x20(%esp)
> 370: 0f 45 d1
>
>    cmovne %ecx,%edx
> 373: 89 d7                 mov    %edx,%edi
> 375: 81 cf 10 08 00 00     or     $0x810,%edi
> 37b: 89 7c 24 14           mov    %edi,0x14(%esp)
> 37f: 89 d9                 mov    %ebx,%ecx
> 381: 83 e1 20
>
>        and    $0x20,%ecx
> 384: 89 4c 24 1c           mov    %ecx,0x1c(%esp)
> 388: 0f 45 d7
>
>       cmovne %edi,%edx
> 38b: 89 d7                 mov    %edx,%edi
>
>
> HTH,
> -steve
>

And the ll source for this snippet:

  %or105 = or i32 %.or83.or94, 1032
  %.or83.or94.or105 = select i1 %tobool98, i32 %.or83.or94, i32 %or105
  %and108 = and i32 %12, 32
  %tobool109 = icmp eq i32 %and108, 0
  %or116 = or i32 %.or83.or94.or105, 2064
  %.or83.or94.or105.or116 = select i1 %tobool109, i32 %.or83.or94.or105,
i32 %or116
  %and119 = and i32 %12, 64
  %tobool120 = icmp eq i32 %and119, 0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151120/0d63bc91/attachment.html>


More information about the llvm-dev mailing list