Skip to content
  1. Oct 20, 2021
    • Jeremy Morse's avatar
      [DebugInfo][InstrRef] Track a single variable at a time · 89950ade
      Jeremy Morse authored
      Here's another performance patch for InstrRefBasedLDV: rather than
      processing all variable values in a scope at a time, instead, process one
      variable at a time. The benefits are twofold:
       * It's easier to reason about one variable at a time in your mind,
       * It improves performance, apparently from increased locality.
      
      The downside is that the value-propagation code gets indented one level
      further, plus there's some churn in the unit tests.
      
      Differential Revision: https://reviews.llvm.org/D111799
      89950ade
  2. Oct 19, 2021
  3. Oct 14, 2021
    • Jeremy Morse's avatar
      [DebugInfo][InstrRef] Place variable-values PHI using LLVM utilities · b5426ced
      Jeremy Morse authored
      This patch is very similar to D110173 / a3936a6c, but for variable
      values rather than machine values. This is for the second instr-ref
      problem, calculating the correct variable value on entry to each block.
      The previous lattice based implementation was broken; we now use LLVMs
      existing PHI placement utilities to work out where values need to merge,
      then eliminate un-necessary ones through value propagation.
      
      Most of the deletions here happen in vlocJoin: it was trying to pick a
      location for PHIs to happen in, badly, leading to an infinite loop in the
      MIR test added, where it would repeatedly switch between register
      locations. The new approach is simpler: either PHIs can be eliminated, or
      they can't, and the location of the value is a different problem.
      
      Various bits and pieces move to the header so that they can be tested in
      the unit tests. The DbgValue class grows a "VPHI" kind to represent
      variable value PHIS that haven't been eliminated yet.
      
      Differential Revision: https://reviews.llvm.org/D110630
      b5426ced
  4. Oct 13, 2021
    • Jeremy Morse's avatar
      [DebugInfo][InstrRef] Only calculate IDF for reg units · fbf269c7
      Jeremy Morse authored
      In D110173 we start using the existing LLVM IDF calculator to place PHIs as
      we reconstruct an SSA form of machine-code program. Sadly that's slower
      than the old (but broken) way, this patch attempts to recover some of that
      performance.
      
      The key observation: every time we def a register, we also have to def it's
      register units. If we def'd $rax, in the current implementation we
      independently calculate PHI locations for {al, ah, ax, eax, hax, rax}, and
      they will all have the same PHI positions. Instead of doing that, we can
      calculate the PHI positions for {al, ah} and place PHIs for any aliasing
      registers in the same positions. Any def of a super-register has to def
      the unit, and vice versa, so this is sound. It cuts down the SSA placement
      we need to do significantly.
      
      This doesn't work for stack slots, or registers we only ever read, so place
      PHIs normally for those. LiveDebugValues choses to ignore writes to SP at
      calls, and now have to ignore writes to SP register units too.
      
      Differential Revision: https://reviews.llvm.org/D111627
      fbf269c7
    • Jeremy Morse's avatar
      [DebugInfo][InstrRef] Use PHI placement utilities for machine locations · a3936a6c
      Jeremy Morse authored
      InstrRefBasedLDV used to try and determine which values are in which
      registers using a lattice approach; however this is hard to understand, and
      broken in various ways. This patch replaces that approach with a standard
      SSA approach using existing LLVM utilities. PHIs are placed at dominance
      frontiers; value propagation then eliminates un-necessary PHIs.
      
      This patch also adds a bunch of unit tests that should cover many of the
      weirder forms of control flow.
      
      Differential Revision: https://reviews.llvm.org/D110173
      a3936a6c
  5. Oct 12, 2021
Loading