[llvm] r360013 - [DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref.

Markus Lavin via llvm-commits llvm-commits at lists.llvm.org
Mon May 6 00:20:57 PDT 2019


Author: markus
Date: Mon May  6 00:20:56 2019
New Revision: 360013

URL: http://llvm.org/viewvc/llvm-project?rev=360013&view=rev
Log:
[DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref.

Optimization pass lib/Transforms/IPO/GlobalOpt.cpp needs to insert
DW_OP_deref_size instead of DW_OP_deref to be compatible with big-endian
targets for same reasons as in D59687.

Differential Revision: https://reviews.llvm.org/D60611

Modified:
    llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
    llvm/trunk/test/Transforms/GlobalOpt/integer-bool-dwarf.ll

Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=360013&r1=360012&r2=360013&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Mon May  6 00:20:56 2019
@@ -1654,6 +1654,9 @@ static bool TryToShrinkGlobalToBoolean(G
       for(auto *GVe : GVs){
         DIGlobalVariable *DGV = GVe->getVariable();
         DIExpression *E = GVe->getExpression();
+        const DataLayout &DL = GV->getParent()->getDataLayout();
+        unsigned SizeInOctets =
+          DL.getTypeAllocSizeInBits(NewGV->getType()->getElementType()) / 8;
 
         // It is expected that the address of global optimized variable is on
         // top of the stack. After optimization, value of that variable will
@@ -1664,8 +1667,9 @@ static bool TryToShrinkGlobalToBoolean(G
         // DW_OP_deref DW_OP_constu <ValMinus>
         // DW_OP_mul DW_OP_constu <ValInit> DW_OP_plus DW_OP_stack_value
         SmallVector<uint64_t, 12> Ops = {
-            dwarf::DW_OP_deref, dwarf::DW_OP_constu, ValMinus,
-            dwarf::DW_OP_mul,   dwarf::DW_OP_constu, ValInit,
+            dwarf::DW_OP_deref_size, SizeInOctets,
+            dwarf::DW_OP_constu, ValMinus,
+            dwarf::DW_OP_mul, dwarf::DW_OP_constu, ValInit,
             dwarf::DW_OP_plus};
         E = DIExpression::prependOpcodes(E, Ops, DIExpression::WithStackValue);
         DIGlobalVariableExpression *DGVE =

Modified: llvm/trunk/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalOpt/integer-bool-dwarf.ll?rev=360013&r1=360012&r2=360013&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/GlobalOpt/integer-bool-dwarf.ll (original)
+++ llvm/trunk/test/Transforms/GlobalOpt/integer-bool-dwarf.ll Mon May  6 00:20:56 2019
@@ -2,7 +2,7 @@
 
 ;CHECK: @foo = internal unnamed_addr global i1 false, align 4, !dbg ![[VAR:.*]]
 ;CHECK: ![[VAR]] = !DIGlobalVariableExpression(var: !1, expr:
-;CHECK-SAME: !DIExpression(DW_OP_deref, DW_OP_constu, 111, DW_OP_mul,
+;CHECK-SAME: !DIExpression(DW_OP_deref_size, 1, DW_OP_constu, 111, DW_OP_mul,
 ;CHECK-SAME:               DW_OP_constu, 0, DW_OP_plus, DW_OP_stack_value,
 ;CHECK-SAME:               DW_OP_LLVM_fragment, 0, 1)) 
 




More information about the llvm-commits mailing list