12c21278eSAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s 3d109f94fSJeremy Morse; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s --try-experimental-debuginfo-iterators | FileCheck %s 4cea80760SAndrew Litteken 52c21278eSAndrew Litteken; This test checks that debug info is recognized as able to be extracted along 62c21278eSAndrew Litteken; with the other instructions, but is not included in the consolidated function. 7cea80760SAndrew Litteken 8cea80760SAndrew Littekendefine void @function1() !dbg !6 { 9cea80760SAndrew Littekenentry: 10cea80760SAndrew Litteken %a = alloca i32, align 4, !dbg !17 11f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %a, metadata !9, metadata !DIExpression()), !dbg !17 12cea80760SAndrew Litteken %b = alloca i32, align 4, !dbg !18 13f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %b, metadata !11, metadata !DIExpression()), !dbg !18 14cea80760SAndrew Litteken %c = alloca i32, align 4, !dbg !19 15f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %c, metadata !12, metadata !DIExpression()), !dbg !19 16f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4, !dbg !20 17f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4, !dbg !21 18f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4, !dbg !22 19f4b925eeSMatt Arsenault %al = load i32, ptr %a, align 4, !dbg !23 20cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %al, metadata !13, metadata !DIExpression()), !dbg !23 21f4b925eeSMatt Arsenault %bl = load i32, ptr %b, align 4, !dbg !24 22cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %bl, metadata !15, metadata !DIExpression()), !dbg !24 23f4b925eeSMatt Arsenault %cl = load i32, ptr %c, align 4, !dbg !25 24cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %cl, metadata !16, metadata !DIExpression()), !dbg !25 25cea80760SAndrew Litteken ret void, !dbg !26 26cea80760SAndrew Litteken} 27cea80760SAndrew Litteken 28cea80760SAndrew Littekendefine void @function2() !dbg !27 { 29cea80760SAndrew Littekenentry: 30cea80760SAndrew Litteken %a = alloca i32, align 4, !dbg !35 31f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %a, metadata !29, metadata !DIExpression()), !dbg !35 32cea80760SAndrew Litteken %b = alloca i32, align 4, !dbg !36 33f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %b, metadata !30, metadata !DIExpression()), !dbg !36 34cea80760SAndrew Litteken %c = alloca i32, align 4, !dbg !37 35f4b925eeSMatt Arsenault call void @llvm.dbg.value(metadata ptr %c, metadata !31, metadata !DIExpression()), !dbg !37 36f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4, !dbg !38 37f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4, !dbg !39 38f4b925eeSMatt Arsenault store i32 4, ptr %c, align 4, !dbg !40 39f4b925eeSMatt Arsenault %al = load i32, ptr %a, align 4, !dbg !41 40cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %al, metadata !32, metadata !DIExpression()), !dbg !41 41f4b925eeSMatt Arsenault %bl = load i32, ptr %b, align 4, !dbg !42 42cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %bl, metadata !33, metadata !DIExpression()), !dbg !42 43f4b925eeSMatt Arsenault %cl = load i32, ptr %c, align 4, !dbg !43 44cea80760SAndrew Litteken call void @llvm.dbg.value(metadata i32 %cl, metadata !34, metadata !DIExpression()), !dbg !43 45cea80760SAndrew Litteken ret void, !dbg !44 46cea80760SAndrew Litteken} 47cea80760SAndrew Litteken 482c21278eSAndrew Litteken 49cea80760SAndrew Litteken; Function Attrs: nounwind readnone speculatable willreturn 50cea80760SAndrew Littekendeclare void @llvm.dbg.value(metadata, metadata, metadata) #0 51cea80760SAndrew Litteken 52cea80760SAndrew Littekenattributes #0 = { nounwind readnone speculatable willreturn } 53cea80760SAndrew Litteken 54cea80760SAndrew Litteken!llvm.dbg.cu = !{!0} 55cea80760SAndrew Litteken!llvm.debugify = !{!3, !4} 56cea80760SAndrew Litteken!llvm.module.flags = !{!5} 57cea80760SAndrew Litteken 58cea80760SAndrew Litteken!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) 59cea80760SAndrew Litteken!1 = !DIFile(filename: "legal-debug.ll", directory: "/") 60cea80760SAndrew Litteken!2 = !{} 61cea80760SAndrew Litteken!3 = !{i32 20} 62cea80760SAndrew Litteken!4 = !{i32 12} 63cea80760SAndrew Litteken!5 = !{i32 2, !"Debug Info Version", i32 3} 64cea80760SAndrew Litteken!6 = distinct !DISubprogram(name: "function1", linkageName: "function1", scope: null, file: !1, line: 1, type: !7, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !8) 65cea80760SAndrew Litteken!7 = !DISubroutineType(types: !2) 66cea80760SAndrew Litteken!8 = !{!9, !11, !12, !13, !15, !16} 67cea80760SAndrew Litteken!9 = !DILocalVariable(name: "1", scope: !6, file: !1, line: 1, type: !10) 68cea80760SAndrew Litteken!10 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned) 69cea80760SAndrew Litteken!11 = !DILocalVariable(name: "2", scope: !6, file: !1, line: 2, type: !10) 70cea80760SAndrew Litteken!12 = !DILocalVariable(name: "3", scope: !6, file: !1, line: 3, type: !10) 71cea80760SAndrew Litteken!13 = !DILocalVariable(name: "4", scope: !6, file: !1, line: 7, type: !14) 72cea80760SAndrew Litteken!14 = !DIBasicType(name: "ty32", size: 32, encoding: DW_ATE_unsigned) 73cea80760SAndrew Litteken!15 = !DILocalVariable(name: "5", scope: !6, file: !1, line: 8, type: !14) 74cea80760SAndrew Litteken!16 = !DILocalVariable(name: "6", scope: !6, file: !1, line: 9, type: !14) 75cea80760SAndrew Litteken!17 = !DILocation(line: 1, column: 1, scope: !6) 76cea80760SAndrew Litteken!18 = !DILocation(line: 2, column: 1, scope: !6) 77cea80760SAndrew Litteken!19 = !DILocation(line: 3, column: 1, scope: !6) 78cea80760SAndrew Litteken!20 = !DILocation(line: 4, column: 1, scope: !6) 79cea80760SAndrew Litteken!21 = !DILocation(line: 5, column: 1, scope: !6) 80cea80760SAndrew Litteken!22 = !DILocation(line: 6, column: 1, scope: !6) 81cea80760SAndrew Litteken!23 = !DILocation(line: 7, column: 1, scope: !6) 82cea80760SAndrew Litteken!24 = !DILocation(line: 8, column: 1, scope: !6) 83cea80760SAndrew Litteken!25 = !DILocation(line: 9, column: 1, scope: !6) 84cea80760SAndrew Litteken!26 = !DILocation(line: 10, column: 1, scope: !6) 85cea80760SAndrew Litteken!27 = distinct !DISubprogram(name: "function2", linkageName: "function2", scope: null, file: !1, line: 11, type: !7, scopeLine: 11, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !28) 86cea80760SAndrew Litteken!28 = !{!29, !30, !31, !32, !33, !34} 87cea80760SAndrew Litteken!29 = !DILocalVariable(name: "7", scope: !27, file: !1, line: 11, type: !10) 88cea80760SAndrew Litteken!30 = !DILocalVariable(name: "8", scope: !27, file: !1, line: 12, type: !10) 89cea80760SAndrew Litteken!31 = !DILocalVariable(name: "9", scope: !27, file: !1, line: 13, type: !10) 90cea80760SAndrew Litteken!32 = !DILocalVariable(name: "10", scope: !27, file: !1, line: 17, type: !14) 91cea80760SAndrew Litteken!33 = !DILocalVariable(name: "11", scope: !27, file: !1, line: 18, type: !14) 92cea80760SAndrew Litteken!34 = !DILocalVariable(name: "12", scope: !27, file: !1, line: 19, type: !14) 93cea80760SAndrew Litteken!35 = !DILocation(line: 11, column: 1, scope: !27) 94cea80760SAndrew Litteken!36 = !DILocation(line: 12, column: 1, scope: !27) 95cea80760SAndrew Litteken!37 = !DILocation(line: 13, column: 1, scope: !27) 96cea80760SAndrew Litteken!38 = !DILocation(line: 14, column: 1, scope: !27) 97cea80760SAndrew Litteken!39 = !DILocation(line: 15, column: 1, scope: !27) 98cea80760SAndrew Litteken!40 = !DILocation(line: 16, column: 1, scope: !27) 99cea80760SAndrew Litteken!41 = !DILocation(line: 17, column: 1, scope: !27) 100cea80760SAndrew Litteken!42 = !DILocation(line: 18, column: 1, scope: !27) 101cea80760SAndrew Litteken!43 = !DILocation(line: 19, column: 1, scope: !27) 102cea80760SAndrew Litteken!44 = !DILocation(line: 20, column: 1, scope: !27) 1032c21278eSAndrew Litteken; CHECK-LABEL: @function1( 1042c21278eSAndrew Litteken; CHECK-NEXT: entry: 1052c21278eSAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4, !dbg [[DBG17:![0-9]+]] 106*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[A]], [[META9:![0-9]+]], !DIExpression(), [[DBG17]]) 1072c21278eSAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4, !dbg [[DBG18:![0-9]+]] 108*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[B]], [[META11:![0-9]+]], !DIExpression(), [[DBG18]]) 1092c21278eSAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4, !dbg [[DBG19:![0-9]+]] 110*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[C]], [[META12:![0-9]+]], !DIExpression(), [[DBG19]]) 111f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]), !dbg [[DBG20:![0-9]+]] 1122c21278eSAndrew Litteken; CHECK-NEXT: ret void, !dbg [[DBG21:![0-9]+]] 1132c21278eSAndrew Litteken; 1142c21278eSAndrew Litteken; 1152c21278eSAndrew Litteken; CHECK-LABEL: @function2( 1162c21278eSAndrew Litteken; CHECK-NEXT: entry: 1172c21278eSAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4, !dbg [[DBG30:![0-9]+]] 118*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[A]], [[META24:![0-9]+]], !DIExpression(), [[DBG30]]) 1192c21278eSAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4, !dbg [[DBG31:![0-9]+]] 120*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[B]], [[META25:![0-9]+]], !DIExpression(), [[DBG31]]) 1212c21278eSAndrew Litteken; CHECK-NEXT: [[C:%.*]] = alloca i32, align 4, !dbg [[DBG32:![0-9]+]] 122*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(ptr [[C]], [[META26:![0-9]+]], !DIExpression(), [[DBG32]]) 123f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]], ptr [[C]]), !dbg [[DBG33:![0-9]+]] 1242c21278eSAndrew Litteken; CHECK-NEXT: ret void, !dbg [[DBG34:![0-9]+]] 1252c21278eSAndrew Litteken; 1262c21278eSAndrew Litteken; 127*09457270SStephen Tozer; CHECK-LABEL: define {{.+}} @outlined_ir_func_0( 128*09457270SStephen Tozer; CHECK-NEXT: newFuncRoot: 129*09457270SStephen Tozer; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]] 1302c21278eSAndrew Litteken; CHECK: entry_to_outline: 131*09457270SStephen Tozer; CHECK-NEXT: store i32 2, ptr [[TMP0:%.*]], align 4 132*09457270SStephen Tozer; CHECK-NEXT: store i32 3, ptr [[TMP1:%.*]], align 4 133*09457270SStephen Tozer; CHECK-NEXT: store i32 4, ptr [[TMP2:%.*]], align 4 134f4b925eeSMatt Arsenault; CHECK-NEXT: [[AL:%.*]] = load i32, ptr [[TMP0]], align 4 135f4b925eeSMatt Arsenault; CHECK-NEXT: [[BL:%.*]] = load i32, ptr [[TMP1]], align 4 136f4b925eeSMatt Arsenault; CHECK-NEXT: [[CL:%.*]] = load i32, ptr [[TMP2]], align 4 1372c21278eSAndrew Litteken; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]] 138*09457270SStephen Tozer; CHECK: entry_after_outline.exitStub: 139*09457270SStephen Tozer; CHECK-NEXT: ret void 1402c21278eSAndrew Litteken; 141