aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@chromium.org>2021-03-17 13:36:48 +0100
committerHans Wennborg <hans@chromium.org>2021-03-17 13:36:48 +0100
commit01ac6d1587e8613ba4278786e8341f8b492ac941 (patch)
treebaf00c4693ff3fafe624fc178ca78286f8ae3811 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
parentc165a99a1b8861af87e0509a2e14debf2764804b (diff)
downloadllvm-01ac6d1587e8613ba4278786e8341f8b492ac941.zip
llvm-01ac6d1587e8613ba4278786e8341f8b492ac941.tar.gz
llvm-01ac6d1587e8613ba4278786e8341f8b492ac941.tar.bz2
Revert "[DebugInfo] Handle multiple variable location operands in IR"
This caused non-deterministic compiler output; see comment on the code review. > This patch updates the various IR passes to correctly handle dbg.values with a > DIArgList location. This patch does not actually allow DIArgLists to be produced > by salvageDebugInfo, and it does not affect any pass after codegen-prepare. > Other than that, it should cover every IR pass. > > Most of the changes simply extend code that operated on a single debug value to > operate on the list of debug values in the style of any_of, all_of, for_each, > etc. Instances of setOperand(0, ...) have been replaced with with > replaceVariableLocationOp, which takes the value that is being replaced as an > additional argument. In places where this value isn't readily available, we have > to track the old value through to the point where it gets replaced. > > Differential Revision: https://reviews.llvm.org/D88232 This reverts commit df69c69427dea7f5b3b3a4d4564bc77b0926ec88.
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/BasicBlockUtils.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
index d1a3ae5..9697e7d 100644
--- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
+++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
@@ -407,8 +407,7 @@ static bool removeRedundantDbgInstrsUsingBackwardScan(BasicBlock *BB) {
/// - Keep track of non-overlapping fragments.
static bool removeRedundantDbgInstrsUsingForwardScan(BasicBlock *BB) {
SmallVector<DbgValueInst *, 8> ToBeRemoved;
- DenseMap<DebugVariable, std::pair<SmallVector<Value *, 4>, DIExpression *>>
- VariableMap;
+ DenseMap<DebugVariable, std::pair<Value *, DIExpression *> > VariableMap;
for (auto &I : *BB) {
if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(&I)) {
DebugVariable Key(DVI->getVariable(),
@@ -417,10 +416,10 @@ static bool removeRedundantDbgInstrsUsingForwardScan(BasicBlock *BB) {
auto VMI = VariableMap.find(Key);
// Update the map if we found a new value/expression describing the
// variable, or if the variable wasn't mapped already.
- SmallVector<Value *, 4> Values(DVI->getValues());
- if (VMI == VariableMap.end() || VMI->second.first != Values ||
+ if (VMI == VariableMap.end() ||
+ VMI->second.first != DVI->getValue() ||
VMI->second.second != DVI->getExpression()) {
- VariableMap[Key] = {Values, DVI->getExpression()};
+ VariableMap[Key] = { DVI->getValue(), DVI->getExpression() };
continue;
}
// Found an identical mapping. Remember the instruction for later removal.