Skip to content
  1. Jun 17, 2020
    • 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