[polly] r252846 - Emit SCoP source location as remark during ScopInfo

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 11 18:32:33 PST 2015


Author: jdoerfert
Date: Wed Nov 11 20:32:32 2015
New Revision: 252846

URL: http://llvm.org/viewvc/llvm-project?rev=252846&view=rev
Log:
Emit SCoP source location as remark during ScopInfo

  This removes a similar feature from ScopDetection, though with
  -polly-report that feature present twice anyway.

Added:
    polly/trunk/test/ScopInfo/remarks.ll
Modified:
    polly/trunk/include/polly/ScopDetectionDiagnostic.h
    polly/trunk/lib/Analysis/ScopDetection.cpp
    polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/include/polly/ScopDetectionDiagnostic.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopDetectionDiagnostic.h?rev=252846&r1=252845&r2=252846&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopDetectionDiagnostic.h (original)
+++ polly/trunk/include/polly/ScopDetectionDiagnostic.h Wed Nov 11 20:32:32 2015
@@ -43,6 +43,9 @@ class Region;
 
 namespace polly {
 
+/// @brief Set the begin and end source location for the given region @p R.
+void getDebugLocations(const Region *R, DebugLoc &Begin, DebugLoc &End);
+
 class RejectLog;
 /// @brief Emit optimization remarks about the rejected regions to the user.
 ///
@@ -52,12 +55,6 @@ class RejectLog;
 /// @param Log The error log containing all messages being emitted as remark.
 void emitRejectionRemarks(const llvm::Function &F, const RejectLog &Log);
 
-/// @brief Emit diagnostic remarks for a valid Scop
-///
-/// @param F The function we emit remarks for
-/// @param R The region that marks a valid Scop
-void emitValidRemarks(const llvm::Function &F, const Region *R);
-
 // Discriminator for LLVM-style RTTI (dyn_cast<> et al.)
 enum RejectReasonKind {
   // CFG Category

Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=252846&r1=252845&r2=252846&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetection.cpp Wed Nov 11 20:32:32 2015
@@ -1138,9 +1138,6 @@ bool ScopDetection::runOnFunction(llvm::
     emitMissedRemarksForLeaves(F, TopRegion);
   }
 
-  for (const Region *R : ValidRegions)
-    emitValidRemarks(F, R);
-
   if (ReportLevel)
     printLocations(F);
 

Modified: polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp?rev=252846&r1=252845&r2=252846&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp Wed Nov 11 20:32:32 2015
@@ -68,7 +68,7 @@ static bool operator<(const llvm::DebugL
 }
 
 namespace polly {
-static void getDebugLocations(const Region *R, DebugLoc &Begin, DebugLoc &End) {
+void getDebugLocations(const Region *R, DebugLoc &Begin, DebugLoc &End) {
   for (const BasicBlock *BB : R->blocks())
     for (const Instruction &Inst : *BB) {
       DebugLoc DL = Inst.getDebugLoc();
@@ -102,17 +102,6 @@ void emitRejectionRemarks(const llvm::Fu
                                "Invalid Scop candidate ends here.");
 }
 
-void emitValidRemarks(const llvm::Function &F, const Region *R) {
-  LLVMContext &Ctx = F.getContext();
-
-  DebugLoc Begin, End;
-  getDebugLocations(R, Begin, End);
-
-  emitOptimizationRemark(Ctx, DEBUG_TYPE, F, Begin,
-                         "A valid Scop begins here.");
-  emitOptimizationRemark(Ctx, DEBUG_TYPE, F, End, "A valid Scop ends here.");
-}
-
 //===----------------------------------------------------------------------===//
 // RejectReason.
 const DebugLoc RejectReason::Unknown = DebugLoc();

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=252846&r1=252845&r2=252846&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Wed Nov 11 20:32:32 2015
@@ -34,6 +34,7 @@
 #include "llvm/Analysis/LoopIterator.h"
 #include "llvm/Analysis/RegionIterator.h"
 #include "llvm/Analysis/ScalarEvolutionExpressions.h"
+#include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/Support/Debug.h"
 #include "isl/aff.h"
 #include "isl/constraint.h"
@@ -3837,20 +3838,28 @@ bool ScopInfo::runOnRegion(Region *R, RG
   TD = &F->getParent()->getDataLayout();
   DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
 
+  DebugLoc Beg, End;
+  getDebugLocations(R, Beg, End);
+  std::string Msg = "SCoP begins here.";
+  emitOptimizationRemarkAnalysis(F->getContext(), DEBUG_TYPE, *F, Beg, Msg);
+
   buildScop(*R, DT);
 
   DEBUG(scop->print(dbgs()));
 
   if (scop->isEmpty() || !scop->hasFeasibleRuntimeContext()) {
+    Msg = "SCoP ends here but was dismissed.";
     delete scop;
     scop = nullptr;
-    return false;
+  } else {
+    Msg = "SCoP ends here.";
+    ++ScopFound;
+    if (scop->getMaxLoopDepth() > 0)
+      ++RichScopFound;
   }
 
-  // Statistics.
-  ++ScopFound;
-  if (scop->getMaxLoopDepth() > 0)
-    ++RichScopFound;
+  emitOptimizationRemarkAnalysis(F->getContext(), DEBUG_TYPE, *F, End, Msg);
+
   return false;
 }
 

Added: polly/trunk/test/ScopInfo/remarks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/remarks.ll?rev=252846&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/remarks.ll (added)
+++ polly/trunk/test/ScopInfo/remarks.ll Wed Nov 11 20:32:32 2015
@@ -0,0 +1,309 @@
+; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops < %s 2>&1| FileCheck %s
+;
+; CHECK: remark: test/ScopInfo/remarks.c:4:7: SCoP begins here.
+; CHECK: remark: test/ScopInfo/remarks.c:14:3: SCoP ends here.
+; CHECK: remark: test/ScopInfo/remarks.c:19:3: SCoP begins here.
+; CHECK: remark: test/ScopInfo/remarks.c:22:16: SCoP ends here but was dismissed.
+;
+;    #include <stdio.h>
+;
+;    void valid(int *A, int *B, int N, int M, int C[100][100], int Debug) {
+;      if (N + M == -1)
+;        C[0][0] = 0;
+;
+;      for (int i = 0; i < N; i++) {
+;        for (int j = 0; j != M; j++) {
+;          C[i][j] += A[i * M + j] + B[i + j];
+;        }
+;
+;        if (Debug)
+;          printf("Printf!");
+;      }
+;    }
+;
+;    void invalid0(int *A) {
+;      for (int i = 0; i < 10; i++)
+;        for (int j = 0; j < 10; j++)
+;          if (A[0])
+;            A[0] = 0;
+;    }
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+ at .str = private unnamed_addr constant [8 x i8] c"Printf!\00", align 1
+
+define void @valid(i32* %A, i32* %B, i32 %N, i32 %M, [100 x i32]* %C, i32 %Debug) #0 !dbg !4 {
+entry:
+  call void @llvm.dbg.value(metadata i32* %A, i64 0, metadata !23, metadata !24), !dbg !25
+  call void @llvm.dbg.value(metadata i32* %B, i64 0, metadata !26, metadata !24), !dbg !27
+  call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !28, metadata !24), !dbg !29
+  call void @llvm.dbg.value(metadata i32 %M, i64 0, metadata !30, metadata !24), !dbg !31
+  call void @llvm.dbg.value(metadata [100 x i32]* %C, i64 0, metadata !32, metadata !24), !dbg !33
+  call void @llvm.dbg.value(metadata i32 %Debug, i64 0, metadata !34, metadata !24), !dbg !35
+  br label %entry.split
+
+entry.split:
+  %add = add i32 %N, %M, !dbg !36
+  %cmp = icmp eq i32 %add, -1, !dbg !38
+  br i1 %cmp, label %if.then, label %if.end, !dbg !39
+
+if.then:                                          ; preds = %entry
+  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %C, i64 0, i64 0, !dbg !40
+  store i32 0, i32* %arrayidx1, align 4, !dbg !41
+  br label %if.end, !dbg !40
+
+if.end:                                           ; preds = %if.then, %entry
+  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !42, metadata !24), !dbg !44
+  %N64 = sext i32 %N to i64, !dbg !45
+  %M64 = sext i32 %M to i64, !dbg !45
+  br label %for.cond, !dbg !45
+
+for.cond:                                         ; preds = %for.inc.19, %if.end
+  %indvars.iv3 = phi i64 [ %indvars.iv.next4, %for.inc.19 ], [ 0, %if.end ]
+  %cmp2 = icmp slt i64 %indvars.iv3, %N64, !dbg !46
+  br i1 %cmp2, label %for.body, label %for.end.21, !dbg !49
+
+for.body:                                         ; preds = %for.cond
+  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !50, metadata !24), !dbg !53
+  br label %for.cond.3, !dbg !54
+
+for.cond.3:                                       ; preds = %for.inc, %for.body
+  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %for.body ]
+  %cmp4 = icmp eq i64 %indvars.iv, %M64, !dbg !55
+  br i1 %cmp4, label %for.end, label %for.body.5, !dbg !58
+
+for.body.5:                                       ; preds = %for.cond.3
+  %tmp8 = mul i64 %indvars.iv3, %M64, !dbg !59
+  %tmp9 = add i64 %tmp8, %indvars.iv, !dbg !61
+  %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %tmp9, !dbg !62
+  %tmp10 = load i32, i32* %arrayidx7, align 4, !dbg !62
+  %tmp11 = add i64 %indvars.iv3, %indvars.iv, !dbg !63
+  %arrayidx10 = getelementptr inbounds i32, i32* %B, i64 %tmp11, !dbg !64
+  %tmp12 = load i32, i32* %arrayidx10, align 4, !dbg !64
+  %add11 = add i32 %tmp10, %tmp12, !dbg !65
+  %arrayidx15 = getelementptr inbounds [100 x i32], [100 x i32]* %C, i64 %indvars.iv3, i64 %indvars.iv, !dbg !66
+  %tmp13 = load i32, i32* %arrayidx15, align 4, !dbg !67
+  %add16 = add i32 %tmp13, %add11, !dbg !67
+  store i32 %add16, i32* %arrayidx15, align 4, !dbg !67
+  br label %for.inc, !dbg !68
+
+for.inc:                                          ; preds = %for.body.5
+  %indvars.iv.next = add i64 %indvars.iv, 1, !dbg !69
+  call void @llvm.dbg.value(metadata !2, i64 0, metadata !50, metadata !24), !dbg !53
+  br label %for.cond.3, !dbg !69
+
+for.end:                                          ; preds = %for.cond.3
+  %tobool = icmp eq i32 %Debug, 0, !dbg !70
+  br i1 %tobool, label %if.end.18, label %if.then.17, !dbg !72
+
+if.then.17:                                       ; preds = %for.end
+  %call = call i32 (i8*, ...) @printf(i8* nonnull getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0)) #3, !dbg !73
+  br label %if.end.18, !dbg !73
+
+if.end.18:                                        ; preds = %for.end, %if.then.17
+  br label %for.inc.19, !dbg !74
+
+for.inc.19:                                       ; preds = %if.end.18
+  %indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 1, !dbg !75
+  call void @llvm.dbg.value(metadata !2, i64 0, metadata !42, metadata !24), !dbg !44
+  br label %for.cond, !dbg !75
+
+for.end.21:                                       ; preds = %for.cond
+  ret void, !dbg !76
+}
+
+declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
+
+declare i32 @printf(i8*, ...) #2
+
+define void @invalid0(i32* %A) #0 !dbg !13 {
+entry:
+  call void @llvm.dbg.value(metadata i32* %A, i64 0, metadata !77, metadata !24), !dbg !78
+  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !79, metadata !24), !dbg !81
+  br label %for.cond, !dbg !82
+
+for.cond:                                         ; preds = %for.inc.5, %entry
+  %i.0 = phi i32 [ 0, %entry ], [ %inc6, %for.inc.5 ]
+  %exitcond1 = icmp ne i32 %i.0, 10, !dbg !83
+  br i1 %exitcond1, label %for.body, label %for.end.7, !dbg !83
+
+for.body:                                         ; preds = %for.cond
+  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !86, metadata !24), !dbg !88
+  br label %for.cond.1, !dbg !89
+
+for.cond.1:                                       ; preds = %for.inc, %for.body
+  %j.0 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
+  %exitcond = icmp ne i32 %j.0, 10, !dbg !90
+  br i1 %exitcond, label %for.body.3, label %for.end, !dbg !90
+
+for.body.3:                                       ; preds = %for.cond.1
+  %tmp = load i32, i32* %A, align 4, !dbg !93
+  %tobool = icmp eq i32 %tmp, 0, !dbg !93
+  br i1 %tobool, label %if.end, label %if.then, !dbg !95
+
+if.then:                                          ; preds = %for.body.3
+  store i32 0, i32* %A, align 4, !dbg !96
+  br label %if.end, !dbg !97
+
+if.end:                                           ; preds = %for.body.3, %if.then
+  br label %for.inc, !dbg !98
+
+for.inc:                                          ; preds = %if.end
+  %inc = add nuw nsw i32 %j.0, 1, !dbg !100
+  call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !86, metadata !24), !dbg !88
+  br label %for.cond.1, !dbg !101
+
+for.end:                                          ; preds = %for.cond.1
+  br label %for.inc.5, !dbg !102
+
+for.inc.5:                                        ; preds = %for.end
+  %inc6 = add nuw nsw i32 %i.0, 1, !dbg !103
+  call void @llvm.dbg.value(metadata i32 %inc6, i64 0, metadata !79, metadata !24), !dbg !81
+  br label %for.cond, !dbg !104
+
+for.end.7:                                        ; preds = %for.cond
+  ret void, !dbg !105
+}
+
+declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
+
+attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "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" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { nounwind readnone }
+attributes #2 = { "disable-tail-calls"="false" "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" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #3 = { nounwind }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!20, !21}
+!llvm.ident = !{!22}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.0 (http://llvm.org/git/clang.git 65eeefc97d2eee4d075ec7d9ed56b5f0786b6421)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
+!1 = !DIFile(filename: "test/ScopInfo/remarks.c", directory: "/home/johannes/repos/llvm-polly/tools/polly")
+!2 = !{}
+!3 = !{!4, !13, !16}
+!4 = distinct !DISubprogram(name: "valid", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null, !7, !7, !8, !8, !9, !8}
+!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
+!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
+!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 64, align: 64)
+!10 = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 3200, align: 32, elements: !11)
+!11 = !{!12}
+!12 = !DISubrange(count: 100)
+!13 = distinct !DISubprogram(name: "invalid0", scope: !1, file: !1, line: 18, type: !14, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
+!14 = !DISubroutineType(types: !15)
+!15 = !{null, !7}
+!16 = distinct !DISubprogram(name: "invalid1", scope: !1, file: !1, line: 25, type: !17, isLocal: false, isDefinition: true, scopeLine: 25, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
+!17 = !DISubroutineType(types: !18)
+!18 = !{null, !19, !19}
+!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64)
+!20 = !{i32 2, !"Dwarf Version", i32 4}
+!21 = !{i32 2, !"Debug Info Version", i32 3}
+!22 = !{!"clang version 3.8.0 (http://llvm.org/git/clang.git 65eeefc97d2eee4d075ec7d9ed56b5f0786b6421)"}
+!23 = !DILocalVariable(name: "A", arg: 1, scope: !4, file: !1, line: 3, type: !7)
+!24 = !DIExpression()
+!25 = !DILocation(line: 3, column: 17, scope: !4)
+!26 = !DILocalVariable(name: "B", arg: 2, scope: !4, file: !1, line: 3, type: !7)
+!27 = !DILocation(line: 3, column: 25, scope: !4)
+!28 = !DILocalVariable(name: "N", arg: 3, scope: !4, file: !1, line: 3, type: !8)
+!29 = !DILocation(line: 3, column: 32, scope: !4)
+!30 = !DILocalVariable(name: "M", arg: 4, scope: !4, file: !1, line: 3, type: !8)
+!31 = !DILocation(line: 3, column: 39, scope: !4)
+!32 = !DILocalVariable(name: "C", arg: 5, scope: !4, file: !1, line: 3, type: !9)
+!33 = !DILocation(line: 3, column: 46, scope: !4)
+!34 = !DILocalVariable(name: "Debug", arg: 6, scope: !4, file: !1, line: 3, type: !8)
+!35 = !DILocation(line: 3, column: 63, scope: !4)
+!36 = !DILocation(line: 4, column: 9, scope: !37)
+!37 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 7)
+!38 = !DILocation(line: 4, column: 13, scope: !37)
+!39 = !DILocation(line: 4, column: 7, scope: !4)
+!40 = !DILocation(line: 5, column: 5, scope: !37)
+!41 = !DILocation(line: 5, column: 13, scope: !37)
+!42 = !DILocalVariable(name: "i", scope: !43, file: !1, line: 7, type: !8)
+!43 = distinct !DILexicalBlock(scope: !4, file: !1, line: 7, column: 3)
+!44 = !DILocation(line: 7, column: 12, scope: !43)
+!45 = !DILocation(line: 7, column: 8, scope: !43)
+!46 = !DILocation(line: 7, column: 21, scope: !47)
+!47 = !DILexicalBlockFile(scope: !48, file: !1, discriminator: 1)
+!48 = distinct !DILexicalBlock(scope: !43, file: !1, line: 7, column: 3)
+!49 = !DILocation(line: 7, column: 3, scope: !47)
+!50 = !DILocalVariable(name: "j", scope: !51, file: !1, line: 8, type: !8)
+!51 = distinct !DILexicalBlock(scope: !52, file: !1, line: 8, column: 5)
+!52 = distinct !DILexicalBlock(scope: !48, file: !1, line: 7, column: 31)
+!53 = !DILocation(line: 8, column: 14, scope: !51)
+!54 = !DILocation(line: 8, column: 10, scope: !51)
+!55 = !DILocation(line: 8, column: 23, scope: !56)
+!56 = !DILexicalBlockFile(scope: !57, file: !1, discriminator: 1)
+!57 = distinct !DILexicalBlock(scope: !51, file: !1, line: 8, column: 5)
+!58 = !DILocation(line: 8, column: 5, scope: !56)
+!59 = !DILocation(line: 9, column: 22, scope: !60)
+!60 = distinct !DILexicalBlock(scope: !57, file: !1, line: 8, column: 34)
+!61 = !DILocation(line: 9, column: 26, scope: !60)
+!62 = !DILocation(line: 9, column: 18, scope: !60)
+!63 = !DILocation(line: 9, column: 37, scope: !60)
+!64 = !DILocation(line: 9, column: 33, scope: !60)
+!65 = !DILocation(line: 9, column: 31, scope: !60)
+!66 = !DILocation(line: 9, column: 7, scope: !60)
+!67 = !DILocation(line: 9, column: 15, scope: !60)
+!68 = !DILocation(line: 10, column: 5, scope: !60)
+!69 = !DILocation(line: 8, column: 5, scope: !57)
+!70 = !DILocation(line: 12, column: 9, scope: !71)
+!71 = distinct !DILexicalBlock(scope: !52, file: !1, line: 12, column: 9)
+!72 = !DILocation(line: 12, column: 9, scope: !52)
+!73 = !DILocation(line: 13, column: 7, scope: !71)
+!74 = !DILocation(line: 14, column: 3, scope: !52)
+!75 = !DILocation(line: 7, column: 3, scope: !48)
+!76 = !DILocation(line: 16, column: 1, scope: !4)
+!77 = !DILocalVariable(name: "A", arg: 1, scope: !13, file: !1, line: 18, type: !7)
+!78 = !DILocation(line: 18, column: 20, scope: !13)
+!79 = !DILocalVariable(name: "i", scope: !80, file: !1, line: 19, type: !8)
+!80 = distinct !DILexicalBlock(scope: !13, file: !1, line: 19, column: 3)
+!81 = !DILocation(line: 19, column: 12, scope: !80)
+!82 = !DILocation(line: 19, column: 8, scope: !80)
+!83 = !DILocation(line: 19, column: 3, scope: !84)
+!84 = !DILexicalBlockFile(scope: !85, file: !1, discriminator: 1)
+!85 = distinct !DILexicalBlock(scope: !80, file: !1, line: 19, column: 3)
+!86 = !DILocalVariable(name: "j", scope: !87, file: !1, line: 20, type: !8)
+!87 = distinct !DILexicalBlock(scope: !85, file: !1, line: 20, column: 5)
+!88 = !DILocation(line: 20, column: 14, scope: !87)
+!89 = !DILocation(line: 20, column: 10, scope: !87)
+!90 = !DILocation(line: 20, column: 5, scope: !91)
+!91 = !DILexicalBlockFile(scope: !92, file: !1, discriminator: 1)
+!92 = distinct !DILexicalBlock(scope: !87, file: !1, line: 20, column: 5)
+!93 = !DILocation(line: 21, column: 11, scope: !94)
+!94 = distinct !DILexicalBlock(scope: !92, file: !1, line: 21, column: 11)
+!95 = !DILocation(line: 21, column: 11, scope: !92)
+!96 = !DILocation(line: 22, column: 14, scope: !94)
+!97 = !DILocation(line: 22, column: 9, scope: !94)
+!98 = !DILocation(line: 21, column: 14, scope: !99)
+!99 = !DILexicalBlockFile(scope: !94, file: !1, discriminator: 1)
+!100 = !DILocation(line: 20, column: 30, scope: !92)
+!101 = !DILocation(line: 20, column: 5, scope: !92)
+!102 = !DILocation(line: 22, column: 16, scope: !87)
+!103 = !DILocation(line: 19, column: 28, scope: !85)
+!104 = !DILocation(line: 19, column: 3, scope: !85)
+!105 = !DILocation(line: 23, column: 1, scope: !13)
+!106 = !DILocalVariable(name: "A", arg: 1, scope: !16, file: !1, line: 25, type: !19)
+!107 = !DILocation(line: 25, column: 21, scope: !16)
+!108 = !DILocalVariable(name: "B", arg: 2, scope: !16, file: !1, line: 25, type: !19)
+!109 = !DILocation(line: 25, column: 30, scope: !16)
+!110 = !DILocalVariable(name: "i", scope: !111, file: !1, line: 26, type: !8)
+!111 = distinct !DILexicalBlock(scope: !16, file: !1, line: 26, column: 3)
+!112 = !DILocation(line: 26, column: 12, scope: !111)
+!113 = !DILocation(line: 26, column: 8, scope: !111)
+!114 = !DILocation(line: 26, column: 3, scope: !115)
+!115 = !DILexicalBlockFile(scope: !116, file: !1, discriminator: 1)
+!116 = distinct !DILexicalBlock(scope: !111, file: !1, line: 26, column: 3)
+!117 = !DILocalVariable(name: "j", scope: !118, file: !1, line: 27, type: !8)
+!118 = distinct !DILexicalBlock(scope: !116, file: !1, line: 27, column: 5)
+!119 = !DILocation(line: 27, column: 14, scope: !118)
+!120 = !DILocation(line: 27, column: 10, scope: !118)
+!121 = !DILocation(line: 27, column: 5, scope: !122)
+!122 = !DILexicalBlockFile(scope: !123, file: !1, discriminator: 1)
+!123 = distinct !DILexicalBlock(scope: !118, file: !1, line: 27, column: 5)
+!124 = !DILocation(line: 28, column: 17, scope: !123)
+!125 = !DILocation(line: 28, column: 7, scope: !123)
+!126 = !DILocation(line: 28, column: 15, scope: !123)
+!127 = !DILocation(line: 27, column: 5, scope: !123)
+!128 = !DILocation(line: 28, column: 23, scope: !118)
+!129 = !DILocation(line: 26, column: 3, scope: !116)
+!130 = !DILocation(line: 29, column: 1, scope: !16)




More information about the llvm-commits mailing list