diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2024-01-26 09:53:05 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-26 09:53:05 +0000 |
commit | c23608b8d58bdeb0134d99168e6d0335da2c8366 (patch) | |
tree | c8f09aabe9dcc7340d683969f22ea3e93bec8f9b /llvm/lib/IR/Function.cpp | |
parent | 3ed98cb3de303c316c943da7d60b48472f7efdec (diff) | |
download | llvm-c23608b8d58bdeb0134d99168e6d0335da2c8366.zip llvm-c23608b8d58bdeb0134d99168e6d0335da2c8366.tar.gz llvm-c23608b8d58bdeb0134d99168e6d0335da2c8366.tar.bz2 |
[DebugInfo][RemoveDIs] Don't pointlessly scan funcs for debug-info (#79327)
The utility functions this patch modifies are part of cleanly
transitioning from a context where we use dbg.value intrinsics to one
where we use DPValue objects to record debug-info, and back again.
However, this is a waste of time in non-debug builds (i.e. no -g on the
command line). We still have to call the function on all blocks though
to set the IsNewDbgInfoFormat flag.
To reduce the overhead of this, test whether there's any debug-info in
the function by checking whether the function has a DISubprogram, and
pass a flag down to the utility functions indicating whether they can
skip the scan.
It feels a bit dumb to me now that we're scanning and setting a flag in
a load of blocks when we don't have to -- however it's been really
valuable during development for working out where spurious dbg.value
intrinsics leak into a RemoveDIs context. Happily we'll be able to just
delete this flag entirely when RemoveDIs lands and sticks, and the
conversion routines will eventually be pushed down into the debug-info
autoupgrade path.
Diffstat (limited to 'llvm/lib/IR/Function.cpp')
-rw-r--r-- | llvm/lib/IR/Function.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index 22e2455..58e180c 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -83,15 +83,17 @@ static cl::opt<unsigned> NonGlobalValueMaxNameSize( void Function::convertToNewDbgValues() { IsNewDbgInfoFormat = true; + bool HasNoDebugInfo = getSubprogram() == nullptr; for (auto &BB : *this) { - BB.convertToNewDbgValues(); + BB.convertToNewDbgValues(HasNoDebugInfo); } } void Function::convertFromNewDbgValues() { IsNewDbgInfoFormat = false; + bool HasNoDebugInfo = getSubprogram() == nullptr; for (auto &BB : *this) { - BB.convertFromNewDbgValues(); + BB.convertFromNewDbgValues(HasNoDebugInfo); } } |