+Adrian (please do include him in changes like this)<div><br></div><div>Needs test coverage at least. Adrian: any other concerns about adding new op types?<br><br><div class="gmail_quote"><div dir="ltr">On Tue, Feb 7, 2017, 12:20 PM Konstantin Zhuravlyov via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">kzhuravl created this revision.<br class="gmail_msg">
Herald added a subscriber: wdng.<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D29672" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D29672</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
docs/LangRef.rst<br class="gmail_msg">
lib/CodeGen/AsmPrinter/DwarfExpression.cpp<br class="gmail_msg">
lib/IR/DebugInfoMetadata.cpp<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: lib/IR/DebugInfoMetadata.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/IR/DebugInfoMetadata.cpp<br class="gmail_msg">
+++ lib/IR/DebugInfoMetadata.cpp<br class="gmail_msg">
@@ -618,6 +618,8 @@<br class="gmail_msg">
case dwarf::DW_OP_plus:<br class="gmail_msg">
case dwarf::DW_OP_minus:<br class="gmail_msg">
case dwarf::DW_OP_deref:<br class="gmail_msg">
+ case dwarf::DW_OP_swap:<br class="gmail_msg">
+ case dwarf::DW_OP_xderef:<br class="gmail_msg">
break;<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
Index: lib/CodeGen/AsmPrinter/DwarfExpression.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/CodeGen/AsmPrinter/DwarfExpression.cpp<br class="gmail_msg">
+++ lib/CodeGen/AsmPrinter/DwarfExpression.cpp<br class="gmail_msg">
@@ -273,6 +273,12 @@<br class="gmail_msg">
case dwarf::DW_OP_stack_value:<br class="gmail_msg">
AddStackValue();<br class="gmail_msg">
break;<br class="gmail_msg">
+ case dwarf::DW_OP_swap:<br class="gmail_msg">
+ EmitOp(dwarf::DW_OP_swap);<br class="gmail_msg">
+ break;<br class="gmail_msg">
+ case dwarf::DW_OP_xderef:<br class="gmail_msg">
+ EmitOp(dwarf::DW_OP_xderef);<br class="gmail_msg">
+ break;<br class="gmail_msg">
default:<br class="gmail_msg">
llvm_unreachable("unhandled opcode found in expression");<br class="gmail_msg">
}<br class="gmail_msg">
Index: docs/LangRef.rst<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- docs/LangRef.rst<br class="gmail_msg">
+++ docs/LangRef.rst<br class="gmail_msg">
@@ -4372,13 +4372,18 @@<br class="gmail_msg">
- ``DW_OP_plus, 93`` adds ``93`` to the working expression.<br class="gmail_msg">
- ``DW_OP_bit_piece, 16, 8`` specifies the offset and size (``16`` and ``8``<br class="gmail_msg">
here, respectively) of the variable piece from the working expression.<br class="gmail_msg">
+- ``DW_OP_swap`` swaps top two stack entries.<br class="gmail_msg">
+- ``DW_OP_xderef`` provides extended dereference mechanism. The entry at the top<br class="gmail_msg">
+ of the stack is treated as an address. The second stack entry is treated as an<br class="gmail_msg">
+ address space identifier.<br class="gmail_msg">
<br class="gmail_msg">
.. code-block:: text<br class="gmail_msg">
<br class="gmail_msg">
!0 = !DIExpression(DW_OP_deref)<br class="gmail_msg">
!1 = !DIExpression(DW_OP_plus, 3)<br class="gmail_msg">
!2 = !DIExpression(DW_OP_bit_piece, 3, 7)<br class="gmail_msg">
!3 = !DIExpression(DW_OP_deref, DW_OP_plus, 3, DW_OP_bit_piece, 3, 7)<br class="gmail_msg">
+ !4 = !DIExpression(DW_OP_constu, 2, DW_OP_swap, DW_OP_xderef)<br class="gmail_msg">
<br class="gmail_msg">
DIObjCProperty<br class="gmail_msg">
""""""""""""""<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>