[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases
authorJames Molloy <james.molloy@arm.com>
Thu, 1 Sep 2016 07:45:25 +0000 (07:45 +0000)
committerJames Molloy <james.molloy@arm.com>
Thu, 1 Sep 2016 07:45:25 +0000 (07:45 +0000)
commite656642295cb7730e9b7d511ffc0b2402add3df7
treea84460eeeb1ab88fff20a3b5c002a196b5089592
parent2bbdeacf318bd24280d4943ce2311961febe17e3
[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases

A very important case is not handled here: multiple arcs to a single block with a PHI. Consider:

    a:
      %1 = icmp %b, 1
      br %1, label %c, label %e
    c:
      %2 = icmp %b, 2
      br %2, label %d, label %e
    d:
      br %e
    e:
      phi [0, %a], [1, %c], [2, %d]

FoldValueComparisonIntoPredecessors will refuse to fold this, as it doesn't know how to deal with two arcs to a common destination with different PHI values. The answer is obvious - just split all conflicting arcs.

llvm-svn: 280338
llvm/lib/Transforms/Utils/SimplifyCFG.cpp