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/Debugify.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/Debugify.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/Debugify.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp index 73a3a40..fc42f2c5 100644 --- a/llvm/lib/Transforms/Utils/Debugify.cpp +++ b/llvm/lib/Transforms/Utils/Debugify.cpp @@ -554,16 +554,15 @@ bool diagnoseMisSizedDbgValue(Module &M, DbgValueInst *DVI) { // // TODO: This, along with a check for non-null value operands, should be // promoted to verifier failures. + Value *V = DVI->getValue(); + if (!V) + return false; // For now, don't try to interpret anything more complicated than an empty // DIExpression. Eventually we should try to handle OP_deref and fragments. if (DVI->getExpression()->getNumElements()) return false; - Value *V = DVI->getVariableLocationOp(0); - if (!V) - return false; - Type *Ty = V->getType(); uint64_t ValueOperandSize = getAllocSizeInBits(M, Ty); Optional<uint64_t> DbgVarSize = DVI->getFragmentSizeInBits(); |