• Keith Randall's avatar
    [dev.ssa] cmd/compile/internal/ssa: simplify how exit blocks are used · f5c53e0d
    Keith Randall authored
    Move to implicit (mostly) instead of explicit exit blocks.
    RET and RETJMP have no outgoing edges - they implicitly exit.
    CALL only has one outgoing edge, as its exception edge is
    implicit as well.
    Exit blocks are only used for unconditionally panicking code,
    like the failed branches of nil and bounds checks.
    
    There may now be more than one exit block.  No merges happen
    at exit blocks.
    
    The only downside is it is harder to find all the places code
    can exit the method.  See the reverse dominator code for an
    example.
    
    Change-Id: I42e2fd809a4bf81301ab993e29ad9f203ce48eb0
    Reviewed-on: https://go-review.googlesource.com/14462Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
    f5c53e0d
critical.go 965 Bytes