Skip to content
  1. Nov 13, 2013
    • Chandler Carruth's avatar
      Introduce an AnalysisManager which is like a pass manager but with a lot · 74015a70
      Chandler Carruth authored
      more smarts in it. This is where most of the interesting logic that used
      to live in the implicit-scheduling-hackery of the old pass manager will
      live.
      
      Like the previous commits, note that this is a very early prototype!
      I expect substantial changes before this is ready to use.
      
      The core of the design is the following:
      
      - We have an AnalysisManager which can be used across a series of
        passes over a module.
      - The code setting up a pass pipeline registers the analyses available
        with the manager.
      - Individual transform passes can check than an analysis manager
        provides the analyses they require in order to fail-fast.
      - There is *no* implicit registration or scheduling.
      - Analysis passes are different from other passes: they produce an
        analysis result that is cached and made available via the analysis
        manager.
      - Cached results are invalidated automatically by the pass managers.
      - When a transform pass requests an analysis result, either the analysis
        is run to produce the result or a cached result is provided.
      
      There are a few aspects of this design that I *know* will change in
      subsequent commits:
      - Currently there is no "preservation" system, that needs to be added.
      - All of the analysis management should move up to the analysis library.
      - The analysis management needs to support at least SCC passes. Maybe
        loop passes. Living in the analysis library will facilitate this.
      - Need support for analyses which are *both* module and function passes.
      - Need support for pro-actively running module analyses to have cached
        results within a function pass manager.
      - Need a clear design for "immutable" passes.
      - Need support for requesting cached results when available and not
        re-running the pass even if that would be necessary.
      - Need more thorough testing of all of this infrastructure.
      
      There are other aspects that I view as open questions I'm hoping to
      resolve as I iterate a bit on the infrastructure, and especially as
      I start writing actual passes against this.
      - Should we have separate management layers for function, module, and
        SCC analyses? I think "yes", but I'm not yet ready to switch the code.
        Adding SCC support will likely resolve this definitively.
      - How should the 'require' functionality work? Should *that* be the only
        way to request results to ensure that passes always require things?
      - How should preservation work?
      - Probably some other things I'm forgetting. =]
      
      Look forward to more patches in shorter order now that this is in place.
      
      llvm-svn: 194538
      74015a70
    • Nadav Rotem's avatar
      Update the docs to match the function name. · ea186b95
      Nadav Rotem authored
      llvm-svn: 194537
      ea186b95
    • Aaron Ballman's avatar
      Replacing HUGE_VALF with llvm::huge_valf in order to work around a warning triggered in MSVC 12. · 04999041
      Aaron Ballman authored
      Patch reviewed by Reid Kleckner and Jim Grosbach.
      
      llvm-svn: 194533
      04999041
    • Rafael Espindola's avatar
      Remove always true flag. · 6cd1b9ae
      Rafael Espindola authored
      llvm-svn: 194530
      6cd1b9ae
  2. Nov 12, 2013
  3. Nov 11, 2013
    • Andrew Trick's avatar
      Fix the recently added anyregcc convention to handle spilled operands. · a28099fd
      Andrew Trick authored
      Fixes <rdar://15432754> [JS] Assertion: "Folded a def to a non-store!"
      
      The primary purpose of anyregcc is to prevent a patchpoint's call
      arguments and return value from being spilled. They must be available
      in a register, although the calling convention does not pin the
      register. It's up to the front end to avoid using this convention for
      calls with more arguments than allocatable registers.
      
      llvm-svn: 194428
      a28099fd
    • Andrew Trick's avatar
      Print new JavaScript calling conventions symbolically. · 5ae6ed88
      Andrew Trick authored
      llvm-svn: 194427
      5ae6ed88
    • Vincent Lejeune's avatar
      R600: Use function inputs to represent data stored in gpr · f143af3f
      Vincent Lejeune authored
      llvm-svn: 194425
      f143af3f
    • Shuxin Yang's avatar
      Fix PR17952. · 3168ab33
      Shuxin Yang authored
        The symptom is that an assertion is triggered. The assertion was added by
      me to detect the situation when value is propagated from dead blocks.
      (We can certainly get rid of assertion; it is safe to do so, because propagating
       value from dead block to alive join node is certainly ok.)
      
        The root cause of this bug is : edge-splitting is conducted on the fly,
      the edge being split could be a dead edge, therefore the block that 
      split the critial edge needs to be flagged "dead" as well.
      
        There are 3 ways to fix this bug:
        1) Get rid of the assertion as I mentioned eariler 
        2) When an dead edge is split, flag the inserted block "dead".
        3) proactively split the critical edges connecting dead and live blocks when
           new dead blocks are revealed.
      
        This fix go for 3) with additional 2 LOC.
      
        Testing case was added by Rafael the other day.
      
      llvm-svn: 194424
      3168ab33
    • Akira Hatanaka's avatar
      [mips] Partially revert r193641. Stack alignment should not be determined by · 8f1caeb0
      Akira Hatanaka authored
      the floating point register mode.
       
      
      llvm-svn: 194423
      8f1caeb0
Loading