[PATCH] D42489: [GlobalOpt] Emit fragments using field offsets from struct layout

Mikael Holmén via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 25 02:13:01 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL323411: [GlobalOpt] Emit fragments using field offsets from struct layout (authored by uabelho, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D42489?vs=131277&id=131404#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D42489

Files:
  llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
  llvm/trunk/test/DebugInfo/Generic/global-sra-struct.ll


Index: llvm/trunk/test/DebugInfo/Generic/global-sra-struct.ll
===================================================================
--- llvm/trunk/test/DebugInfo/Generic/global-sra-struct.ll
+++ llvm/trunk/test/DebugInfo/Generic/global-sra-struct.ll
@@ -24,7 +24,7 @@
 
 ; CHECK: ![[EL0]] = !DIGlobalVariableExpression(var: ![[VAR:.*]], expr: !DIExpression(DW_OP_LLVM_fragment, 0, 32))
 ; CHECK: ![[VAR]] = distinct !DIGlobalVariable(name: "static_struct"
-; CHECK: ![[EL1]] = !DIGlobalVariableExpression(var: ![[VAR]], expr: !DIExpression(DW_OP_LLVM_fragment, 32, 64))
+; CHECK: ![[EL1]] = !DIGlobalVariableExpression(var: ![[VAR]], expr: !DIExpression(DW_OP_LLVM_fragment, 64, 64))
 
 @static_struct = internal global %struct.mystruct zeroinitializer, align 8, !dbg !0
 
Index: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
+++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
@@ -483,7 +483,6 @@
     StartAlignment = DL.getABITypeAlignment(GV->getType());
 
   if (StructType *STy = dyn_cast<StructType>(Ty)) {
-    uint64_t FragmentOffset = 0;
     unsigned NumElements = STy->getNumElements();
     NewGlobals.reserve(NumElements);
     const StructLayout &Layout = *DL.getStructLayout(STy);
@@ -509,10 +508,9 @@
         NGV->setAlignment(NewAlign);
 
       // Copy over the debug info for the variable.
-      FragmentOffset = alignTo(FragmentOffset, NewAlign);
       uint64_t Size = DL.getTypeSizeInBits(NGV->getValueType());
-      transferSRADebugInfo(GV, NGV, FragmentOffset, Size, NumElements);
-      FragmentOffset += Size;
+      uint64_t FragmentOffsetInBits = Layout.getElementOffsetInBits(i);
+      transferSRADebugInfo(GV, NGV, FragmentOffsetInBits, Size, NumElements);
     }
   } else if (SequentialType *STy = dyn_cast<SequentialType>(Ty)) {
     unsigned NumElements = STy->getNumElements();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42489.131404.patch
Type: text/x-patch
Size: 1926 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180125/4c04e5ac/attachment.bin>


More information about the llvm-commits mailing list