Skip to content
  • 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
Loading