Skip to content
  1. Jun 24, 2012
  2. Jun 21, 2012
  3. Jun 09, 2012
    • Jakob Stoklund Olesen's avatar
      Sketch a LiveRegMatrix analysis pass. · c26fbbfb
      Jakob Stoklund Olesen authored
      The LiveRegMatrix represents the live range of assigned virtual
      registers in a Live interval union per register unit. This is not
      fundamentally different from the interference tracking in RegAllocBase
      that both RABasic and RAGreedy use.
      
      The important differences are:
      
      - LiveRegMatrix tracks interference per register unit instead of per
        physical register. This makes interference checks cheaper and
        assignments slightly more expensive. For example, the ARM D7 reigster
        has 24 aliases, so we would check 24 physregs before assigning to one.
        With unit-based interference, we check 2 units before assigning to 2
        units.
      
      - LiveRegMatrix caches regmask interference checks. That is currently
        duplicated functionality in RABasic and RAGreedy.
      
      - LiveRegMatrix is a pass which makes it possible to insert
        target-dependent passes between register allocation and rewriting.
        Such passes could tweak the register assignments with interference
        checking support from LiveRegMatrix.
      
      Eventually, RABasic and RAGreedy will be switched to LiveRegMatrix.
      
      llvm-svn: 158255
      c26fbbfb
  4. Apr 24, 2012
  5. Mar 07, 2012
  6. Jan 13, 2012
  7. Jan 11, 2012
  8. Jan 07, 2012
    • Evan Cheng's avatar
      Added a late machine instruction copy propagation pass. This catches · 00b1a3cd
      Evan Cheng authored
      opportunities that only present themselves after late optimizations
      such as tail duplication .e.g.
      ## BB#1:
              movl    %eax, %ecx
              movl    %ecx, %eax
              ret
      
      The register allocator also leaves some of them around (due to false
      dep between copies from phi-elimination, etc.)
      
      This required some changes in codegen passes. Post-ra scheduler and the
      pseudo-instruction expansion passes have been moved after branch folding
      and tail merging. They were before branch folding before because it did
      not always update block livein's. That's fixed now. The pass change makes
      independently since we want to properly schedule instructions after
      branch folding / tail duplication.
      
      rdar://10428165
      rdar://10640363
      
      llvm-svn: 147716
      00b1a3cd
  9. Jan 05, 2012
  10. Dec 20, 2011
  11. Dec 15, 2011
  12. Dec 14, 2011
  13. Dec 06, 2011
  14. Dec 01, 2011
  15. Nov 29, 2011
  16. Nov 13, 2011
  17. Nov 12, 2011
  18. Oct 21, 2011
    • Chandler Carruth's avatar
      Implement a block placement pass based on the branch probability and · 10281425
      Chandler Carruth authored
      block frequency analyses. This differs substantially from the existing
      block-placement pass in LLVM:
      
      1) It operates on the Machine-IR in the CodeGen layer. This exposes much
         more (and more precise) information and opportunities. Also, the
         results are more stable due to fewer transforms ocurring after the
         pass runs.
      2) It uses the generalized probability and frequency analyses. These can
         model static heuristics, code annotation derived heuristics as well
         as eventual profile loading. By basing the optimization on the
         analysis interface it can work from any (or a combination) of these
         inputs.
      3) It uses a more aggressive algorithm, both building chains from tho
         bottom up to maximize benefit, and using an SCC-based walk to layout
         chains of blocks in a profitable ordering without O(N^2) iterations
         which the old pass involves.
      
      The pass is currently gated behind a flag, and not enabled by default
      because it still needs to grow some important features. Most notably, it
      needs to support loop aligning and careful layout of loop structures
      much as done by hand currently in CodePlacementOpt. Once it supports
      these, and has sufficient testing and quality tuning, it should replace
      both of these passes.
      
      Thanks to Nick Lewycky and Richard Smith for help authoring & debugging
      this, and to Jakob, Andy, Eric, Jim, and probably a few others I'm
      forgetting for reviewing and answering all my questions. Writing
      a backend pass is *sooo* much better now than it used to be. =D
      
      llvm-svn: 142641
      10281425
  19. Sep 28, 2011
  20. Sep 25, 2011
    • Jakob Stoklund Olesen's avatar
      Rename LowerSubregs to ExpandPostRAPseudos. · f152df1e
      Jakob Stoklund Olesen authored
      I'll fix the file contents in the next commit.
      
      This pass is currently expanding the COPY and SUBREG_TO_REG pseudos. I
      am going to add a hook so targets can expand more pseudo-instructions
      after register allocation.
      
      Many targets have pseudo-instructions that assist the register
      allocator.  They can be expanded after register allocation, before PEI
      and PostRA scheduling.
      
      llvm-svn: 140469
      f152df1e
  21. Sep 13, 2011
  22. Aug 10, 2011
  23. Jul 29, 2011
    • Chandler Carruth's avatar
      Rewrite the CMake build to use explicit dependencies between libraries, · 9d7feab3
      Chandler Carruth authored
      specified in the same file that the library itself is created. This is
      more idiomatic for CMake builds, and also allows us to correctly specify
      dependencies that are missed due to bugs in the GenLibDeps perl script,
      or change from compiler to compiler. On Linux, this returns CMake to
      a place where it can relably rebuild several targets of LLVM.
      
      I have tried not to change the dependencies from the ones in the current
      auto-generated file. The only places I've really diverged are in places
      where I was seeing link failures, and added a dependency. The goal of
      this patch is not to start changing the dependencies, merely to move
      them into the correct location, and an explicit form that we can control
      and change when necessary.
      
      This also removes a serialization point in the build because we don't
      have to scan all the libraries before we begin building various tools.
      We no longer have a step of the build that regenerates a file inside the
      source tree. A few other associated cleanups fall out of this.
      
      This isn't really finished yet though. After talking to dgregor he urged
      switching to a single CMake macro to construct libraries with both
      sources and dependencies in the arguments. Migrating from the two macros
      to that style will be a follow-up patch.
      
      Also, llvm-config is still generated with GenLibDeps.pl, which means it
      still has slightly buggy dependencies. The internal CMake
      'llvm-config-like' macro uses the correct explicitly specified
      dependencies however. A future patch will switch llvm-config generation
      (when using CMake) to be based on these deps as well.
      
      This may well break Windows. I'm getting a machine set up now to dig
      into any failures there. If anyone can chime in with problems they see
      or ideas of how to solve them for Windows, much appreciated.
      
      llvm-svn: 136433
      9d7feab3
  24. Jul 25, 2011
  25. Jul 16, 2011
  26. Jun 28, 2011
  27. Jun 27, 2011
  28. Jun 16, 2011
  29. Jun 02, 2011
    • Jakob Stoklund Olesen's avatar
      Add a RegisterClassInfo class that lazily caches information about · c58894bc
      Jakob Stoklund Olesen authored
      register classes.
      
      It provides information for each register class that cannot be
      determined statically, like:
      
      - The number of allocatable registers in a class after filtering out the
        reserved and invalid registers.
      
      - The preferred allocation order with registers that overlap callee-saved
        registers last.
      
      - The last callee-saved register that overlaps a given physical register.
      
      This information usually doesn't change between functions, so it is
      reused for compiling multiple functions when possible.  The many
      possible combinations of reserved and callee saves registers makes it
      unfeasible to compute this information statically in TableGen.
      
      Use RegisterClassInfo to count available registers in various heuristics
      in SimpleRegisterCoalescing, making the pass run 4% faster.
      
      llvm-svn: 132450
      c58894bc
  30. Apr 02, 2011
  31. Feb 18, 2011
  32. Jan 09, 2011
  33. Jan 06, 2011
    • Jakob Stoklund Olesen's avatar
      Add the SpillPlacement analysis pass. · 8e236eac
      Jakob Stoklund Olesen authored
      This pass precomputes CFG block frequency information that can be used by the
      register allocator to find optimal spill code placement.
      
      Given an interference pattern, placeSpills() will compute which basic blocks
      should have the current variable enter or exit in a register, and which blocks
      prefer the stack.
      
      The algorithm is ready to consume block frequencies from profiling data, but for
      now it gets by with the static estimates used for spill weights.
      
      This is a work in progress and still not hooked up to RegAllocGreedy.
      
      llvm-svn: 122938
      8e236eac
  34. Jan 04, 2011
  35. Dec 16, 2010
    • Jakob Stoklund Olesen's avatar
      Add MachineLoopRanges analysis. · 5e977813
      Jakob Stoklund Olesen authored
      A MachineLoopRange contains the intervals of slot indexes covered by the blocks
      in a loop. This representation of the loop blocks is more efficient to compare
      against interfering registers during register coalescing.
      
      llvm-svn: 121917
      5e977813
  36. Dec 10, 2010
  37. Dec 08, 2010
  38. Dec 05, 2010
Loading