d05e1bb Merging r293273:

Authored and Committed by Hans Wennborg 7 years ago
    Merging r293273:
    ------------------------------------------------------------------------
    r293273 | chandlerc | 2017-01-27 02:27:32 -0800 (Fri, 27 Jan 2017) | 19 lines
    
    [LICM] When we are recomputing the alias sets for a subloop, we cannot
    skip sub-subloops.
    
    The logic to skip subloops dated from when this code was shared with the
    cached case. Once it was factored out to only run in the case of
    recomputed subloops it became a dangerous bug. If a subsubloop contained
    an interfering instruction it would be silently skipped from the alias
    sets for LICM.
    
    With the old pass manager this was extremely hard to trigger as it would
    require failing to visit these subloops with the LICM pass but then
    visiting the outer loop somehow. I've not yet contrived any test case
    that actually manages to trigger this.
    
    But with the new pass manager we don't do the cross-loop caching hack
    that the old PM does and so we recompute alias set information from
    first principles. While this seems much cleaner and simpler it exposed
    this bug and would subtly miscompile code due to failing to correctly
    model the aliasing constraints of deeply nested loops.
    ------------------------------------------------------------------------
    
    llvm-svn: 295748