Index: llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp =================================================================== --- llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp +++ llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp @@ -553,8 +553,9 @@ unsigned Base = Loc.SpillLocation.SpillBase; auto *TRI = MF.getSubtarget().getRegisterInfo(); if (MI.isNonListDebugValue()) { + auto Deref = Indirect ? DIExpression::DerefAfter : 0; DIExpr = - TRI->prependOffsetExpression(DIExpr, DIExpression::ApplyOffset, + TRI->prependOffsetExpression(DIExpr, DIExpression::ApplyOffset | Deref, Loc.SpillLocation.SpillOffset); Indirect = true; } else { Index: llvm/test/DebugInfo/MIR/X86/live-debug-values-restore.mir =================================================================== --- llvm/test/DebugInfo/MIR/X86/live-debug-values-restore.mir +++ llvm/test/DebugInfo/MIR/X86/live-debug-values-restore.mir @@ -641,7 +641,7 @@ # CHECK-LABEL: bb.0.entry: # CHECK: DBG_VALUE $rdi, 0, ![[TVAR]], !DIExpression() # CHECK-LABEL: bb.1.if.then: -# CHECK: DBG_VALUE $rsp, 0, ![[TVAR]], !DIExpression(DW_OP_constu, 8, DW_OP_minus) +# CHECK: DBG_VALUE $rsp, 0, ![[TVAR]], !DIExpression(DW_OP_constu, 8, DW_OP_minus, DW_OP_deref) # CHECK: INLINEASM # CHECK: DBG_VALUE ${{[a-zA-Z0-9]+}}, 0, ![[TVAR]], !DIExpression() # CHECK-LABEL: bb.2.if.end