diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2023-11-30 13:49:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-30 13:49:39 +0000 |
commit | cd02e4b8128e6379f1b317132f605787074c8850 (patch) | |
tree | 14e7b53b6d80986def90c9dab360cc01e7a966e8 /llvm/lib/IR/DIBuilder.cpp | |
parent | 29a0f3ec2b47630ce229953fe7250e741b6c10b6 (diff) | |
download | llvm-cd02e4b8128e6379f1b317132f605787074c8850.zip llvm-cd02e4b8128e6379f1b317132f605787074c8850.tar.gz llvm-cd02e4b8128e6379f1b317132f605787074c8850.tar.bz2 |
[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.
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r-- | llvm/lib/IR/DIBuilder.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 0946cf8..62efaba 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -988,9 +988,11 @@ Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, DIExpression *Expr, const DILocation *DL, Instruction *InsertBefore) { - return insertDbgValueIntrinsic( + Instruction *DVI = insertDbgValueIntrinsic( V, VarInfo, Expr, DL, InsertBefore ? InsertBefore->getParent() : nullptr, InsertBefore); + cast<CallInst>(DVI)->setTailCall(); + return DVI; } Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, |