[llvm] r251680 - Update the discriminator assignment algorithm

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 29 21:16:46 PDT 2015


also looks like this might be yours:
http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/26024

Let me know if you need any help analyzing the failure, etc

On Thu, Oct 29, 2015 at 9:13 PM, David Blaikie <dblaikie at gmail.com> wrote:

>
>
> On Thu, Oct 29, 2015 at 7:38 PM, Dehao Chen via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: dehao
>> Date: Thu Oct 29 21:38:29 2015
>> New Revision: 251680
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=251680&view=rev
>> Log:
>> Update the discriminator assignment algorithm
>>
>> * If a scope has already been assigned a discriminator, do not reassign a
>> nested discriminator for it.
>> * If the file and line both match, even if the column does not match, we
>> should assign a new discriminator for the stmt.
>>
>
> Why do we need a discriminator even when the column is distinct?
>
>
>>
>> original code:
>> ; #1 int foo(int i) {
>> ; #2 if (i == 3 || i == 5) return 100; else return 99;
>> ; #3 }
>>
>> ; i == 3: discriminator 0
>> ; i == 5: discriminator 2
>> ; return 100: discriminator 1
>> ; return 99: discriminator 3
>>
>> Added:
>>     llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll
>> Modified:
>>     llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp?rev=251680&r1=251679&r2=251680&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp Thu Oct 29
>> 21:38:29 2015
>> @@ -180,7 +180,7 @@ bool AddDiscriminators::runOnFunction(Fu
>>        BasicBlock *Succ = Last->getSuccessor(I);
>>        Instruction *First = Succ->getFirstNonPHIOrDbgOrLifetime();
>>        const DILocation *FirstDIL = First->getDebugLoc();
>> -      if (!FirstDIL)
>> +      if (!FirstDIL || FirstDIL->getDiscriminator())
>>          continue;
>>
>>        // If the first instruction (First) of Succ is at the same file
>> @@ -202,21 +202,22 @@ bool AddDiscriminators::runOnFunction(Fu
>>          unsigned Discriminator = FirstDIL->computeNewDiscriminator();
>>          auto *NewScope =
>>              Builder.createLexicalBlockFile(Scope, File, Discriminator);
>> -        auto *NewDIL =
>> -            DILocation::get(Ctx, FirstDIL->getLine(),
>> FirstDIL->getColumn(),
>> -                            NewScope, FirstDIL->getInlinedAt());
>> -        DebugLoc newDebugLoc = NewDIL;
>>
>>          // Attach this new debug location to First and every
>>          // instruction following First that shares the same location.
>>          for (BasicBlock::iterator I1(*First), E1 = Succ->end(); I1 != E1;
>>               ++I1) {
>> -          if (I1->getDebugLoc().get() != FirstDIL)
>> -            break;
>> -          I1->setDebugLoc(newDebugLoc);
>> -          DEBUG(dbgs() << NewDIL->getFilename() << ":" <<
>> NewDIL->getLine()
>> -                       << ":" << NewDIL->getColumn() << ":"
>> -                       << NewDIL->getDiscriminator() << *I1 << "\n");
>> +          const DILocation *CurrentDIL = I1->getDebugLoc();
>> +          if (CurrentDIL && CurrentDIL->getLine() == FirstDIL->getLine()
>> &&
>> +              CurrentDIL->getFilename() == FirstDIL->getFilename()) {
>> +            I1->setDebugLoc(DILocation::get(Ctx, CurrentDIL->getLine(),
>> +                                            CurrentDIL->getColumn(),
>> NewScope,
>> +                                            CurrentDIL->getInlinedAt()));
>> +            DEBUG(dbgs() << CurrentDIL->getFilename() << ":"
>> +                         << CurrentDIL->getLine() << ":"
>> +                         << CurrentDIL->getColumn() << ":"
>> +                         << CurrentDIL->getDiscriminator() << *I1 <<
>> "\n");
>> +          }
>>          }
>>          DEBUG(dbgs() << "\n");
>>          Changed = true;
>>
>> Added: llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll?rev=251680&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll (added)
>> +++ llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll Thu Oct 29
>> 21:38:29 2015
>> @@ -0,0 +1,98 @@
>> +; RUN: opt < %s -add-discriminators -S | FileCheck %s
>> +
>> +; Discriminator support for code that is written in one line:
>> +; #1 int foo(int i) {
>> +; #2   if (i == 3 || i == 5) return 100; else return 99;
>> +; #3 }
>> +
>> +; i == 3:     discriminator 0
>> +; i == 5:     discriminator 2
>> +; return 100: discriminator 1
>> +; return 99:  discriminator 3
>> +
>> +define i32 @_Z3fooi(i32 %i) #0 {
>> +  %1 = alloca i32, align 4
>> +  %2 = alloca i32, align 4
>> +  store i32 %i, i32* %2, align 4, !tbaa !13
>> +  call void @llvm.dbg.declare(metadata i32* %2, metadata !9, metadata
>> !17), !dbg !18
>> +  %3 = load i32, i32* %2, align 4, !dbg !19, !tbaa !13
>> +  %4 = icmp eq i32 %3, 3, !dbg !21
>> +  br i1 %4, label %8, label %5, !dbg !22
>> +
>> +; <label>:5                                       ; preds = %0
>> +  %6 = load i32, i32* %2, align 4, !dbg !23, !tbaa !13
>> +; CHECK:  %6 = load i32, i32* %2, align 4, !dbg ![[THEN1:[0-9]+]],{{.*}}
>> +
>> +  %7 = icmp eq i32 %6, 5, !dbg !24
>> +; CHECK:  %7 = icmp eq i32 %6, 5, !dbg ![[THEN2:[0-9]+]]
>> +
>> +  br i1 %7, label %8, label %9, !dbg !25
>> +; CHECK:  br i1 %7, label %8, label %9, !dbg ![[THEN3:[0-9]+]]
>> +
>> +; <label>:8                                       ; preds = %5, %0
>> +  store i32 100, i32* %1, align 4, !dbg !26
>> +; CHECK: store i32 100, i32* %1, align 4, !dbg ![[ELSE:[0-9]+]]
>> +
>> +  br label %10, !dbg !26
>> +; CHECK: br label %10, !dbg ![[ELSE]]
>> +
>> +; <label>:9                                       ; preds = %5
>> +  store i32 99, i32* %1, align 4, !dbg !27
>> +; CHECK: store i32 99, i32* %1, align 4, !dbg ![[COMBINE:[0-9]+]]
>> +
>> +  br label %10, !dbg !27
>> +; CHECK: br label %10, !dbg ![[COMBINE]]
>> +
>> +; <label>:10                                      ; preds = %9, %8
>> +  %11 = load i32, i32* %1, align 4, !dbg !28
>> +  ret i32 %11, !dbg !28
>> +}
>> +
>> +; Function Attrs: nounwind readnone
>> +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
>> +
>> +attributes #0 = { nounwind uwtable "disable-tail-calls"="false"
>> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
>> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
>> "stack-protector-buffer-size"="8" "target-cpu"="x86-64"
>> "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false"
>> "use-soft-float"="false" }
>> +attributes #1 = { nounwind readnone }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!10, !11}
>> +!llvm.ident = !{!12}
>> +
>> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
>> producer: "clang version 3.8.0 (trunk 250915)", isOptimized: true,
>> runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
>> +!1 = !DIFile(filename: "a.cc", directory:
>> "/usr/local/google/home/dehao/discr")
>> +!2 = !{}
>> +!3 = !{!4}
>> +!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi", scope:
>> !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true,
>> scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, function: i32
>> (i32)* @_Z3fooi, variables: !8)
>> +!5 = !DISubroutineType(types: !6)
>> +!6 = !{!7, !7}
>> +!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!8 = !{!9}
>> +!9 = !DILocalVariable(name: "i", arg: 1, scope: !4, file: !1, line: 1,
>> type: !7)
>> +!10 = !{i32 2, !"Dwarf Version", i32 4}
>> +!11 = !{i32 2, !"Debug Info Version", i32 3}
>> +!12 = !{!"clang version 3.8.0 (trunk 250915)"}
>> +!13 = !{!14, !14, i64 0}
>> +!14 = !{!"int", !15, i64 0}
>> +!15 = !{!"omnipotent char", !16, i64 0}
>> +!16 = !{!"Simple C/C++ TBAA"}
>> +!17 = !DIExpression()
>> +!18 = !DILocation(line: 1, column: 13, scope: !4)
>> +!19 = !DILocation(line: 2, column: 7, scope: !20)
>> +!20 = distinct !DILexicalBlock(scope: !4, file: !1, line: 2, column: 7)
>> +!21 = !DILocation(line: 2, column: 9, scope: !20)
>> +!22 = !DILocation(line: 2, column: 14, scope: !20)
>> +!23 = !DILocation(line: 2, column: 17, scope: !20)
>> +!24 = !DILocation(line: 2, column: 19, scope: !20)
>> +!25 = !DILocation(line: 2, column: 7, scope: !4)
>> +!26 = !DILocation(line: 2, column: 25, scope: !20)
>> +!27 = !DILocation(line: 2, column: 42, scope: !20)
>> +!28 = !DILocation(line: 3, column: 1, scope: !4)
>> +
>> +; CHECK: ![[THEN1]] = !DILocation(line: 2, column: 17, scope:
>> ![[THENBLOCK:[0-9]+]])
>> +; CHECK: ![[THENBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 2)
>> +; CHECK: ![[THEN2]] = !DILocation(line: 2, column: 19, scope:
>> ![[THENBLOCK]])
>> +; CHECK: ![[THEN3]] = !DILocation(line: 2, column: 7, scope:
>> ![[THENBLOCK]])
>> +; CHECK: ![[ELSE]] = !DILocation(line: 2, column: 25, scope:
>> ![[ELSEBLOCK:[0-9]+]])
>> +; CHECK: ![[ELSEBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 1)
>> +; CHECK: ![[COMBINE]] = !DILocation(line: 2, column: 42, scope:
>> ![[COMBINEBLOCK:[0-9]+]])
>> +; CHECK: ![[COMBINEBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 3)
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151029/d99c7492/attachment.html>


More information about the llvm-commits mailing list