[llvm] r329089 - [DEBUGINFO] Add option that allows to disable emission of flags in .loc directives.

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 5 12:26:09 PDT 2018


Here is an excerpt from CUDA Toolkit documentation:


        .loc

Source file location.


        Syntax

.loc file_index line_number column_position

It just does not allow anything else except for file_index, line number and column.
-------------
Best regards,
Alexey Bataev

05.04.2018 15:18, paul.robinson at sony.com пишет:
>
>> -----Original Message-----
>> From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf
>> Of Alexey Bataev via llvm-commits
>> Sent: Tuesday, April 03, 2018 1:29 PM
>> To: llvm-commits at lists.llvm.org
>> Subject: [llvm] r329089 - [DEBUGINFO] Add option that allows to disable
>> emission of flags in .loc directives.
>>
>> Author: abataev
>> Date: Tue Apr  3 10:28:55 2018
>> New Revision: 329089
>>
>> URL: https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%3Frev%3D329089%26view%3Drev&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=S6VCogch8%2F2nWIlw64YBWeWFezTM%2Fpr45Fi7rfcwVmU%3D&reserved=0
>> Log:
>> [DEBUGINFO] Add option that allows to disable emission of flags in .loc
>> directives.
>>
>> Summary:
>> Some targets do not support extended format of .loc directive and
>> support only simple format: .loc <FileID> <Line> <Column>. Patch adds
>> MCAsmInfo flag and option that allows emit .loc directive without
>> additional flags.
>>
>> Reviewers: echristo
>>
>> Subscribers: llvm-commits
>>
>> Differential Revision: https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Freviews.llvm.org%2FD45184&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=THAOiYHyeAvQaszi1tks4kf5JBGkEUH69s4DvV1l2Wc%3D&reserved=0
>>
>> Added:
>>     llvm/trunk/test/DebugInfo/Generic/extended-loc-directive.ll
>> Modified:
>>     llvm/trunk/include/llvm/MC/MCAsmInfo.h
>>     llvm/trunk/lib/MC/MCAsmInfo.cpp
>>     llvm/trunk/lib/MC/MCAsmStreamer.cpp
>>
>> Modified: llvm/trunk/include/llvm/MC/MCAsmInfo.h
>> URL: https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=oBsaB3ngphNmuh3RgdJefb4l4BWY5h2kBaonn95FW%2Fc%3D&reserved=0
>> project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=329089&r1=329088&r2=329
>> 089&view=diff
>> ==========================================================================
>> ====
>> --- llvm/trunk/include/llvm/MC/MCAsmInfo.h (original)
>> +++ llvm/trunk/include/llvm/MC/MCAsmInfo.h Tue Apr  3 10:28:55 2018
>> @@ -344,6 +344,10 @@ protected:
>>    /// For example, foo(plt) instead of foo at plt.  Defaults to false.
>>    bool UseParensForSymbolVariant = false;
>>
>> +  /// True if the target supports flags in ".loc" directive, false if
>> only
>> +  /// location is allowed.
>> +  bool SupportsExtendedDwarfLocDirective = true;
>> +
>>    //===--- Prologue State ----------------------------------------------
>> ===//
>>
>>    std::vector<MCCFIInstruction> InitialFrameState;
>> @@ -579,6 +583,9 @@ public:
>>    bool doDwarfFDESymbolsUseAbsDiff() const { return
>> DwarfFDESymbolsUseAbsDiff; }
>>    bool useDwarfRegNumForCFI() const { return DwarfRegNumForCFI; }
>>    bool useParensForSymbolVariant() const { return
>> UseParensForSymbolVariant; }
>> +  bool supportsExtendedDwarfLocDirective() const {
>> +    return SupportsExtendedDwarfLocDirective;
>> +  }
>>
>>    void addInitialFrameState(const MCCFIInstruction &Inst) {
>>      InitialFrameState.push_back(Inst);
>>
>> Modified: llvm/trunk/lib/MC/MCAsmInfo.cpp
>> URL: https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=oBsaB3ngphNmuh3RgdJefb4l4BWY5h2kBaonn95FW%2Fc%3D&reserved=0
>> project/llvm/trunk/lib/MC/MCAsmInfo.cpp?rev=329089&r1=329088&r2=329089&vie
>> w=diff
>> ==========================================================================
>> ====
>> --- llvm/trunk/lib/MC/MCAsmInfo.cpp (original)
>> +++ llvm/trunk/lib/MC/MCAsmInfo.cpp Tue Apr  3 10:28:55 2018
>> @@ -17,9 +17,18 @@
>>  #include "llvm/MC/MCContext.h"
>>  #include "llvm/MC/MCExpr.h"
>>  #include "llvm/MC/MCStreamer.h"
>> +#include "llvm/Support/CommandLine.h"
>>
>>  using namespace llvm;
>>
>> +enum DefaultOnOff { Default, Enable, Disable };
>> +static cl::opt<DefaultOnOff> DwarfExtendedLoc(
>> +    "dwarf-extended-loc", cl::Hidden,
>> +    cl::desc("Disable emission of the extended flags in .loc
>> directives."),
>> +    cl::values(clEnumVal(Default, "Default for platform"),
>> +               clEnumVal(Enable, "Enabled"), clEnumVal(Disable,
>> "Disabled")),
>> +    cl::init(Default));
>> +
>>  MCAsmInfo::MCAsmInfo() {
>>    SeparatorString = ";";
>>    CommentString = "#";
>> @@ -41,6 +50,8 @@ MCAsmInfo::MCAsmInfo() {
>>    Data64bitsDirective = "\t.quad\t";
>>    GlobalDirective = "\t.globl\t";
>>    WeakDirective = "\t.weak\t";
>> +  if (DwarfExtendedLoc != Default)
>> +    SupportsExtendedDwarfLocDirective = DwarfExtendedLoc == Enable;
>>
>>    // FIXME: Clang's logic should be synced with the logic used to
>> initialize
>>    //        this member and the two implementations should be merged.
>>
>> Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
>> URL: https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=oBsaB3ngphNmuh3RgdJefb4l4BWY5h2kBaonn95FW%2Fc%3D&reserved=0
>> project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=329089&r1=329088&r2=329089
>> &view=diff
>> ==========================================================================
>> ====
>> --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
>> +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Tue Apr  3 10:28:55 2018
>> @@ -1171,27 +1171,29 @@ void MCAsmStreamer::EmitDwarfLocDirectiv
>>                                            unsigned Discriminator,
>>                                            StringRef FileName) {
>>    OS << "\t.loc\t" << FileNo << " " << Line << " " << Column;
>> -  if (Flags & DWARF2_FLAG_BASIC_BLOCK)
>> -    OS << " basic_block";
>> -  if (Flags & DWARF2_FLAG_PROLOGUE_END)
>> -    OS << " prologue_end";
>> -  if (Flags & DWARF2_FLAG_EPILOGUE_BEGIN)
>> -    OS << " epilogue_begin";
>> +  if (MAI->supportsExtendedDwarfLocDirective()) {
>> +    if (Flags & DWARF2_FLAG_BASIC_BLOCK)
>> +      OS << " basic_block";
> The basic_block flag does go all the way back to DWARF v2.
> Does NVPTX really not support it?  Because I could imagine
> wanting to put additional flags/options under an appropriate
> version test, rather than unconditionally always emitting them.
> --paulr
>
>> +    if (Flags & DWARF2_FLAG_PROLOGUE_END)
>> +      OS << " prologue_end";
>> +    if (Flags & DWARF2_FLAG_EPILOGUE_BEGIN)
>> +      OS << " epilogue_begin";
>>
>> -  unsigned OldFlags = getContext().getCurrentDwarfLoc().getFlags();
>> -  if ((Flags & DWARF2_FLAG_IS_STMT) != (OldFlags & DWARF2_FLAG_IS_STMT))
>> {
>> -    OS << " is_stmt ";
>> +    unsigned OldFlags = getContext().getCurrentDwarfLoc().getFlags();
>> +    if ((Flags & DWARF2_FLAG_IS_STMT) != (OldFlags &
>> DWARF2_FLAG_IS_STMT)) {
>> +      OS << " is_stmt ";
>>
>> -    if (Flags & DWARF2_FLAG_IS_STMT)
>> -      OS << "1";
>> -    else
>> -      OS << "0";
>> -  }
>> +      if (Flags & DWARF2_FLAG_IS_STMT)
>> +        OS << "1";
>> +      else
>> +        OS << "0";
>> +    }
>>
>> -  if (Isa)
>> -    OS << " isa " << Isa;
>> -  if (Discriminator)
>> -    OS << " discriminator " << Discriminator;
>> +    if (Isa)
>> +      OS << " isa " << Isa;
>> +    if (Discriminator)
>> +      OS << " discriminator " << Discriminator;
>> +  }
>>
>>    if (IsVerboseAsm) {
>>      OS.PadToColumn(MAI->getCommentColumn());
>>
>> Added: llvm/trunk/test/DebugInfo/Generic/extended-loc-directive.ll
>> URL: https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=oBsaB3ngphNmuh3RgdJefb4l4BWY5h2kBaonn95FW%2Fc%3D&reserved=0
>> project/llvm/trunk/test/DebugInfo/Generic/extended-loc-
>> directive.ll?rev=329089&view=auto
>> ==========================================================================
>> ====
>> --- llvm/trunk/test/DebugInfo/Generic/extended-loc-directive.ll (added)
>> +++ llvm/trunk/test/DebugInfo/Generic/extended-loc-directive.ll Tue Apr  3
>> 10:28:55 2018
>> @@ -0,0 +1,73 @@
>> +; RUN: llc -filetype=asm -asm-verbose=0 -O0 -dwarf-extended-loc=Enable <
>> %s | FileCheck %s --check-prefix ENABLED --check-prefix CHECK
>> +; RUN: llc -filetype=asm -asm-verbose=0 -O0 -dwarf-extended-loc=Disable <
>> %s | FileCheck %s --check-prefix DISABLED --check-prefix CHECK
>> +
>> +; Check that the assembly output properly handles is_stmt changes. And
>> since
>> +; we're testing anyway, check the integrated assembler too.
>> +
>> +; Generated with clang from multiline.c:
>> +; void f1();
>> +; void f2() {
>> +;   f1(); f1(); f1();
>> +;   f1(); f1(); f1();
>> +; }
>> +
>> +
>> +; CHECK: .loc 1 2 0{{$}}
>> +; CHECK-NOT: .loc{{ }}
>> +; ENABLED: .loc 1 3 3 prologue_end{{$}}
>> +; DISABLED: .loc 1 3 3{{$}}
>> +; CHECK-NOT: .loc
>> +; ENABLED: .loc 1 3 9 is_stmt 0{{$}}
>> +; DISABLED: .loc 1 3 9{{$}}
>> +; CHECK-NOT: .loc
>> +; CHECK: .loc 1 3 15{{$}}
>> +; CHECK-NOT: .loc
>> +; ENABLED: .loc 1 4 3 is_stmt 1{{$}}
>> +; DISABLED: .loc 1 4 3{{$}}
>> +; CHECK-NOT: .loc
>> +; ENABLED: .loc 1 4 9 is_stmt 0{{$}}
>> +; DISABLED: .loc 1 4 9{{$}}
>> +; CHECK-NOT: .loc
>> +; CHECK: .loc 1 4 15{{$}}
>> +; CHECK-NOT: .loc
>> +; ENABLED: .loc 1 5 1 is_stmt 1{{$}}
>> +; DISABLED: .loc 1 5 1{{$}}
>> +
>> +; Function Attrs: nounwind uwtable
>> +define void @f2() #0 !dbg !4 {
>> +entry:
>> +  call void (...) @f1(), !dbg !11
>> +  call void (...) @f1(), !dbg !12
>> +  call void (...) @f1(), !dbg !13
>> +  call void (...) @f1(), !dbg !14
>> +  call void (...) @f1(), !dbg !15
>> +  call void (...) @f1(), !dbg !16
>> +  ret void, !dbg !17
>> +}
>> +
>> +declare void @f1(...) #1
>> +
>> +attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-
>> frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-
>> math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
>> "unsafe-fp-math"="false" "use-soft-float"="false" }
>> +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-
>> elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
>> "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-
>> math"="false" "use-soft-float"="false" }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!8, !9}
>> +!llvm.ident = !{!10}
>> +
>> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang
>> version 3.6.0 (trunk 225000) (llvm/trunk 224999)", isOptimized: false,
>> emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals:
>> !2, imports: !2)
>> +!1 = !DIFile(filename: "multiline.c", directory: "/tmp/dbginfo")
>> +!2 = !{}
>> +!4 = distinct !DISubprogram(name: "f2", line: 2, isLocal: false,
>> isDefinition: true, isOptimized: false, unit: !0, scopeLine: 2, file: !1,
>> scope: !5, type: !6, variables: !2)
>> +!5 = !DIFile(filename: "multiline.c", directory: "/tmp/dbginfo")
>> +!6 = !DISubroutineType(types: !7)
>> +!7 = !{null}
>> +!8 = !{i32 2, !"Dwarf Version", i32 4}
>> +!9 = !{i32 2, !"Debug Info Version", i32 3}
>> +!10 = !{!"clang version 3.6.0 (trunk 225000) (llvm/trunk 224999)"}
>> +!11 = !DILocation(line: 3, column: 3, scope: !4)
>> +!12 = !DILocation(line: 3, column: 9, scope: !4)
>> +!13 = !DILocation(line: 3, column: 15, scope: !4)
>> +!14 = !DILocation(line: 4, column: 3, scope: !4)
>> +!15 = !DILocation(line: 4, column: 9, scope: !4)
>> +!16 = !DILocation(line: 4, column: 15, scope: !4)
>> +!17 = !DILocation(line: 5, column: 1, scope: !4)
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-commits&data=02%7C01%7C%7Ce63a66258bf34648aa8208d59b2a0672%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636585527146473294&sdata=m%2BEVKRqXZrzmuW1iLBPdRBkA3R8SgiiTLGnHRDG1BY0%3D&reserved=0

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180405/80b01151/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180405/80b01151/attachment.sig>


More information about the llvm-commits mailing list