[PATCH] D76145: [DebugInfo] Introduce a DW_OP_LLVM_convert_generic operation
David Stenberg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 13 10:44:29 PDT 2020
dstenb created this revision.
dstenb added reviewers: aprantl, markus, vsk, dblaikie.
dstenb added a project: debug-info.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
dstenb added a parent revision: D76142: [DebugInfo] Handle generic type DW_OP_convert ops in dsymutil.
DW_OP_LLVM_convert is used to do sign- and zero extensions in
DIExpressions. When using DWARFv5, that LLVM operation is translated
into DWARFv5's DW_OP_convert operation.
DWARFv5 section 2.5.1.4 specifies the following for arithmetical and
logical operations:
"Operands of an operation with two operands must have the same type,
either the same base type or the generic type."
So when we have used DW_OP_LLVM_convert in an expression, we need to
make sure that any arithmetical and logical operations operating on that
element have operands of the same type. As we currently don't have a
good interface for detecting what type is on top of the stack, and we
add arithmetical and logical operations, e.g. appending expressions like
{DW_OP_constu 1, DW_OP_plus}, in many places, this patch attempts to
alleviate such cases by introduced a new operation,
DW_OP_LLVM_convert_generic, which converts the top of the stack back to
the generic type.
At least initially, I think we should use this operation after each
sign- and zero extension done using DW_OP_LLVM_convert, until we are
more type aware on the stack. That is done in a follow-up patch.
I added a new operation rather than making DW_OP_LLVM_convert having a
special mode that converts to the generic type, e.g. when the size
operand is 0, as I thought this would be clearer.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D76145
Files:
llvm/docs/LangRef.rst
llvm/include/llvm/BinaryFormat/Dwarf.h
llvm/lib/BinaryFormat/Dwarf.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp
llvm/lib/IR/DebugInfoMetadata.cpp
llvm/test/Assembler/diexpression.ll
llvm/test/DebugInfo/X86/convert-generic.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76145.250254.patch
Type: text/x-patch
Size: 8169 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200313/bd6f8a79/attachment.bin>
More information about the llvm-commits
mailing list