Skip to content

Commit

Permalink
[DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref.
Browse files Browse the repository at this point in the history
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

llvm-svn: 360013
  • Loading branch information
markuslavin authored and MrSidims committed May 17, 2019
1 parent 179352f commit 0e79ba4
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
8 changes: 6 additions & 2 deletions llvm/lib/Transforms/IPO/GlobalOpt.cpp
Expand Up @@ -1654,6 +1654,9 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
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
Expand All @@ -1664,8 +1667,9 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
// 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 =
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/GlobalOpt/integer-bool-dwarf.ll
Expand Up @@ -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))

Expand Down

0 comments on commit 0e79ba4

Please sign in to comment.