xref: /llvm-project/llvm/test/Transforms/IROutliner/outlining-strip-loop-info.ll (revision 9dd9575c55c74810675d5de40f56b37dd38fe3c3)
1f7d90ad5SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
2*9dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s
3f7d90ad5SAndrew Litteken
4f7d90ad5SAndrew Litteken; Make sure that we strip loop debug info from instructions that are outlined as
5f7d90ad5SAndrew Litteken; well as regular debug info.
6f7d90ad5SAndrew Litteken
7f7d90ad5SAndrew Littekendefine void @ham(i64 %arg0, i64 %arg1) !dbg !1 {
8f7d90ad5SAndrew Littekenbb0:
9f7d90ad5SAndrew Litteken  br label %bb1
10f7d90ad5SAndrew Littekenbb1:
11f7d90ad5SAndrew Litteken  %phi = phi i64 [ 0, %bb0 ], [ %arg1, %bb1 ]
12f7d90ad5SAndrew Litteken  %icmp = icmp ult i64 %phi, %arg0
13f7d90ad5SAndrew Litteken  br i1 %icmp, label %bb1, label %bb2, !dbg !7, !llvm.loop !11
14f7d90ad5SAndrew Litteken
15f7d90ad5SAndrew Littekenbb2:
16f7d90ad5SAndrew Litteken  ret void
17f7d90ad5SAndrew Litteken}
18f7d90ad5SAndrew Litteken
19f7d90ad5SAndrew Littekendefine void @wombat(i64 %arg0, i64 %arg1) !dbg !13 {
20f7d90ad5SAndrew Littekenbb0:
21f7d90ad5SAndrew Litteken  br label %bb1
22f7d90ad5SAndrew Littekenbb1:
23f7d90ad5SAndrew Litteken  %phi = phi i64 [ 0, %bb0 ], [ %arg1, %bb1 ]
24f7d90ad5SAndrew Litteken  %icmp = icmp ult i64 %phi, %arg0
25f7d90ad5SAndrew Litteken  br i1 %icmp, label %bb1, label %bb2
26f7d90ad5SAndrew Litteken
27f7d90ad5SAndrew Littekenbb2:
28f7d90ad5SAndrew Litteken  ret void
29f7d90ad5SAndrew Litteken}
30f7d90ad5SAndrew Litteken
31f7d90ad5SAndrew Litteken!llvm.module.flags = !{!0}
32f7d90ad5SAndrew Litteken!llvm.dbg.cu = !{}
33f7d90ad5SAndrew Litteken
34f7d90ad5SAndrew Litteken!0 = !{i32 2, !"Debug Info Version", i32 3}
35f7d90ad5SAndrew Litteken!1 = distinct !DISubprogram(name: "ham", scope: !2, file: !2, line: 160, type: !3, scopeLine: 161, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5)
36f7d90ad5SAndrew Litteken!2 = !DIFile(filename: "file", directory: "dir")
37f7d90ad5SAndrew Litteken!3 = !DISubroutineType(types: !4)
38f7d90ad5SAndrew Litteken!4 = !{}
39f7d90ad5SAndrew Litteken!5 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !6, producer: "ver", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, nameTableKind: None, sysroot: "sysroot", sdk: "sdk")
40f7d90ad5SAndrew Litteken!6 = !DIFile(filename: "file", directory: "dir")
41f7d90ad5SAndrew Litteken!7 = !DILocation(line: 354, column: 13, scope: !8, inlinedAt: !10)
42f7d90ad5SAndrew Litteken!8 = distinct !DISubprogram(name: "baz", scope: !9, file: !9, line: 345, type: !3, scopeLine: 346, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5)
43f7d90ad5SAndrew Litteken!9 = !DIFile(filename: "file", directory: "dir")
44f7d90ad5SAndrew Litteken!10 = distinct !DILocation(line: 164, column: 15, scope: !1)
45f7d90ad5SAndrew Litteken!11 = distinct !{!11, !7, !12}
46f7d90ad5SAndrew Litteken!12 = !DILocation(line: 355, column: 37, scope: !8, inlinedAt: !10)
47f7d90ad5SAndrew Litteken!13 = distinct !DISubprogram(name: "wombat", scope: !2, file: !2, line: 172, type: !3, scopeLine: 173, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5)
48f7d90ad5SAndrew Litteken!14 = distinct !DISubprogram(name: "bar", scope: !15, file: !15, line: 219, type: !3, scopeLine: 220, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5)
49f7d90ad5SAndrew Litteken!15 = !DIFile(filename: "file", directory: "dir")
50f7d90ad5SAndrew Litteken
51f7d90ad5SAndrew Litteken; CHECK-LABEL: @ham(
52f7d90ad5SAndrew Litteken; CHECK-NEXT:  bb0:
53f7d90ad5SAndrew Litteken; CHECK-NEXT:    call void @outlined_ir_func_0(i64 [[ARG1:%.*]], i64 [[ARG0:%.*]]), !dbg [[DBG6:![0-9]+]]
54f7d90ad5SAndrew Litteken; CHECK-NEXT:    br label [[BB2:%.*]]
55f7d90ad5SAndrew Litteken; CHECK:       bb2:
56f7d90ad5SAndrew Litteken; CHECK-NEXT:    ret void
57f7d90ad5SAndrew Litteken;
58f7d90ad5SAndrew Litteken;
59f7d90ad5SAndrew Litteken; CHECK-LABEL: @wombat(
60f7d90ad5SAndrew Litteken; CHECK-NEXT:  bb0:
61f7d90ad5SAndrew Litteken; CHECK-NEXT:    call void @outlined_ir_func_0(i64 [[ARG1:%.*]], i64 [[ARG0:%.*]]), !dbg [[DBG10:![0-9]+]]
62f7d90ad5SAndrew Litteken; CHECK-NEXT:    br label [[BB2:%.*]]
63f7d90ad5SAndrew Litteken; CHECK:       bb2:
64f7d90ad5SAndrew Litteken; CHECK-NEXT:    ret void
65f7d90ad5SAndrew Litteken;
66f7d90ad5SAndrew Litteken;
67f7d90ad5SAndrew Litteken; CHECK-LABEL: define internal void @outlined_ir_func_0(
68f7d90ad5SAndrew Litteken; CHECK-NEXT:  newFuncRoot:
69f7d90ad5SAndrew Litteken; CHECK-NEXT:    br label [[BB0_TO_OUTLINE:%.*]]
70f7d90ad5SAndrew Litteken; CHECK:       bb0_to_outline:
71f7d90ad5SAndrew Litteken; CHECK-NEXT:    br label [[BB1:%.*]]
72f7d90ad5SAndrew Litteken; CHECK:       bb1:
73f7d90ad5SAndrew Litteken; CHECK-NEXT:    [[PHI:%.*]] = phi i64 [ 0, [[BB0_TO_OUTLINE]] ], [ [[TMP0:%.*]], [[BB1]] ]
74f7d90ad5SAndrew Litteken; CHECK-NEXT:    [[ICMP:%.*]] = icmp ult i64 [[PHI]], [[TMP1:%.*]]
75f7d90ad5SAndrew Litteken; CHECK-NEXT:    br i1 [[ICMP]], label [[BB1]], label [[BB2_EXITSTUB:%.*]], !llvm.loop [[LOOP12:![0-9]+]]
76f7d90ad5SAndrew Litteken; CHECK:       bb2.exitStub:
77f7d90ad5SAndrew Litteken; CHECK-NEXT:    ret void
78f7d90ad5SAndrew Litteken;
79