[llvm-dev] Potentially unsafe loop optimization

Johannes Doerfert via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 17 16:57:07 PST 2021


llc generates the return in all version I tried: 
https://godbolt.org/z/oh3fqh


On 2/17/21 6:46 PM, Craig Topper wrote:
> What version of llvm are you using? Godbolt is showing trunk and llvm 10
> have a conditional branch, llvm 11 does not.
>
> ~Craig
>
>
> On Wed, Feb 17, 2021 at 4:41 PM Richard Kenner via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>>> Long story short, from what I can see there is no miscompilation
>>> or change in semantics for that matter.
>> So why does the .s file not contain the loop exit test?
>>
>>          .text
>>          .file   "c26006a.adb"
>>          .globl  _ada_c26006a                    # -- Begin function
>> _ada_c26006a
>>          .p2align        4, 0x90
>>          .type   _ada_c26006a, at function
>> _ada_c26006a:                           # @_ada_c26006a
>>          .cfi_startproc
>> # %bb.0:                                # %entry
>>          pushq   %rbx
>>          .cfi_def_cfa_offset 16
>>          subq    $32, %rsp
>>          .cfi_def_cfa_offset 48
>>          .cfi_offset %rbx, -16
>>          movw    $8257, 16(%rsp)                 # imm = 0x2041
>>          movb    $49, 18(%rsp)
>>          movw    $8257, (%rsp)                   # imm = 0x2041
>>          movb    $50, 2(%rsp)
>>          xorl    %ebx, %ebx
>>          jmp     .LBB0_1
>>          .p2align        4, 0x90
>> .LBB0_3:                                # %loop.cond.iter
>>                                          #   in Loop: Header=BB0_1 Depth=1
>>          incb    %bl
>> .LBB0_1:                                # %loop.cond
>>                                          # =>This Inner Loop Header: Depth=1
>>          movb    %bl, 17(%rsp)
>>          movb    %bl, 1(%rsp)
>>          movzwl  (%rsp), %eax
>>          xorw    16(%rsp), %ax
>>          movzbl  2(%rsp), %ecx
>>          xorb    18(%rsp), %cl
>>          movzbl  %cl, %ecx
>>          orw     %ax, %cx
>>          jne     .LBB0_3
>> # %bb.2:                                #   in Loop: Header=BB0_1 Depth=1
>>          callq   abort
>>          jmp     .LBB0_3
>> .Lfunc_end0:
>>          .size   _ada_c26006a, .Lfunc_end0-_ada_c26006a
>>          .cfi_endproc
>>                                          # -- End function
>>          .section        ".note.GNU-stack","", at progbits
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>


More information about the llvm-dev mailing list