+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>