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

Adrian Prantl aprantl at apple.com
Wed Jan 14 09:35:51 PST 2015


> 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 <mailto:aprantl at apple.com>> wrote:
> 
>> On Jan 13, 2015, at 7:08 PM, David Blaikie <dblaikie at gmail.com <mailto:dblaikie at gmail.com>> wrote:
>> 
>> 
>> 
>> On Tue, Jan 13, 2015 at 3:10 PM, Adrian Prantl <aprantl at apple.com <mailto: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 <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 <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.) 

-- 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 <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 <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 <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 <mailto:llvm-commits at cs.uiuc.edu>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits <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/57c03e25/attachment.html>


More information about the llvm-commits mailing list