[LLVMbugs] [Bug 2002] New: Incorrect iteration count for loop with signed ICMP condition

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Sat Feb 9 13:13:27 PST 2008


           Summary: Incorrect iteration count for loop with signed ICMP
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: miscompilation
          Severity: normal
          Priority: P2
         Component: Global Analyses
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: wmatyjewicz at fastmail.fm
                CC: nicholas at mxc.ca, llvmbugs at cs.uiuc.edu

For the following LLVM code:

define void @foo(i8 signext %n) {
        br label %header
        %i = phi i8 [ -100, %entry ], [ %i.inc, %next ]
        %cond = icmp slt i8 %i, %n
        br i1 %cond, label %next, label %return
        %i.inc = add i8 %i, 1
        br label %header
        ret void

which more or less represents this high-level loop:

char n = ...;
for (char i = -100; i < n; ++i)

scalar evolution determines loop iteration count as: ( 0 smax ( 100 +  %n)).

In my opinion this is incorrect. Suppose, %n=100. Then 100 + %n becomes -56
(unsigned 200) and loop iteration count is evaluated to 0.

If someone confirm the bug, I'll try to fix it.

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list