Skip to content

Commit 002360e

Browse files
Merge pull request #73861 from Snowy1803/6.0-fix-dbg.declare
[6.0] [IRGenDebugInfo] Fix usage of dbg.declare
2 parents 03dae14 + 1586d48 commit 002360e

File tree

5 files changed

+26
-21
lines changed

5 files changed

+26
-21
lines changed

lib/IRGen/IRGenDebugInfo.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3401,11 +3401,6 @@ void IRGenDebugInfoImpl::emitDbgIntrinsic(
34013401
auto DL =
34023402
llvm::DILocation::get(IGM.getLLVMContext(), Line, Col, Scope, InlinedAt);
34033403

3404-
// An alloca may only be described by exactly one dbg.declare.
3405-
if (isa<llvm::AllocaInst>(Storage) &&
3406-
!llvm::FindDbgDeclareUses(Storage).empty())
3407-
return;
3408-
34093404
// Fragment DIExpression cannot cover the whole variable
34103405
// or going out-of-bound.
34113406
if (auto Fragment = Expr->getFragmentInfo()) {
@@ -3443,6 +3438,10 @@ void IRGenDebugInfoImpl::emitDbgIntrinsic(
34433438
return;
34443439
}
34453440

3441+
bool optimized = DS->getParentFunction()->shouldOptimize();
3442+
if (optimized && (!InCoroContext || !Var->isParameter()))
3443+
AddrDInstKind = AddrDbgInstrKind::DbgValueDeref;
3444+
34463445
DbgIntrinsicEmitter inserter{Builder, DBuilder, AddrDInstKind};
34473446

34483447
// If we have a single alloca...
@@ -3469,7 +3468,7 @@ void IRGenDebugInfoImpl::emitDbgIntrinsic(
34693468
return;
34703469
}
34713470

3472-
if (InCoroContext) {
3471+
if (InCoroContext && (Var->isParameter() || !optimized)) {
34733472
PointerUnion<llvm::BasicBlock *, llvm::Instruction *> InsertPt;
34743473

34753474
// If we have a dbg.declare, we are relying on a contract with the coroutine

test/AutoDiff/compiler_crashers_fixed/issue-58123-invalid-debug-info.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
// CHECK-LABEL: define internal swiftcc float @"$s4main8TestTypeV24doDifferentiableTimeStep04timeG0ySf_tFTJpSSpSrTA"
88
// CHECK: [[SELF:%.*]] = alloca %T4main8TestTypeV06ManualB7TangentV
9-
// CHECK: call void @llvm.dbg.declare(metadata ptr [[SELF]]
9+
// CHECK: call void @llvm.dbg.value(metadata ptr [[SELF]]
1010

1111
import _Differentiation
1212

test/IRGen/debug_fragment_merge.swift renamed to test/DebugInfo/debug_fragment_merge.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ func test(cond: Int, external: External) async {
3131
// CHECK-SIL: debug_value %{{.*}} : $String, let, (name "data", {{.*}}), type $Data, expr op_fragment:#Data.a
3232
// CHECK-SIL: debug_value %{{.*}} : $String, let, (name "data", {{.*}}), type $Data, expr op_fragment:#Data.b
3333

34-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64){{.*}} !dbg ![[LOC1]]
35-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64){{.*}} !dbg ![[LOC1]]
36-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64){{.*}} !dbg ![[LOC1]]
37-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64){{.*}} !dbg ![[LOC1]]
34+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64){{.*}} !dbg ![[LOC1]]
35+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64){{.*}} !dbg ![[LOC1]]
36+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64){{.*}} !dbg ![[LOC1]]
37+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64){{.*}} !dbg ![[LOC1]]
3838
//
39-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64){{.*}} !dbg ![[LOC2]]
40-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64){{.*}} !dbg ![[LOC2]]
41-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64){{.*}} !dbg ![[LOC2]]
42-
// CHECK-DAG: llvm.dbg.declare{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64){{.*}} !dbg ![[LOC2]]
39+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64){{.*}} !dbg ![[LOC2]]
40+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64){{.*}} !dbg ![[LOC2]]
41+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64){{.*}} !dbg ![[LOC2]]
42+
// CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64){{.*}} !dbg ![[LOC2]]

test/IRGen/debug_scope_distinct.swift renamed to test/DebugInfo/debug_scope_distinct.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
// REQUIRES: CPU=arm64 || CPU=x86_64 || CPU=arm64e
99

10+
// XFAIL: *
11+
// rdar://128505421
12+
1013
// CHECK: define {{.*}} void @"$s4main1TV4move2byyAC13TangentVectorV_tF"
1114
// CHECK-SAME: ptr {{.*}} %[[ARG_PTR:.*]],
1215
//

