Skip to content
  • Jeremy Morse's avatar
    [DebugInfo][InstrRef] Terminate overlapping variable fragments · 0eee8445
    Jeremy Morse authored
    If we have a variable where its fragments are split into overlapping
    segments:
    
        DBG_VALUE $ax, $noreg, !123, !DIExpression(DW_OP_LLVM_fragment_0, 16)
        ...
        DBG_VALUE $eax, $noreg, !123, !DIExpression(DW_OP_LLVM_fragment_0, 32)
    
    we should only propagate the most recently assigned fragment out of a
    block. LiveDebugValues only deals with live-in variable locations, as
    overlaps within blocks is DbgEntityHistoryCalculators domain.
    
    InstrRefBasedLDV has kept the accumulateFragmentMap method from
    VarLocBasedLDV, we just need it to recognise DBG_INSTR_REFs. Once it's
    produced a mapping of variable / fragments to the overlapped variable /
    fragments, VLocTracker uses it to identify when a debug instruction needs
    to terminate the other parts it overlaps with. The test is updated for
    some standard "InstrRef picks different registers" variation, and the
    order of some unrelated DBG_VALUEs changes.
    
    Differential Revision: https://reviews.llvm.org/D114603
    0eee8445
Loading