[PATCH] D53657: [DEBUG_INFO][NVPTX]Fix processing of DBG_VALUES.
Artem Belevich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 24 10:58:47 PDT 2018
tra added inline comments.
================
Comment at: lib/Target/NVPTX/NVPTXRegisterInfo.cpp:122-129
+ int Offset = MF.getFrameInfo().getObjectOffset(FrameIndex);
// Using I0 as the frame pointer
- MI.getOperand(FIOperandNum).ChangeToRegister(NVPTX::VRFrame, false);
+ MI.getOperand(FIOperandNum).ChangeToRegister(NVPTX::VRFrame, /*isDef=*/false);
+ // Special processing of dbg_value instructions.
+ if (!MI.isDebugValue())
+ Offset += MI.getOperand(FIOperandNum + 1).getImm();
----------------
ABataev wrote:
> tra wrote:
> > I'm not sure I understand this change. What is in getOperand(FIOperandNum + 1) for DebugValue instructions? Other instructions carry FI-based offset, but your change appears to ignore it and effectively treats it as if it's always zero.
> >
> > It may be worth adding more details about *why* debug values need to be handled this way.
> >
> DebugValue does not have FI-based offset. That's why it causes compiler crash. For DebugValue it is enough just to have the base object offset.
> Some other targets, like ARC, Thumb have same kind of processing.
> Alternatively, we can use the code similar to one existing in `lib/CodeGen/PrologEpilogInserter.cpp` for special handling of the debug values:
> ```
> // Frame indices in debug values are encoded in a target independent
> // way with simply the frame index and offset rather than any
> // target-specific addressing mode.
> if (MI.isDebugValue()) {
> assert(i == 0 && "Frame indices can only appear as the first "
> "operand of a DBG_VALUE machine instruction");
> unsigned Reg;
> int64_t Offset =
> TFI->getFrameIndexReference(MF, MI.getOperand(0).getIndex(), Reg);
> MI.getOperand(0).ChangeToRegister(Reg, false /*isDef*/);
> MI.getOperand(0).setIsDebug();
> auto *DIExpr = DIExpression::prepend(MI.getDebugExpression(),
> DIExpression::NoDeref, Offset);
> MI.getOperand(3).setMetadata(DIExpr);
> continue;
> }
>
> ```
OK. Adding the comment that DebugValue uses different encoding convention that does not need in-object offset should do.
Perhaps the intention could be made a bit more obvious if the code was structured like this:
```
// Explain why DebugValue has InObjectOffset = 0.
InObjectOffset = MI.isDebugValue() ? 0 : MI.getOperand(FIOperandNum + 1).getImm()
Offset = MF.getFrameInfo().getObjectOffset(FrameIndex) + InObjectOffset;
```
Repository:
rL LLVM
https://reviews.llvm.org/D53657
More information about the llvm-commits
mailing list