Skip to content
  • Chandler Carruth's avatar
    [PM] Switch the downward invalidation to be incremental where only the · bceeb229
    Chandler Carruth authored
    one function's analyses are invalidated at a time. Also switch the
    preservation of the proxy to *fully* preserve the lower (function)
    analyses.
    
    Combined, this gets both upward and downward analysis invalidation to
    a point I'm happy with:
    
    - A function pass invalidates its function analyses, and its parent's
      module analyses.
    - A module pass invalidates all of its functions' analyses including the
      set of which functions are in the module.
    - A function pass can preserve a module analysis pass.
    - If all function passes preserve a module analysis pass, that
      preservation persists. If any doesn't the module analysis is
      invalidated.
    - A module pass can opt into managing *all* function analysis
      invalidation itself or *none*.
    - The conservative default is none, and the proxy takes the maximally
      conservative approach that works even if the set of functions has
      changed.
    - If a module pass opts into managing function analysis invalidation it
      has to propagate the invalidation itself, the proxy just does nothing.
    
    The only thing really missing is a way to query for a cached analysis or
    nothing at all. With this, function passes can more safely request
    a cached module analysis pass without fear of it accidentally running
    part way through.
    
    llvm-svn: 195519
    bceeb229
Loading