[LLVMbugs] [Bug 1872] New: SelectionDAG load / store CSE bug

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue Dec 18 11:16:21 PST 2007


http://llvm.org/bugs/show_bug.cgi?id=1872

           Summary: SelectionDAG load / store CSE bug
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: evan.cheng at apple.com
                CC: llvmbugs at cs.uiuc.edu


See PR1799. Using SrcValue to compute node id's means we can end up with
multiple identical load / store nodes with the only difference being the
SrcValue.

Test case:

target triple = "i686-pc-linux-gnu"
        %struct.c34007g__designated___XUB = type { i32, i32, i32, i32 }
        %struct.c34007g__pkg__parent = type { i32*,
%struct.c34007g__designated___XUB* }

define void @_ada_c34007g() {
entry:
        %x8 = alloca %struct.c34007g__pkg__parent, align 8              ;
<%struct.c34007g__pkg__parent*> [#uses=2]                                       
        %tmp1272 = getelementptr %struct.c34007g__pkg__parent* %x8, i32 0, i32
0                ; <i32**> [#uses=1]                                            
        %x82167 = bitcast %struct.c34007g__pkg__parent* %x8 to i64*            
; <i64*> [#uses=1]                                                              
        br i1 true, label %bb4668, label %bb848

bb4668:         ; preds = %bb4648                                               
        %tmp5464 = load i64* %x82167, align 8           ; <i64> [#uses=1]       
        %tmp5467 = icmp ne i64 0, %tmp5464              ; <i1> [#uses=1]        
        %tmp5470 = load i32** %tmp1272, align 8         ; <i32*> [#uses=1]      
        %tmp5471 = icmp eq i32* %tmp5470, null          ; <i1> [#uses=1]        
        %tmp5475 = or i1 %tmp5471, %tmp5467             ; <i1> [#uses=1]        
        %tmp5497 = or i1 %tmp5475, false                ; <i1> [#uses=1]        
        br i1 %tmp5497, label %bb848, label %bb5507

bb848:          ; preds = %entry                                                
        ret void

bb5507:         ; preds = %bb4668                                               
        ret void

}

This compiles to:

        .text
        .align  4,0x90
        .globl  __ada_c34007g
__ada_c34007g:
        subl    $12, %esp
LBB1_1: # bb4668
        movl    4(%esp), %eax
        movl    (%esp), %ecx
        cmpl    $0, (%esp)
        je      LBB1_3  # bb848
LBB1_2: # bb4668
        orl     %eax, %ecx
        testl   %ecx, %ecx
LBB1_3: # bb848
        addl    $12, %esp
        ret

Note it issues two loads from (%esp) (the second one is folded into the cmpl).


-- 
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