[Webkit-unassigned] [Bug 144136] Better optimize 'if' with ternaries conditional tests.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Apr 23 19:48:45 PDT 2015


https://bugs.webkit.org/show_bug.cgi?id=144136

--- Comment #5 from Filip Pizlo <fpizlo at apple.com> ---
(In reply to comment #4)
> (In reply to comment #1)
> > This might be a hole in LLVM's CFG transforms.  It might also just be a
> > matter of running some LLVM phase that we currently fail to run.
> > 
> > What about the generated machine code for "if (a?b:0)" is better than the
> > code for "if (a && b)"?
> 
> The main loops for the two attached examples:
> 
> slow:
>       0x7f198a000330: movzbl  %bl, %eax
>       0x7f198a000333: movzbl  (%rax,%r15), %ecx
>       0x7f198a000338: cmpl    $1, %ecx
>       0x7f198a00033b: jne     0x7f198a000370
>       0x7f198a00033d: movzbl  1(%rax,%r15), %ecx
>       0x7f198a000343: cmpl    $2, %ecx
>       0x7f198a000346: jne     0x7f198a000370
>       0x7f198a000348: movzbl  2(%rax,%r15), %ecx
>       0x7f198a00034e: cmpl    $3, %ecx
>       0x7f198a000351: jne     0x7f198a000370
>       0x7f198a000353: movzbl  3(%rax,%r15), %eax
>       0x7f198a000359: cmpl    $4, %eax
>       0x7f198a00035c: sete    %al
>       0x7f198a00035f: movzbl  %al, %eax

Oh wow, this sequence is really dumb.

>       0x7f198a000362: jmp     0x7f198a000390
>       0x7f198a000364: nopw    %cs:(%rax,%rax)
>       0x7f198a000370: movl    $2147483648, 36(%rbp)
>       0x7f198a000377: leaq    131779232(%r15), %rax
>       0x7f198a00037e: movq    %rbp, %rdi
>       0x7f198a000381: movq    %r14, %rsi
>       0x7f198a000384: callq   *%rax
>       0x7f198a000386: cmpq    $0, -2216120(%r15)
>       0x7f198a00038e: jne     0x7f198a0003b6
>       0x7f198a000390: testq   %rax, %rax
>       0x7f198a000393: cmovnel %r13d, %r12d

Yuck!

>       0x7f198a000397: incl    %ebx
>       0x7f198a000399: cmpl    $1000000000, %ebx
>       0x7f198a00039f: jl      0x7f198a000330
> 
> fast:
>       0x7f81720002e0: movzbl  %cl, %edi
>       0x7f81720002e3: movzbl  (%rdi,%rax), %esi
>       0x7f81720002e7: cmpl    $1, %esi
>       0x7f81720002ea: jne     0x7f8172000320
>       0x7f81720002ec: movzbl  1(%rdi,%rax), %esi
>       0x7f81720002f1: cmpl    $2, %esi
>       0x7f81720002f4: jne     0x7f8172000320
>       0x7f81720002f6: movzbl  2(%rdi,%rax), %esi
>       0x7f81720002fb: cmpl    $3, %esi
>       0x7f81720002fe: jne     0x7f8172000320
>       0x7f8172000300: movzbl  3(%rdi,%rax), %esi
>       0x7f8172000305: movl    $1, %edi
>       0x7f817200030a: cmpl    $4, %esi
>       0x7f817200030d: je      0x7f8172000311
>       0x7f817200030f: movl    %edx, %edi
>       0x7f8172000311: movl    %edi, %edx
>       0x7f8172000313: nopw    %cs:(%rax,%rax)
>       0x7f8172000320: incl    %ecx
>       0x7f8172000322: cmpl    $1000000000, %ecx
>       0x7f8172000328: jl      0x7f81720002e0

Yup, LLVM bug.  Maybe we can work around it - but it seems that this should be fixed in LLVM.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-unassigned/attachments/20150424/3e717b39/attachment.html>


More information about the webkit-unassigned mailing list