[LLVMbugs] [Bug 1879] New: Branch folding deficiency

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Dec 24 13:01:25 PST 2007


           Summary: Branch folding deficiency
           Product: libraries
           Version: 1.0
          Platform: PC
        OS/Version: All
            Status: NEW
          Keywords: code-quality
          Severity: minor
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: sabre at nondot.org
                CC: llvmbugs at cs.uiuc.edu

Ptrdist/ks contains this amusing code in its inner loop:

        movss   _cost(,%edx,4), %xmm1
LBB2_3: # bb
        je      LBB2_7  # bb41
LBB2_4: # bb32
        movaps  %xmm1, %xmm2
        addss   %xmm0, %xmm2
        cmpl    %ecx, 4(%esi)
        je      LBB2_6  # bb32
LBB2_5: # bb32
        movaps  %xmm0, %xmm2
LBB2_6: # bb32
        movaps  %xmm2, %xmm0
        movl    (%esi), %esi
        testl   %esi, %esi
        jmp     LBB2_3  # bb

The inner lop is BB3/4/5/6.  Note that BB6 contains an uncond branch *just* to
a cond branch.  It seems branch folding should duplicate the conditional branch
into the end of BB6.

The bigger issue with this code is that it contains a conditional add.  It is

    if ((*modNode).module == module)
        gain = gain + netCost;

Into a select:  cond ? (gain+netCost) : gain;

And then the select is turned into a conditional branch, and the add isn't sunk
into the conditional block.

To see this, plop this into the top of KS-2.c
float CAiBj(ModuleRecPtr mrA, ModuleRecPtr mrB) __attribute__((noinline));


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