[llvm-dev] Potentially unsafe loop optimization

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 17 17:01:30 PST 2021


I ran the IR through clang -O2 on godbolt and didn't get a return. So I
think something is happening in the middle end?

~Craig


On Wed, Feb 17, 2021 at 4:57 PM Johannes Doerfert <
johannesdoerfert at gmail.com> wrote:

> 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
> >>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210217/4e98f725/attachment.html>


More information about the llvm-dev mailing list