[LLVMbugs] [Bug 2669] New: Branch Folding pass leaves double unconditional branches to a BB.

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue Aug 12 04:58:27 PDT 2008


           Summary: Branch Folding pass leaves double unconditional branches
                    to a BB.
           Product: libraries
           Version: 2.3
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: hkultala at cs.tut.fi
                CC: llvmbugs at cs.uiuc.edu

BranchFolding::CanFallThru method documentation states:

"This should return false if it can reach the block after it, but it uses an
explicit branch to do so (e.g. a table jump)."

But in the method there is a code 

  // If there is some explicit branch to the fallthrough block, it can
  // reach, even though the branch should get folded to fall through
  if (MachineFunction::iterator(TBB) == Fallthrough ||
      MachineFunction::iterator(FBB) == Fallthrough) return true;

Which means it returns true where the documentation states it should return

This return value is later used at OptimizeBlock method

          if (CurFallsThru) {
            MachineBasicBlock *NextBB = next(MachineFunction::iterator(MBB));
            TII->InsertBranch(*MBB, NextBB, 0, CurCond);

So it inserts an additional unconditional branch instruction to the following
BB even though there can already be one unconditional branch instruction to

This is not just a performance problem because this also can make further
TargetInstrInfo::AnalyzeBranch and TargetInstrInfo::RemoveBranch calls fail.

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