summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/CodeGen/TargetInstrInfo.cpp6
-rw-r--r--llvm/test/DebugInfo/MIR/X86/dbg-call-site-spilled-arg.mir2
2 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/TargetInstrInfo.cpp b/llvm/lib/CodeGen/TargetInstrInfo.cpp
index 2b987dabd24..d7a02eb61a2 100644
--- a/llvm/lib/CodeGen/TargetInstrInfo.cpp
+++ b/llvm/lib/CodeGen/TargetInstrInfo.cpp
@@ -1150,7 +1150,11 @@ TargetInstrInfo::describeLoadedValue(const MachineInstr &MI) const {
if (!TII->getMemOperandWithOffset(MI, BaseOp, Offset, TRI))
return None;
- Expr = DIExpression::prepend(Expr, DIExpression::DerefAfter, Offset);
+ SmallVector<uint64_t, 8> Ops;
+ DIExpression::appendOffset(Ops, Offset);
+ Ops.push_back(dwarf::DW_OP_deref_size);
+ Ops.push_back(MMO->getSize());
+ Expr = DIExpression::prependOpcodes(Expr, Ops);
return ParamLoadedValue(*BaseOp, Expr);
}
diff --git a/llvm/test/DebugInfo/MIR/X86/dbg-call-site-spilled-arg.mir b/llvm/test/DebugInfo/MIR/X86/dbg-call-site-spilled-arg.mir
index 26ea062c499..373b484850a 100644
--- a/llvm/test/DebugInfo/MIR/X86/dbg-call-site-spilled-arg.mir
+++ b/llvm/test/DebugInfo/MIR/X86/dbg-call-site-spilled-arg.mir
@@ -22,7 +22,7 @@
# CHECK-LABEL: DW_TAG_call_site_parameter
# CHECK-NEXT: DW_AT_location (DW_OP_reg5 RDI)
-# CHECK-NEXT: DW_AT_call_value (DW_OP_fbreg -44, DW_OP_deref)
+# CHECK-NEXT: DW_AT_call_value (DW_OP_fbreg -44, DW_OP_deref_size 0x4)
--- |
; ModuleID = 'spill.cc'
OpenPOWER on IntegriCloud