aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorJeremy Morse <jeremy.morse@sony.com>2024-07-18 15:04:02 +0100
committerGitHub <noreply@github.com>2024-07-18 15:04:02 +0100
commit078198f310d55925ccd9e1aa5b6ff4af3b36bbc7 (patch)
tree94aa2721663d7f06194537d63b6894b967f066f5 /clang/lib/CodeGen/CodeGenModule.cpp
parent684a61506a3ddc943b8baef1d14c96bbf82e6c04 (diff)
downloadllvm-078198f310d55925ccd9e1aa5b6ff4af3b36bbc7.zip
llvm-078198f310d55925ccd9e1aa5b6ff4af3b36bbc7.tar.gz
llvm-078198f310d55925ccd9e1aa5b6ff4af3b36bbc7.tar.bz2
[DebugInfo][InstrRef] Index DebugVariables and some DILocations (#99318)
A lot of time in LiveDebugValues is spent computing DenseMap keys for DebugVariables, and they're made up of three pointers, so are large. This patch installs an index for them: for the SSA and value-to-location mapping parts of InstrRefBasedLDV we don't need to access things like the variable declaration or the inlining site, so just use a uint32_t identifier for each variable fragment that's tracked. The compile-time performance improvements are substantial (almost 0.4% on the tracker). About 80% of this patch is just replacing DebugVariable references with DebugVariableIDs instead, however there are some larger consequences. We spend lots of time fetching DILocations when emitting DBG_VALUE instructions, so index those with the DebugVariables: this means all DILocations on all new DBG_VALUE instructions will normalise to the first-seen DILocation for the variable (which should be fine). We also used to keep an ordering of when each variable was seen first in a DBG_* instruction, in the AllVarsNumbering collection, so that we can emit new DBG_* instructions in a stable order. We can hang this off the DebugVariable index instead, so AllVarsNumbering is deleted. Finally, rather than ordering by AllVarsNumbering just before DBG_* instructions are linked into the output MIR, store instructions along with their DebugVariableID, so that they can be sorted by that instead.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions