Skip to content
  1. May 19, 2012
  2. Apr 03, 2012
  3. Mar 04, 2012
  4. Feb 21, 2012
    • Andrew Trick's avatar
      Clear virtual registers after they are no longer referenced. · da84e646
      Andrew Trick authored
      Passes after RegAlloc should be able to rely on MRI->getNumVirtRegs() == 0.
      This makes sharing code for pre/postRA passes more robust.
      Now, to check if a pass is running before the RA pipeline begins, use MRI->isSSA().
      To check if a pass is running after the RA pipeline ends, use !MRI->getNumVirtRegs().
      
      PEI resets virtual regs when it's done scavenging.
      
      PTX will either have to provide its own PEI pass or assign physregs.
      
      llvm-svn: 151032
      da84e646
  5. Feb 15, 2012
  6. Feb 11, 2012
  7. Feb 10, 2012
    • Jakob Stoklund Olesen's avatar
      Add register mask support to InterferenceCache. · a16ae597
      Jakob Stoklund Olesen authored
      This makes global live range splitting behave identically with and
      without register mask operands.
      
      This is not necessarily the best way of using register masks for live
      range splitting.  It would be more efficient to first split global live
      ranges around calls (i.e., register masks), and reserve the fine grained
      per-physreg interference guidance for global live ranges that do not
      cross calls.
      
      For now the goal is to produce identical assembly when enabling register
      masks.
      
      llvm-svn: 150259
      a16ae597
    • Andrew Trick's avatar
      RegAlloc superpass: includes phi elimination, coalescing, and scheduling. · d3f8fe81
      Andrew Trick authored
      Creates a configurable regalloc pipeline.
      
      Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.
      
      When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.
      
      CodeGen transformation passes are never "required" as an analysis
      
      ProcessImplicitDefs does not require LiveVariables.
      
      We have a plan to massively simplify some of the early passes within the regalloc superpass.
      
      llvm-svn: 150226
      d3f8fe81
  8. Feb 09, 2012
  9. Jan 17, 2012
  10. Jan 13, 2012
  11. Jan 12, 2012
  12. Nov 13, 2011
  13. Nov 01, 2011
  14. Sep 14, 2011
  15. Sep 12, 2011
    • Jakob Stoklund Olesen's avatar
      Remove the -compact-regions flag. · 45df7e0f
      Jakob Stoklund Olesen authored
      It has been enabled by default for a while, it was only there to allow
      performance comparisons.
      
      llvm-svn: 139501
      45df7e0f
    • Jakob Stoklund Olesen's avatar
      Add an interface for SplitKit complement spill modes. · eecb2fb1
      Jakob Stoklund Olesen authored
      SplitKit always computes a complement live range to cover the places
      where the original live range was live, but no explicit region has been
      allocated.
      
      Currently, the complement live range is created to be as small as
      possible - it never overlaps any of the regions.  This minimizes
      register pressure, but if the complement is going to be spilled anyway,
      that is not very important.  The spiller will eliminate redundant
      spills, and hoist others by making the spill slot live range overlap
      some of the regions created by splitting.  Stack slots are cheap.
      
      This patch adds the interface to enable spill modes in SplitKit.  In
      spill mode, SplitKit will assume that the complement is going to spill,
      so it will allow it to overlap regions in order to avoid back-copies.
      By doing some of the spiller's work early, the complement live range
      becomes simpler.  In some cases, it can become much simpler because no
      extra PHI-defs are required.  This will speed up both splitting and
      spilling.
      
      This is only the interface to enable spill modes, no implementation yet.
      
      llvm-svn: 139500
      eecb2fb1
  16. Aug 19, 2011
  17. Aug 09, 2011
  18. Aug 06, 2011
  19. Aug 04, 2011
    • Jakob Stoklund Olesen's avatar
      Enable compact region splitting by default. · 11b788d5
      Jakob Stoklund Olesen authored
      This helps generate better code in functions with high register
      pressure.
      
      The previous version of compact region splitting caused regressions
      because the regions were a bit too large. A stronger negative bias
      applied in r136832 fixed this problem.
      
      llvm-svn: 136836
      11b788d5
    • Jakob Stoklund Olesen's avatar
      Be more conservative when forming compact regions. · 86954520
      Jakob Stoklund Olesen authored
      Apply twice the negative bias on transparent blocks when computing the
      compact regions. This excludes loop backedges from the region when only
      one of the loop blocks uses the register.
      
      Previously, we would include the backedge in the region if the loop
      preheader and the loop latch both used the register, but the loop header
      didn't.
      
      When both the header and latch blocks use the register, we still keep it
      live on the backedge.
      
      llvm-svn: 136832
      86954520
    • Chandler Carruth's avatar
      Fix some warnings from Clang in release builds: · 77eb5a0a
      Chandler Carruth authored
      lib/CodeGen/RegAllocGreedy.cpp:1176:18: warning: unused variable 'B' [-Wunused-variable]
          if (unsigned B = Cand.getBundles(BundleCand, BestCand)) {
                       ^
      lib/CodeGen/RegAllocGreedy.cpp:1188:18: warning: unused variable 'B' [-Wunused-variable]
          if (unsigned B = Cand.getBundles(BundleCand, 0)) {
                       ^
      
      llvm-svn: 136831
      77eb5a0a
  20. Aug 03, 2011
  21. Jul 31, 2011
  22. Jul 30, 2011
  23. Jul 28, 2011
    • Jakob Stoklund Olesen's avatar
      Reverse order of RS_Split live ranges under -compact-regions. · cad845f4
      Jakob Stoklund Olesen authored
      There are two conflicting strategies in play:
      
      - Under high register pressure, we want to assign large live ranges
        first. Smaller live ranges are easier to place afterwards.
      
      - Live range splitting is guided by interference, so splitting should be
        deferred until interference is as realistic as possible.
      
      With the recent changes to the live range stages, and with compact
      regions enabled, it is less traumatic to split a live range too early.
      If some of the split products were too big, they can often be split
      again.
      
      By reversing the RS_Split order, we get this queue order:
      
      1. Normal live ranges, large to small.
      2. RS_Split live ranges, large to small.
      
      The large-to-small order improves RAGreedy's puzzle solving skills under
      high register pressure. It may cause a bit more iterated splitting, but
      we handle that better now.
      
      With this change, -compact-regions is mostly an improvement on SPEC.
      
      llvm-svn: 136388
      cad845f4
Loading