https://bugs.llvm.org/show_bug.cgi?id=35087

            Bug ID: 35087
           Summary: Compiler transforming loop into an infinite loop when
                    optimizations are enabled after r316208
           Product: new-bugs
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: unassignedb...@nondot.org
          Reporter: douglas_y...@playstation.sony.com
                CC: llvm-bugs@lists.llvm.org

Recently IR Value Tracking was enabled by default in the compiler with r316208,
and in one of our tests, we noticed that after this commit, when optimizations
are enabled, the compiler is transforming a loop into an infinite loop.

Consider the following code repro.cpp:

extern void bar( int );

void foo() {
  for ( int x = 0x7ffffff0; x != -0x7ffffff0; ++x )
    bar( x );
}

When compiled using -O2 and a compiler built from r316207, the following x86
assembly is generated for the loop (it is fully unrolled):

        pushq   %rax
        .cfi_def_cfa_offset 16
        movl    $2147483632, %edi       # imm = 0x7FFFFFF0
        callq   _Z3bari
        movl    $2147483633, %edi       # imm = 0x7FFFFFF1
        callq   _Z3bari

        ...

        movl    $-2147483634, %edi      # imm = 0x8000000E
        callq   _Z3bari
        movl    $-2147483633, %edi      # imm = 0x8000000F
        popq    %rax
        jmp     _Z3bari                 # TAILCALL

When compiled using -O2 and a compiler built from r316208, the following code
is generated instead for the loop:

        movl    $2147483632, %ebx       # imm = 0x7FFFFFF0
        .p2align        4, 0x90
.LBB0_1:                                # %for.cond
                                        # =>This Inner Loop Header: Depth=1
        movl    %ebx, %edi
        callq   _Z3bari
        addl    $1, %ebx
        jmp     .LBB0_1

As can be seen, the compiler transformed the loop into an infinite loop.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to