[PATCH] D65172: [SafeStack] Insert the deref before remaining elements

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 23 17:06:45 PDT 2019


phosek updated this revision to Diff 211388.
phosek marked an inline comment as done.
phosek added a comment.

Done


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65172/new/

https://reviews.llvm.org/D65172

Files:
  llvm/lib/Transforms/Utils/Local.cpp
  llvm/test/Transforms/SafeStack/X86/debug-loc2.ll


Index: llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
===================================================================
--- llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
+++ llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
@@ -24,6 +24,10 @@
 ; CHECK: call void @llvm.dbg.value(metadata ![[EMPTY]], metadata !{{.*}}, metadata !{{.*}})
   tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !24), !dbg !16
 
+; Supported dbg.value: rewritted based on the [[USP]] value.
+; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref, DW_OP_LLVM_fragment, 0, 4))
+  tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !25), !dbg !16
+
 ; Supported dbg.value: rewritted based on the [[USP]] value.
 ; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref))
   tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !15), !dbg !16
@@ -94,3 +98,4 @@
 !22 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 1)
 !23 = !DIExpression()
 !24 = !DIExpression(DW_OP_constu, 42, DW_OP_minus)
+!25 = !DIExpression(DW_OP_deref, DW_OP_LLVM_fragment, 0, 4)
Index: llvm/lib/Transforms/Utils/Local.cpp
===================================================================
--- llvm/lib/Transforms/Utils/Local.cpp
+++ llvm/lib/Transforms/Utils/Local.cpp
@@ -1599,13 +1599,8 @@
 
   // Insert the offset before the first deref.
   // We could just change the offset argument of dbg.value, but it's unsigned...
-  if (Offset) {
-    SmallVector<uint64_t, 4> Ops;
-    DIExpression::appendOffset(Ops, Offset);
-    Ops.append(DIExpr->elements_begin() + 1, DIExpr->elements_end());
-    Ops.push_back(dwarf::DW_OP_deref);
-    DIExpr = Builder.createExpression(Ops);
-  }
+  if (Offset)
+    DIExpr = DIExpression::prepend(DIExpr, 0, Offset);
 
   Builder.insertDbgValueIntrinsic(NewAddress, DIVar, DIExpr, Loc, DVI);
   DVI->eraseFromParent();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65172.211388.patch
Type: text/x-patch
Size: 2062 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190724/cf505893/attachment.bin>


More information about the llvm-commits mailing list