Skip to content
  • Florian Hahn's avatar
    [BreakCritEdges] Add option to opt-out of perserving loop-simplify. · 4495a6b1
    Florian Hahn authored
    This patch adds a new option to CriticalEdgeSplittingOptions to control
    whether loop-simplify form must be preserved. It is them used by GVN to
    indicate that loop-simplify form does not have to be preserved.
    
    This fixes a crash exposed by 189efe29.
    
    If the critical edge we are splitting goes from a block inside a loop to
    a block outside the loop, splitting the edge will create a new exit
    block. As a result, the new block will branch to the original exit
    block, which will add a non-loop predecessor, breaking loop-simplify
    form. To preserve loop-simplify form, the predecessor blocks of the
    original exit are split, but that does not work for blocks with
    indirectbr terminators. If preserving loop-simplify form is requested,
    bail out , before making any changes.
    
    Reviewers: reames, hfinkel, davide, efriedma
    
    Reviewed By: efriedma
    
    Differential Revision: https://reviews.llvm.org/D81582
    4495a6b1
Loading