[LLVMbugs] [Bug 5374] New: DAG Combiner inserts illegal nodes.

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Nov 2 15:23:10 PST 2009


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

           Summary: DAG Combiner inserts illegal nodes.
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: tilmann.scheller at googlemail.com
                CC: llvmbugs at cs.uiuc.edu


TargetLowering::SimplifyDemandedBits() inserts nodes without checking whether
they are legal on the target or not.

I ran into this issue with a target which custom lowers srl.

E.g. on ppc32 the following LLVM IR:

define i32 @foo(i32 %A, i32 %B) {
bb0:
        %r1 = xor i32 %B, -1
        %r2 = and i32 %r1, %A
        %r3 = sub i32 %A, %B
        %r4 = or i32 %A, %r1
        %r5 = and i32 %r3, %r4
        %r6 = or i32 %r5, %r2
        %r7 = ashr i32 %r6, 31
        %r8 = and i32 %r7, 1
        %r9 = xor i32 %r7, -1
        %r10 = and i32 %r9, 0
        %r11 = or i32 %r10, %r8
        %r12 = and i32 %r11, 1  
        ret i32 %r12
}

triggers the following optimization:

...
Replacing.2 0x2c44030: i32 = sra 0x2c43e40, 0x2c43f38
With: 0x2c44318: i32 = srl 0x2c43e40, 0x2c43f38
...

On ppc32 this transformation is valid, however on targets where slr is custom
lowered it is not.

The optimization is done at line 1227 of TargetLowering.cpp.

It seems that SimplifyDemandedBits() never checks whether it is allowed to
insert a certain node, so there are possibly many other ways to trigger this
bug.


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