Skip to content

Commit 6d46337

Browse files
authored
[RemoveDIs] Handle DPValues in replaceDbgDeclare (#73507)
The tests will become "live" once #74090 lands (see for more info).
1 parent 105adf2 commit 6d46337

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

llvm/lib/Transforms/Utils/Local.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2131,19 +2131,22 @@ bool llvm::replaceDbgDeclare(Value *Address, Value *NewAddress,
21312131
DIBuilder &Builder, uint8_t DIExprFlags,
21322132
int Offset) {
21332133
SmallVector<DbgDeclareInst *, 1> DbgDeclares;
2134-
findDbgDeclares(DbgDeclares, Address);
2135-
for (DbgVariableIntrinsic *DII : DbgDeclares) {
2136-
const DebugLoc &Loc = DII->getDebugLoc();
2134+
SmallVector<DPValue *, 1> DPValues;
2135+
findDbgDeclares(DbgDeclares, Address, &DPValues);
2136+
2137+
auto ReplaceOne = [&](auto *DII) {
21372138
auto *DIVar = DII->getVariable();
21382139
auto *DIExpr = DII->getExpression();
21392140
assert(DIVar && "Missing variable");
21402141
DIExpr = DIExpression::prepend(DIExpr, DIExprFlags, Offset);
2141-
// Insert llvm.dbg.declare immediately before DII, and remove old
2142-
// llvm.dbg.declare.
2143-
Builder.insertDeclare(NewAddress, DIVar, DIExpr, Loc, DII);
2144-
DII->eraseFromParent();
2145-
}
2146-
return !DbgDeclares.empty();
2142+
DII->setExpression(DIExpr);
2143+
DII->replaceVariableLocationOp(Address, NewAddress);
2144+
};
2145+
2146+
for_each(DbgDeclares, ReplaceOne);
2147+
for_each(DPValues, ReplaceOne);
2148+
2149+
return !DbgDeclares.empty() || !DPValues.empty();
21472150
}
21482151

21492152
static void updateOneDbgValueForAlloca(const DebugLoc &Loc,

llvm/test/DebugInfo/Generic/block-asan.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt -S -passes=asan %s | FileCheck %s
2+
; RUN: opt --try-experimental-debuginfo-iterators -S -passes=asan %s | FileCheck %s
23

34
; The IR of this testcase is generated from the following C code:
45
; void bar (int);

llvm/test/DebugInfo/X86/asan_debug_info.ll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
; RUN: llc -O0 -filetype=obj - -o - | \
33
; RUN: llvm-dwarfdump - | FileCheck %s
44

5+
; RUN: opt --try-experimental-debuginfo-iterators < %s -passes=asan -asan-use-after-return=never -S | \
6+
; RUN: llc -O0 -filetype=obj - -o - | \
7+
; RUN: llvm-dwarfdump - | FileCheck %s
8+
59
; For this test case, ASan used to produce IR which resulted in the following
610
; DWARF (at -O0):
711
;

llvm/test/Transforms/SafeStack/ARM/debug.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
; RUN: opt -safe-stack -safestack-use-pointer-address < %s -S | FileCheck %s
22
; RUN: opt -passes=safe-stack -safestack-use-pointer-address < %s -S | FileCheck %s
3+
; RUN: opt --try-experimental-debuginfo-iterators -passes=safe-stack -safestack-use-pointer-address < %s -S | FileCheck %s
4+
35
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
46
target triple = "armv7-pc-linux-android"
57

0 commit comments

Comments
 (0)