[LLVMbugs] [Bug 9443] New: MergeBasicBlockIntoOnlyPred() and MergeBlockIntoPredecessor() should be merged.

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Mar 9 13:30:34 PST 2011


           Summary: MergeBasicBlockIntoOnlyPred() and
                    MergeBlockIntoPredecessor() should be merged.
           Product: new-bugs
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: fvbommel at gmail.com
                CC: llvmbugs at cs.uiuc.edu

Transforms/Utils/Local.cpp has a function MergeBasicBlockIntoOnlyPred(), and
Transforms/Utils/BasicBlockUtils.cpp has one named MergeBlockIntoPredecessor().
These two functions perform *very* similar jobs, but do so in different ways:

MergeBasicBlockIntoOnlyPred() assumes the transform is valid, while
MergeBlockIntoPredecessor() checks and returns false if it can't do anything.

MergeBasicBlockIntoOnlyPred() moves instructions from the predecessor to the
successor, MergeBlockIntoPredecessor() moves them the other way around.

They both remove the PHIs in the successor block, but
MergeBasicBlockIntoOnlyPred() does this ad-hoc while
MergeBlockIntoPredecessor() calls FoldSingleEntryPHINodes() (which also updates
AliasAnalysis and MemoryDepencenceAnalysis).

MergeBasicBlockIntoOnlyPred() handles successors with blockaddresses pointing
at it, MergeBlockIntoPredecessor() doesn't.

They both update the DominatorTree, but MergeBasicBlockIntoOnlyPred() also
updates ProfileInfo. MergeBlockIntoPredecessor() on the other hand also updates
LoopInfo and MemoryDependenceAnalysis.

IMHO these two functions should be merged somehow. (possibly by having
MergeBlockIntoPredecessor() keep performing the initial checks and calling
MergeBasicBlockIntoOnlyPred() to do the actual work)
It seems to me that besides just cleaning things up, they can both be improved
by incorporating features from the other one.

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