[LLVMbugs] [Bug 1735] New: deadargelim changes result of function call

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Wed Oct 17 07:45:00 PDT 2007


           Summary: deadargelim changes result of function call
           Product: libraries
           Version: 2.0
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Interprocedural Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jay.foad at antixlabs.com
                CC: llvmbugs at cs.uiuc.edu

Created an attachment (id=1165)
 --> (http://llvm.org/bugs/attachment.cgi?id=1165)
bitcode for test case

In the attached bitcode file, main() calls f() and checks the result:

        %tmp38 = call i32 ([...])* @f( [...] )            ; <i32> [#uses=1]
        %tmp39 = icmp eq i32 %tmp38, 4660               ; <i1> [#uses=1]

If I run it through "opt -f -o post.o pre.o -deadargelim", this has changed to:

        %tmp38 = call i32 @f( [...] )          ; <i32> [#uses=0]
        %tmp39 = icmp eq i32 0, 4660            ; <i1> [#uses=1]

The use of %tmp38 has been replaced with 0. But f() doesn't return 0, it
returns 4660:

        store i32 4660, i32* %pb_addr
        %retval20 = bitcast i32* %retval to {  }*               ; <{  }*>
        %tmp22 = load i32* %pb_addr             ; <i32> [#uses=2]
        store i32 %tmp22, i32* %retval
        ret i32 %tmp22

So why has the result of the call been replaced with 0?

This code is taken from gcc.c-torture/execute/20030914-2.c in the gcc

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