aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectThreadUtil.cpp
diff options
context:
space:
mode:
authorDenis Antrushin <dantrushin@gmail.com>2022-05-13 17:55:26 +0700
committerDenis Antrushin <dantrushin@gmail.com>2022-05-16 17:02:34 +0700
commit8903dbef8ff675e0529ee83ab8c5191ba466e380 (patch)
tree23474b559215307bd10521f2e9e863b783a70d10 /lldb/source/Commands/CommandObjectThreadUtil.cpp
parent9dffab9d524a05742a765dea27aedc8a7080a402 (diff)
downloadllvm-8903dbef8ff675e0529ee83ab8c5191ba466e380.zip
llvm-8903dbef8ff675e0529ee83ab8c5191ba466e380.tar.gz
llvm-8903dbef8ff675e0529ee83ab8c5191ba466e380.tar.bz2
[StatepointLowering] Properly handle local and non-local relocates of the same value.
FunctionLoweringInfo::StatepointRelocationMaps map is used to pass GC pointer lowering information from statepoint to gc.relocate which may appear ini different block. D124444 introduced different lowering for local and non-local relocates. Local relocates use SDValue and non-local relocates use value exported to VReg. But I overlooked the fact that StatepointRelocationMap is indexed not by GCRelocate instruction, but by derived pointer. This works incorrectly when we have two relocates (one local and another non-local) of the same value, because they need different relocation records. This patch fixes the problem by recording relocation information per relocate instruction, not per derived pointer. This way, each gc.relocate can be lowered differently. Reviewed By: skatkov Differential Revision: https://reviews.llvm.org/D125538
Diffstat (limited to 'lldb/source/Commands/CommandObjectThreadUtil.cpp')
0 files changed, 0 insertions, 0 deletions