Skip to content

Commit 44e03d6

Browse files
committed
[Assignment Tracking] Allow salvaging with variadic expressions [4/x]
Allow the value-component of a dbg.assign to be salvaged using a variadic DIExpression. Reviewed By: StephenTozer Differential Revision: https://reviews.llvm.org/D145915
1 parent 47b99b7 commit 44e03d6

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

llvm/lib/Transforms/Utils/Local.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,17 +1913,14 @@ void llvm::salvageDebugInfoForDbgValues(
19131913
bool IsValidSalvageExpr = SalvagedExpr->getNumElements() <= MaxExpressionSize;
19141914
if (AdditionalValues.empty() && IsValidSalvageExpr) {
19151915
DII->setExpression(SalvagedExpr);
1916-
} else if (isa<DbgValueInst>(DII) && !isa<DbgAssignIntrinsic>(DII) &&
1917-
IsValidSalvageExpr &&
1916+
} else if (isa<DbgValueInst>(DII) && IsValidSalvageExpr &&
19181917
DII->getNumVariableLocationOps() + AdditionalValues.size() <=
19191918
MaxDebugArgs) {
19201919
DII->addVariableLocationOps(AdditionalValues, SalvagedExpr);
19211920
} else {
19221921
// Do not salvage using DIArgList for dbg.declare, as it is not currently
1923-
// supported in those instructions. Do not salvage using DIArgList for
1924-
// dbg.assign yet. FIXME: support this.
1925-
// Also do not salvage if the resulting DIArgList would contain an
1926-
// unreasonably large number of values.
1922+
// supported in those instructions. Also do not salvage if the resulting
1923+
// DIArgList would contain an unreasonably large number of values.
19271924
DII->setKillLocation();
19281925
}
19291926
LLVM_DEBUG(dbgs() << "SALVAGE: " << *DII << '\n');

llvm/test/DebugInfo/Generic/assignment-tracking/salvage-value.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ entry:
1414

1515
%add1 = add nsw i32 %x, %y, !dbg !29
1616
call void @llvm.dbg.assign(metadata i32 %add1, metadata !32, metadata !DIExpression(), metadata !31, metadata ptr %p, metadata !DIExpression()), !dbg !16
17-
;; %add1 is not salvaged as it requires two values and DIArgList is
18-
;; not (yet) supported for dbg.assigns.
19-
; CHECK-NEXT: call void @llvm.dbg.assign(metadata i32 poison,{{.+}}, metadata !DIExpression(),{{.+}}, metadata ptr %p, metadata !DIExpression())
17+
;; %add1 is salvaged using a variadic expression.
18+
; CHECK-NEXT: call void @llvm.dbg.assign(metadata !DIArgList(i32 %x, i32 %y), metadata ![[#]], metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus, DW_OP_stack_value), metadata ![[#]], metadata ptr %p, metadata !DIExpression())
2019

2120
%arrayidx0 = getelementptr inbounds i32, ptr %p, i32 0
2221
call void @llvm.dbg.assign(metadata i32 %x, metadata !14, metadata !DIExpression(), metadata !17, metadata ptr %arrayidx0, metadata !DIExpression()), !dbg !16

0 commit comments

Comments
 (0)