[MIPS] Update mips-abs-got.s to not use .reloc
[lldb.git] / llvm / test / Transforms / Inline / inlined-loop-metadata.ll
1 ; This test checks that the !llvm.loop metadata has been updated after inlining
2 ; so that the start and end locations refer to the inlined DILocations.
3
4 ; RUN: opt -loop-vectorize -inline %s -S 2>&1 | FileCheck %s
5 ; CHECK: br i1 %{{.*}}, label %middle.block.i, label %vector.body.i, !dbg !{{[0-9]+}}, !llvm.loop [[VECTOR:![0-9]+]]
6 ; CHECK: br i1 %{{.*}}, label %for.cond.cleanup.loopexit.i, label %for.body.i, !dbg !{{[0-9]+}}, !llvm.loop [[SCALAR:![0-9]+]]
7 ; CHECK-DAG: [[VECTOR]] = distinct !{[[VECTOR]], [[START:![0-9]+]], [[END:![0-9]+]], [[IS_VECTORIZED:![0-9]+]]}
8 ; CHECK-DAG: [[SCALAR]] = distinct !{[[SCALAR]], [[START]], [[END]], [[NO_UNROLL:![0-9]+]], [[IS_VECTORIZED]]}
9 ; CHECK-DAG: [[IS_VECTORIZED]] = !{!"llvm.loop.isvectorized", i32 1}
10 ; CHECK-DAG: [[NO_UNROLL]] = !{!"llvm.loop.unroll.runtime.disable"}
11
12 ; This IR can be generated by running:
13 ;   clang -emit-llvm -S -gmlt -O2 inlined.cpp -o before.ll -mllvm -opt-bisect-limit=53
14 ;
15 ; Where inlined.cpp contains:
16 ; extern int *Array;
17 ; static int bar(unsigned x)
18 ; {
19 ;   int Ret = 0;
20 ;   for (unsigned i = 0; i < x; ++i)
21 ;   {
22 ;     Ret += Array[i] * i;
23 ;   }
24 ;   return Ret;
25 ; }
26 ;
27 ; int foo(unsigned x)
28 ; {
29 ;   int Bar = bar(x);
30 ;   return Bar;
31 ; }
32
33 ; ModuleID = 'inlined.cpp'
34 source_filename = "inlined.cpp"
35 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
36 target triple = "x86_64-pc-windows-msvc19.16.27030"
37
38 @"?Array@@3PEAHEA" = external dso_local local_unnamed_addr global i32*, align 8
39
40 ; Function Attrs: nounwind uwtable
41 define dso_local i32 @"?foo@@YAHI@Z"(i32 %x) local_unnamed_addr !dbg !8 {
42 entry:
43   %call = call fastcc i32 @"?bar@@YAHI@Z"(i32 %x), !dbg !10
44   ret i32 %call, !dbg !11
45 }
46
47 ; Function Attrs: norecurse nounwind readonly uwtable
48 define internal fastcc i32 @"?bar@@YAHI@Z"(i32 %x) unnamed_addr !dbg !12 {
49 entry:
50   %cmp7 = icmp eq i32 %x, 0, !dbg !13
51   br i1 %cmp7, label %for.cond.cleanup, label %for.body.lr.ph, !dbg !13
52
53 for.body.lr.ph:                                   ; preds = %entry
54   %0 = load i32*, i32** @"?Array@@3PEAHEA", align 8, !dbg !14, !tbaa !15
55   %wide.trip.count = zext i32 %x to i64, !dbg !14
56   br label %for.body, !dbg !13
57
58 for.cond.cleanup.loopexit:                        ; preds = %for.body
59   %add.lcssa = phi i32 [ %add, %for.body ], !dbg !19
60   br label %for.cond.cleanup, !dbg !20
61
62 for.cond.cleanup:                                 ; preds = %for.cond.cleanup.loopexit, %entry
63   %Ret.0.lcssa = phi i32 [ 0, %entry ], [ %add.lcssa, %for.cond.cleanup.loopexit ], !dbg !14
64   ret i32 %Ret.0.lcssa, !dbg !20
65
66 for.body:                                         ; preds = %for.body, %for.body.lr.ph
67   %indvars.iv = phi i64 [ 0, %for.body.lr.ph ], [ %indvars.iv.next, %for.body ]
68   %Ret.08 = phi i32 [ 0, %for.body.lr.ph ], [ %add, %for.body ]
69   %arrayidx = getelementptr inbounds i32, i32* %0, i64 %indvars.iv, !dbg !19
70   %1 = load i32, i32* %arrayidx, align 4, !dbg !19, !tbaa !21
71   %2 = trunc i64 %indvars.iv to i32, !dbg !19
72   %mul = mul i32 %1, %2, !dbg !19
73   %add = add i32 %mul, %Ret.08, !dbg !19
74   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !13
75   %exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count, !dbg !13
76   br i1 %exitcond, label %for.cond.cleanup.loopexit, label %for.body, !dbg !13, !llvm.loop !23
77 }
78
79 !llvm.dbg.cu = !{!0}
80 !llvm.module.flags = !{!3, !4, !5, !6}
81 !llvm.ident = !{!7}
82
83 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 9.0.0 (https://github.com/llvm/llvm-project.git b1e28d9b6a16380ccf1456fe0695f639364407a9)", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2, nameTableKind: None)
84 !1 = !DIFile(filename: "inlined.cpp", directory: "")
85 !2 = !{}
86 !3 = !{i32 2, !"CodeView", i32 1}
87 !4 = !{i32 2, !"Debug Info Version", i32 3}
88 !5 = !{i32 1, !"wchar_size", i32 2}
89 !6 = !{i32 7, !"PIC Level", i32 2}
90 !7 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git b1e28d9b6a16380ccf1456fe0695f639364407a9)"}
91 !8 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 13, type: !9, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
92 !9 = !DISubroutineType(types: !2)
93 !10 = !DILocation(line: 15, scope: !8)
94 !11 = !DILocation(line: 16, scope: !8)
95 !12 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 3, type: !9, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
96 !13 = !DILocation(line: 6, scope: !12)
97 !14 = !DILocation(line: 0, scope: !12)
98 !15 = !{!16, !16, i64 0}
99 !16 = !{!"any pointer", !17, i64 0}
100 !17 = !{!"omnipotent char", !18, i64 0}
101 !18 = !{!"Simple C++ TBAA"}
102 !19 = !DILocation(line: 8, scope: !12)
103 !20 = !DILocation(line: 10, scope: !12)
104 !21 = !{!22, !22, i64 0}
105 !22 = !{!"int", !17, i64 0}
106 !23 = distinct !{!23, !13, !24}
107 !24 = !DILocation(line: 9, scope: !12)
108