Skip to content

Commit cd02e4b

Browse files
authored
[DebugInfo] Set all dbg.value intrinsics to be tail-calls (#73661)
This change has no meaningful effect on the compiler, although it has a functional effect of dbg.value intrinsics being printed differently. The tail-call flag is meaningless for debug-intrinsics and doesn't serve a purpose, it's just extra baggage that dbg.values are built on top of. Some facilities create debug-intrinsics with the flag, others don't. However, the RemoveDIs project to represent debug-info without intrinsics doesn't have a corresponding flag, which can cause spurious test differences. Specifically: we can convert a dbg.value to a DPValue, run an optimisation pass, then convert the DPValue back to dbg.value form. Right now, we always set the "tail" flag when converting it back. This causes the auto-update-tests script to fail sometimes because in one mode (dbg.value) intrinsics might not have a tail flag, but in the other they do have a tail flag. Consistently picking one or the other in the conversion routine doesn't help, because the rest of LLVM is inconsistent about it anyway. Thus: whenever we make a dbg.value intrinsic, create it as a tail call, so that we get consistent output behaviours no matter which debug-info mode we're in, DPValue or dbg.value. No tests fail as a result of this patch because the extra 'tail' generated in numerous tests is automatically ignored by FileCheck as being leading-rubbish before the CHECK match.
1 parent 29a0f3e commit cd02e4b

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

llvm/lib/IR/DIBuilder.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,9 +988,11 @@ Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V,
988988
DIExpression *Expr,
989989
const DILocation *DL,
990990
Instruction *InsertBefore) {
991-
return insertDbgValueIntrinsic(
991+
Instruction *DVI = insertDbgValueIntrinsic(
992992
V, VarInfo, Expr, DL, InsertBefore ? InsertBefore->getParent() : nullptr,
993993
InsertBefore);
994+
cast<CallInst>(DVI)->setTailCall();
995+
return DVI;
994996
}
995997

996998
Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V,

0 commit comments

Comments
 (0)