Skip to content
  1. Jun 17, 2013
    • Benjamin Kramer's avatar
      Switch spill weights from a basic loop depth estimation to BlockFrequencyInfo. · e2a1d89e
      Benjamin Kramer authored
      The main advantages here are way better heuristics, taking into account not
      just loop depth but also __builtin_expect and other static heuristics and will
      eventually learn how to use profile info. Most of the work in this patch is
      pushing the MachineBlockFrequencyInfo analysis into the right places.
      
      This is good for a 5% speedup on zlib's deflate (x86_64), there were some very
      unfortunate spilling decisions in its hottest loop in longest_match(). Other
      benchmarks I tried were mostly neutral.
      
      This changes register allocation in subtle ways, update the tests for it.
      2012-02-20-MachineCPBug.ll was deleted as it's very fragile and the instruction
      it looked for was gone already (but the FileCheck pattern picked up unrelated
      stuff).
      
      llvm-svn: 184105
      e2a1d89e
  2. May 23, 2013
  3. Mar 08, 2013
  4. Feb 23, 2013
  5. Feb 20, 2013
  6. Feb 17, 2013
  7. Feb 09, 2013
  8. Jan 02, 2013
    • Chandler Carruth's avatar
      Move all of the header files which are involved in modelling the LLVM IR · 9fb823bb
      Chandler Carruth authored
      into their new header subdirectory: include/llvm/IR. This matches the
      directory structure of lib, and begins to correct a long standing point
      of file layout clutter in LLVM.
      
      There are still more header files to move here, but I wanted to handle
      them in separate commits to make tracking what files make sense at each
      layer easier.
      
      The only really questionable files here are the target intrinsic
      tablegen files. But that's a battle I'd rather not fight today.
      
      I've updated both CMake and Makefile build systems (I think, and my
      tests think, but I may have missed something).
      
      I've also re-sorted the includes throughout the project. I'll be
      committing updates to Clang, DragonEgg, and Polly momentarily.
      
      llvm-svn: 171366
      9fb823bb
  9. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  10. Dec 01, 2012
  11. Nov 28, 2012
    • Jakob Stoklund Olesen's avatar
      Make the LiveRegMatrix analysis available to targets. · 26c9d70d
      Jakob Stoklund Olesen authored
      No functional change, just moved header files.
      
      Targets can inject custom passes between register allocation and
      rewriting. This makes it possible to tweak the register allocation
      before rewriting, using the full global interference checking available
      from LiveRegMatrix.
      
      llvm-svn: 168806
      26c9d70d
  12. Nov 09, 2012
  13. Oct 16, 2012
  14. Oct 13, 2012
    • Jakob Stoklund Olesen's avatar
      Allow for loops in LiveIntervals::pruneValue(). · 2f6dfc7d
      Jakob Stoklund Olesen authored
      It is possible that the live range of the value being pruned loops back
      into the kill MBB where the search started. When that happens, make sure
      that the beginning of KillMBB is also pruned.
      
      Instead of starting a DFS at KillMBB and skipping the root of the
      search, start a DFS at each KillMBB successor, and allow the search to
      loop back to KillMBB.
      
      This fixes PR14078.
      
      llvm-svn: 165872
      2f6dfc7d
  15. Oct 12, 2012
    • Jakob Stoklund Olesen's avatar
      Use a transposed algorithm for handleMove(). · 1a87a29d
      Jakob Stoklund Olesen authored
      Completely update one interval at a time instead of collecting live
      range fragments to be updated. This avoids building data structures,
      except for a single SmallPtrSet of updated intervals.
      
      Also share code between handleMove() and handleMoveIntoBundle().
      
      Add support for moving dead defs across other live values in the
      interval. The MI scheduler can do that.
      
      llvm-svn: 165824
      1a87a29d
  16. Oct 03, 2012
    • Jakob Stoklund Olesen's avatar
      Handle reserved registers more accurately in handleMove(). · c8e25d98
      Jakob Stoklund Olesen authored
      Reserved register live ranges look like a set of dead defs - any uses of
      reserved registers are ignored.
      
      Instead of skipping the updating of reserved register operands entirely,
      just ignore the use operands and treat the def operands normally.
      
      No test case, handleMove() is not commonly used yet.
      
      llvm-svn: 165060
      c8e25d98
  17. Sep 21, 2012
    • Jakob Stoklund Olesen's avatar
      Extend -new-coalescer SSA update to handle mapped values as well. · 09cd3036
      Jakob Stoklund Olesen authored
      The old-fashioned many-to-one value mapping doesn't always work when
      merging vector lanes. A value can map to multiple different values, and
      it can even be necessary to insert new PHIs.
      
      When a value number is defined by a copy from a value number that
      required SSa update, include the live range of the copied value number
      in the SSA update as well. It is not necessarily a copy of the original
      value number any longer.
      
      llvm-svn: 164329
      09cd3036
  18. Sep 18, 2012
    • Jakob Stoklund Olesen's avatar
      Merge into undefined lanes under -new-coalescer. · 0bb3dd78
      Jakob Stoklund Olesen authored
      Add LIS::pruneValue() and extendToIndices(). These two functions are
      used by the register coalescer when merging two live ranges requires
      more than a trivial value mapping as supported by LiveInterval::join().
      
      The pruneValue() function can remove the part of a value number that is
      going to conflict in join(). Afterwards, extendToIndices can restore the
      live range, using any new dominating value numbers and updating the SSA
      form.
      
      Use this complex value mapping to support merging a register into a
      vector lane that has a conflicting value, but the clobbered lane is
      undef.
      
      llvm-svn: 164074
      0bb3dd78
  19. Sep 12, 2012
  20. Sep 10, 2012
  21. Sep 06, 2012
  22. Sep 03, 2012
  23. Aug 22, 2012
  24. Aug 04, 2012
    • Jakob Stoklund Olesen's avatar
      Add an experimental -early-live-intervals option. · 1c465892
      Jakob Stoklund Olesen authored
      This option runs LiveIntervals before TwoAddressInstructionPass which
      will eventually learn to exploit and update the analysis.
      
      Eventually, LiveIntervals will run before PHIElimination, and we can get
      rid of LiveVariables.
      
      llvm-svn: 161270
      1c465892
  25. Aug 03, 2012
    • Jakob Stoklund Olesen's avatar
      Completely eliminate VNInfo flags. · daae19f7
      Jakob Stoklund Olesen authored
      The 'unused' state of a value number can be represented as an invalid
      def SlotIndex. This also exposed code that shouldn't have been looking
      at unused value VNInfos.
      
      llvm-svn: 161258
      daae19f7
    • Jakob Stoklund Olesen's avatar
      Eliminate the VNInfo::hasPHIKill() flag. · 9f565e19
      Jakob Stoklund Olesen authored
      The only real user of the flag was removeCopyByCommutingDef(), and it
      has been switched to LiveIntervals::hasPHIKill().
      
      All the code changed by this patch was only concerned with computing and
      propagating the flag.
      
      llvm-svn: 161255
      9f565e19
    • Jakob Stoklund Olesen's avatar
      Make the hasPHIKills flag a computed property. · 06d6a536
      Jakob Stoklund Olesen authored
      The VNInfo::HAS_PHI_KILL is only half supported. We precompute it in
      LiveIntervalAnalysis, but it isn't properly updated by live range
      splitting and functions like shrinkToUses().
      
      It is only used in one place: RegisterCoalescer::removeCopyByCommutingDef().
      
      This patch changes that function to use a new LiveIntervals::hasPHIKill()
      function that computes the flag for a given value number.
      
      llvm-svn: 161254
      06d6a536
  26. Jul 27, 2012
  27. Jun 22, 2012
Loading