test/DebugInfo/inlined-generics-basic.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public class C<R> {
5252
// SIL: function_ref {{.*}}use{{.*}} scope [[F1G3H]]
5353
// IR: dbg.value(metadata ptr %[[ARG_S]], metadata ![[MD_1_0:[0-9]+]]
5454
// IR: %[[RS_PAIR:.*]] = alloca i8, i{{.*}} %
55-
// IR: dbg.declare(metadata ptr %[[RS_PAIR]], metadata ![[GRS_T:[0-9]+]],
5655
// IR: dbg.value(metadata ptr %[[ARG_0]], metadata ![[S:[0-9]+]]
5756
// IR: dbg.value(metadata ptr %[[ARG_0]], metadata ![[GS_T:[0-9]+]]
5857
// IR: dbg.value(metadata ptr %[[ARG_0]], metadata ![[GS_U:[0-9]+]]
@@ -70,6 +69,8 @@ public class C<R> {
7069
// IR: call {{.*}}3use
7170
#sourceLocation(file: "f.swift", line: 3)
7271
g(r)
72+
// IR: dbg.value(metadata ptr %[[RS_PAIR]], metadata ![[GRS_T:[0-9]+]],
73+
// IR: dbg.value(metadata ptr %[[RS_PAIR]], metadata ![[GRS_U:[0-9]+]],
7374
// IR: call {{.*}}3use
7475
#sourceLocation(file: "f.swift", line: 4)
7576
g((r, s))
@@ -100,22 +101,24 @@ public class C<R> {
100101
// IR-DAG: ![[MD_1_0]] = !DILocalVariable(name: "$\CF\84_1_0"
101102
// IR-DAG: ![[GRS_T]] = !DILocalVariable(name: "t", {{.*}} scope: ![[SP_GRS_T:[0-9]+]], {{.*}}type: ![[LET_TUPLE:[0-9]+]]
102103
// IR-DAG: ![[SP_GRS_T]] = {{.*}}linkageName: "$s1A1gyyxlFx_qd__t_Ti5"
104+
// IR-DAG: ![[GRS_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GRS_U:[0-9]+]], {{.*}}type: ![[LET_TUPLE:[0-9]+]]
105+
// IR-DAG: ![[SP_GRS_U]] = {{.*}}linkageName: "$s1A1hyyxlFx_qd__t_Ti5"
103106
// IR-DAG: ![[LET_TUPLE]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[TUPLE:[0-9]+]])
104107
// IR-DAG: ![[TUPLE]] = {{.*}}DW_TAG_structure_type, name: "$sx_qd__tD"
105108
// IR-DAG: ![[S]] = !DILocalVariable(name: "s", {{.*}} type: ![[LET_TAU_1_0:[0-9]+]]
106109
// IR-DAG: ![[LET_TAU_1_0]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[TAU_1_0]])
107110
// IR-DAG: ![[GS_T]] = !DILocalVariable(name: "t", {{.*}} scope: ![[SP_GS_T:[0-9]+]], {{.*}} type: ![[LET_TAU_1_0]])
108-
// IR: ![[SP_GS_T]] = {{.*}}linkageName: "$s1A1gyyxlFqd___Ti5"
109-
// IR: ![[GS_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GS_U:[0-9]+]], {{.*}} type: ![[LET_TAU_1_0]])
110-
// IR: ![[SP_GS_U]] = {{.*}}linkageName: "$s1A1hyyxlFqd___Ti5"
111+
// IR-DAG: ![[SP_GS_T]] = {{.*}}linkageName: "$s1A1gyyxlFqd___Ti5"
112+
// IR-DAG: ![[GS_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GS_U:[0-9]+]], {{.*}} type: ![[LET_TAU_1_0]])
113+
// IR-DAG: ![[SP_GS_U]] = {{.*}}linkageName: "$s1A1hyyxlFqd___Ti5"
111114

112115
// Debug info for this variable is removed. See the note above the call to g(r).
113116
// ![[GR_T]] = !DILocalVariable(name: "t", {{.*}} scope: ![[SP_GR_T:[0-9]+]], {{.*}}type: ![[LET_TAU_0_0]])
114117
// S has the same generic parameter numbering s T and U.
115118
// ![[SP_GR_T]] = {{.*}}linkageName: "$s1A1gyyxlF"
116119

117-
// IR: ![[GR_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GR_U:[0-9]+]], {{.*}}type: ![[LET_TAU_0_0]])
118-
// IR: ![[SP_GR_U]] = {{.*}}linkageName: "$s1A1hyyxlF"
120+
// IR-DAG: ![[GR_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GR_U:[0-9]+]], {{.*}}type: ![[LET_TAU_0_0]])
121+
// IR-DAG: ![[SP_GR_U]] = {{.*}}linkageName: "$s1A1hyyxlF"
119122
// IR-DAG: ![[GI_T]] = !DILocalVariable(name: "t", {{.*}} scope: ![[SP_GI_G:[0-9]+]], {{.*}}type: ![[LET_INT]])
120123
// IR-DAG: ![[SP_GI_G]] = {{.*}}linkageName: "$s1A1gyyxlFSi_Tg5"
121124
// IR-DAG: ![[GI_U]] = !DILocalVariable(name: "u", {{.*}} scope: ![[SP_GI_U:[0-9]+]], {{.*}}type: ![[LET_INT]])

0 commit comments

Comments
 (0)