Skip to content
  • Nick Desaulniers's avatar
    BreakCriticalEdges for callbr indirect dests · 88c965ba
    Nick Desaulniers authored
    Summary:
    llvm::SplitEdge was failing an assertion that the BasicBlock only had
    one successor (for BasicBlocks terminated by CallBrInst, we typically
    have multiple successors).  It was surprising that the earlier call to
    SplitCriticalEdge did not handle the critical edge (there was an early
    return).  Removing that triggered another assertion relating to creating
    a BlockAddress for a BasicBlock that did not (yet) have a parent, which
    is a simple order of operations issue in llvm::SplitCriticalEdge (a
    freshly constructed BasicBlock must be inserted into a Function's basic
    block list to have a parent).
    
    Thanks to @nathanchance for the report.
    Fixes: https://github.com/ClangBuiltLinux/linux/issues/1018
    
    Reviewers: craig.topper, jyknight, void, fhahn, efriedma
    
    Reviewed By: efriedma
    
    Subscribers: eli.friedman, rnk, efriedma, fhahn, hiraditya, llvm-commits, nathanchance, srhines
    
    Tags: #llvm
    
    Differential Revision: https://reviews.llvm.org/D81607
    88c965ba
Loading