Skip to content
  • Chandler Carruth's avatar
    Rather than trying to use the loop block sequence *or* the function · 9b548a7f
    Chandler Carruth authored
    block sequence when recovering from unanalyzable control flow
    constructs, *always* use the function sequence. I'm not sure why I ever
    went down the path of trying to use the loop sequence, it is
    fundamentally not the correct sequence to use. We're trying to preserve
    the incoming layout in the cases of unreasonable control flow, and that
    is only encoded at the function level. We already have a filter to
    select *exactly* the sub-set of blocks within the function that we're
    trying to form into a chain.
    
    The resulting code layout is also significantly better because of this.
    In several places we were ending up with completely unreasonable control
    flow constructs due to the ordering chosen by the loop structure for its
    internal storage. This change removes a completely wasteful vector of
    basic blocks, saving memory allocation in the common case even though it
    costs us CPU in the fairly rare case of unnatural loops. Finally, it
    fixes the latest crasher reduced out of GCC's single source. Thanks
    again to Benjamin Kramer for the reduction, my bugpoint skills failed at
    it.
    
    llvm-svn: 144627
    9b548a7f
Loading