diff options
author | Hans Wennborg <hans@chromium.org> | 2021-03-17 13:36:48 +0100 |
---|---|---|
committer | Hans Wennborg <hans@chromium.org> | 2021-03-17 13:36:48 +0100 |
commit | 01ac6d1587e8613ba4278786e8341f8b492ac941 (patch) | |
tree | baf00c4693ff3fafe624fc178ca78286f8ae3811 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | |
parent | c165a99a1b8861af87e0509a2e14debf2764804b (diff) | |
download | llvm-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.cpp | 9 |
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. |