[PATCH] D133926: [DebugInfo] Allow non-stack_value variadic expressions and use in DBG_INSTR_REF
Stephen Tozer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 6 05:37:31 PDT 2022
StephenTozer added inline comments.
================
Comment at: llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:1140-1145
+ if (Expr->getNumElements() && Expr->isSingleLocationExpression() &&
+ Expr->expr_op_begin()->getOp() == dwarf::DW_OP_LLVM_arg) {
+ SmallVector<uint64_t> Ops(
+ make_range(Expr->elements_begin() + 2, Expr->elements_end()));
+ Expr = DIExpression::get(Expr->getContext(), Ops);
+ }
----------------
jmorse wrote:
> Just to check -- this is purely for printing the informative comments on assembly output, it isn't actually functional, yes?
Correct, this is just removing noise from the patch - even if it was an expression being used somewhere, it'd still have the same meaning either way, just formatted slightly differently.
================
Comment at: llvm/lib/IR/DebugInfoMetadata.cpp:1503-1511
+ // A DW_OP_stack_value comes at the end, but before a DW_OP_LLVM_fragment.
+ if (StackValue) {
+ if (Op.getOp() == dwarf::DW_OP_stack_value)
+ StackValue = false;
+ else if (Op.getOp() == dwarf::DW_OP_LLVM_fragment) {
+ NewOps.push_back(dwarf::DW_OP_stack_value);
+ StackValue = false;
----------------
jmorse wrote:
> Just to confirm, the reason why this wasn't present before was because all variadic expressions had to be stack_value, yes?
Correct - worth noting the only reason they "had" to be stack_value was because they're only naturally produced by salvaging operations that create stack_value expressions, not because there's some inherent incompatibility.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D133926/new/
https://reviews.llvm.org/D133926
More information about the llvm-commits
mailing list