[llvm] r225846 - Debug Info: Turn DIExpression::getFrameRegister() into an isFrameRegister()

David Blaikie dblaikie at gmail.com
Wed Jan 14 09:47:14 PST 2015


On Wed, Jan 14, 2015 at 9:35 AM, Adrian Prantl <aprantl at apple.com> wrote:

>
> On Jan 14, 2015, at 9:21 AM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
>
> On Wed, Jan 14, 2015 at 8:27 AM, Adrian Prantl <aprantl at apple.com> wrote:
>
>>
>> On Jan 13, 2015, at 7:08 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>
>>
>>
>> On Tue, Jan 13, 2015 at 3:10 PM, Adrian Prantl <aprantl at apple.com> wrote:
>>
>>> Author: adrian
>>> Date: Tue Jan 13 17:10:43 2015
>>> New Revision: 225846
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=225846&view=rev
>>> Log:
>>> Debug Info: Turn DIExpression::getFrameRegister() into an
>>> isFrameRegister()
>>> function.
>>>
>>> NFC.
>>>
>>> Modified:
>>>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
>>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.cpp
>>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h
>>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>>
>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp?rev=225846&r1=225845&r2=225846&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp Tue Jan 13
>>> 17:10:43 2015
>>> @@ -46,8 +46,9 @@ void DebugLocDwarfExpression::EmitUnsign
>>>    BS.EmitULEB128(Value, Twine(Value));
>>>  }
>>>
>>> -unsigned DebugLocDwarfExpression::getFrameRegister() {
>>> - llvm_unreachable("not available");
>>> +bool DebugLocDwarfExpression::isFrameRegister(unsigned MachineReg) {
>>> +  // This information is not available while emitting .debug_loc
>>> entries.
>>>
>>
>> Should it be? (should we keep track of it when building the
>> DebugLocEntries in some way?)
>>
>>
>> Generally yes, but it’s probably not a high priority. It would allow us
>> to use the more idiomatic DW_OP_fbreg encoding. It would not actually save
>> any space if the frame offset can be expressed as breg0-31.
>>
>
> Ah, fair point. (one wonders about the utility of such an operation, then)
>
>
> Found it: (DW_AT_frame_base may be a complex expression)
>
> DW_OP_fbreg
>
> The DW_OP_fbreg operation provides a signed LEB128 offset from the address
> specified by the location description in the DW_AT_frame_base attribute
> of the current function. (This is typically a “stack pointer” register plus
> or minus some offset. On more sophisticated systems it might be a location
> list that adjusts the offset according to changes in the stack pointer as
> the PC changes.)
>
Fun. So if/when we do that there would be some benefit to using fbreg, but
not until then (except minor readability improvements in the dwarf dump,
etc). Fair enough.

- David


> -- adrian
>
>
>
>>
>> -- adrian
>>
>>
>>
>>> +  return false;
>>>  }
>>>
>>>
>>>  //===----------------------------------------------------------------------===//
>>>
>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.cpp?rev=225846&r1=225845&r2=225846&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.cpp Tue Jan 13
>>> 17:10:43 2015
>>> @@ -79,7 +79,7 @@ bool DwarfExpression::AddMachineRegIndir
>>>    if (DwarfReg < 0)
>>>      return false;
>>>
>>> -  if (MachineReg == getFrameRegister()) {
>>> +  if (isFrameRegister(MachineReg)) {
>>>      // If variable offset is based in frame register then use fbreg.
>>>      EmitOp(dwarf::DW_OP_fbreg);
>>>      EmitSigned(Offset);
>>>
>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h?rev=225846&r1=225845&r2=225846&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h (original)
>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfExpression.h Tue Jan 13
>>> 17:10:43 2015
>>> @@ -40,7 +40,7 @@ public:
>>>    virtual void EmitSigned(int Value) = 0;
>>>    virtual void EmitUnsigned(unsigned Value) = 0;
>>>
>>> -  virtual unsigned getFrameRegister() = 0;
>>> +  virtual bool isFrameRegister(unsigned MachineReg) = 0;
>>>
>>>    /// Emit a dwarf register operation.
>>>    void AddReg(int DwarfReg, const char* Comment = nullptr);
>>> @@ -92,7 +92,7 @@ public:
>>>    void EmitOp(uint8_t Op, const char *Comment) override;
>>>    void EmitSigned(int Value) override;
>>>    void EmitUnsigned(unsigned Value) override;
>>> -  unsigned getFrameRegister() override;
>>> +  bool isFrameRegister(unsigned MachineReg) override;
>>>  };
>>>
>>>  }
>>>
>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=225846&r1=225845&r2=225846&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Tue Jan 13 17:10:43
>>> 2015
>>> @@ -55,7 +55,7 @@ public:
>>>    void EmitOp(uint8_t Op, const char* Comment = nullptr) override;
>>>    void EmitSigned(int Value) override;
>>>    void EmitUnsigned(unsigned Value) override;
>>> -  unsigned getFrameRegister() override;
>>> +  bool isFrameRegister(unsigned MachineReg) override;
>>>  };
>>>
>>>  void DIEDwarfExpression::EmitOp(uint8_t Op, const char* Comment) {
>>> @@ -67,8 +67,8 @@ void DIEDwarfExpression::EmitSigned(int
>>>  void DIEDwarfExpression::EmitUnsigned(unsigned Value) {
>>>    DU.addUInt(DIE, dwarf::DW_FORM_udata, Value);
>>>  }
>>> -unsigned DIEDwarfExpression::getFrameRegister() {
>>> -  return getTRI()->getFrameRegister(*AP.MF);
>>> +bool DIEDwarfExpression::isFrameRegister(unsigned MachineReg) {
>>> +  return MachineReg == getTRI()->getFrameRegister(*AP.MF);
>>>  }
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150114/f8c9fc73/attachment.html>


More information about the llvm-commits mailing list