1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/Transforms/Inline/no-inline-line-tables.ll
Amy Huang 68fcd6e209 Recommit "[CodeView] Add option to disable inline line tables."
This reverts commit 004ed2b0d1b86d424643ffc88fce20ad8bab6804.
Original commit hash 6d03890384517919a3ba7fe4c35535425f278f89

Summary:
This adds a clang option to disable inline line tables. When it is used,
the inliner uses the call site as the location of the inlined function instead of
marking it as an inline location with the function location.

https://reviews.llvm.org/D67723
2019-11-04 09:15:26 -08:00

100 lines
4.5 KiB
LLVM

; RUN: opt < %s -inline -S | FileCheck %s
; This tests that functions with the attribute `no-inline-line-tables` have the
; correct debug information when they are inlined.
; ModuleID = 't.c'
source_filename = "t.c"
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-windows-msvc"
; Function Attrs: alwaysinline nounwind
define dso_local i32 @f(i32 %x) #0 !dbg !7 {
entry:
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !12, metadata !DIExpression()), !dbg !13
%0 = load i32, i32* %x.addr, align 4, !dbg !14
ret i32 %0, !dbg !14
}
; Function Attrs: nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: alwaysinline nounwind
define i32 @g(i32 %x) #0 !dbg !15 {
entry:
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !16, metadata !DIExpression()), !dbg !17
br label %L, !dbg !17
L: ; preds = %entry
call void @llvm.dbg.label(metadata !18), !dbg !19
store i32 42, i32* %x.addr, align 4, !dbg !20
%0 = load i32, i32* %x.addr, align 4, !dbg !21
ret i32 %0, !dbg !21
}
; Function Attrs: nounwind readnone speculatable willreturn
declare void @llvm.dbg.label(metadata) #1
; Check that debug info for inlined code uses the call location and that debug
; intrinsics are removed.
; Function Attrs: noinline nounwind optnone
define i32 @main() #2 !dbg !22 {
entry:
; CHECK-LABEL: @main()
; CHECK-NOT: @f
; CHECK-NOT: @llvm.dbg.declare
; CHECK: %{{[0-9]+}} = load i32, i32* %x.addr.i, align 4, !dbg ![[VAR1:[0-9]+]]
%call = call i32 @f(i32 3), !dbg !25
; Another test for inlining debug intrinsics where the intrinsic appears at the
; start of the basic block.
; CHECK-NOT: @g
; CHECK-NOT: @llvm.dbg.label
; CHECK: %{{[0-9]+}} = load i32, i32* %x.addr.i1, align 4, !dbg ![[VAR2:[0-9]+]]
%call1 = call i32 @g(i32 340), !dbg !26
ret i32 0, !dbg !27
}
; CHECK: ![[VAR1]] = !DILocation(line: 10, scope: ![[SCOPE:[0-9]+]])
; CHECK: ![[VAR2]] = !DILocation(line: 11, scope: ![[SCOPE]])
attributes #0 = { alwaysinline nounwind "no-inline-line-tables" }
attributes #2 = { noinline nounwind optnone "no-inline-line-tables"}
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4, !5}
!llvm.ident = !{!6}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 10.0.0 (https://github.com/llvm/llvm-project.git 03ec3a12a94bbbaa11999b6da3a43221a5aa54a5)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
!1 = !DIFile(filename: "<stdin>", directory: "/usr/local/google/home/akhuang/testing/inline-line-tables", checksumkind: CSK_MD5, checksum: "38a4785b48742d3ea655b8f3461436a4")
!2 = !{}
!3 = !{i32 2, !"CodeView", i32 1}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = !{i32 1, !"wchar_size", i32 4}
!6 = !{!"clang version 10.0.0 (https://github.com/llvm/llvm-project.git 03ec3a12a94bbbaa11999b6da3a43221a5aa54a5)"}
!7 = distinct !DISubprogram(name: "f", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!8 = !DIFile(filename: "t.c", directory: "/usr/local/google/home/akhuang/testing/inline-line-tables", checksumkind: CSK_MD5, checksum: "38a4785b48742d3ea655b8f3461436a4")
!9 = !DISubroutineType(types: !10)
!10 = !{!11, !11}
!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!12 = !DILocalVariable(name: "x", arg: 1, scope: !7, file: !8, line: 1, type: !11)
!13 = !DILocation(line: 1, scope: !7)
!14 = !DILocation(line: 2, scope: !7)
!15 = distinct !DISubprogram(name: "g", scope: !8, file: !8, line: 4, type: !9, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!16 = !DILocalVariable(name: "x", arg: 1, scope: !15, file: !8, line: 4, type: !11)
!17 = !DILocation(line: 4, scope: !15)
!18 = !DILabel(scope: !15, name: "L", file: !8, line: 5)
!19 = !DILocation(line: 5, scope: !15)
!20 = !DILocation(line: 6, scope: !15)
!21 = !DILocation(line: 7, scope: !15)
!22 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 9, type: !23, scopeLine: 9, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!11}
!25 = !DILocation(line: 10, scope: !22)
!26 = !DILocation(line: 11, scope: !22)
!27 = !DILocation(line: 12, scope: !22)