blob: 8b857a449f07fc2af438e9b181773fdf216e5665 [file] [log] [blame]
Dehao Chen20866ed2016-09-19 18:38:14 +00001; RUN: opt < %s -instcombine -sample-profile -sample-profile-file=%S/Inputs/einline.prof -S | FileCheck %s
Dehao Chen41cde0b2016-09-18 23:11:37 +00002
3; Checks if both call and invoke can be inlined early if their inlined
4; instances are hot in profile.
5
6target triple = "x86_64-unknown-linux-gnu"
7
8@_ZTIi = external constant i8*
9
10; Function Attrs: uwtable
11define void @_Z3foov() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !6 {
12 %1 = alloca i8*
13 %2 = alloca i32
14 %3 = alloca i32, align 4
Dehao Chen3a81f842017-09-14 17:29:56 +000015; CHECK: call void @no_inline
16 call void @no_inline(), !dbg !16
Dehao Chen41cde0b2016-09-18 23:11:37 +000017; CHECK-NOT: call
18 call void @_ZL3barv(), !dbg !9
19; CHECK-NOT: invoke
20 invoke void @_ZL3barv()
21 to label %4 unwind label %5, !dbg !10
22
23; <label>:4:
24 ret void
25
26; <label>:5:
27 %6 = landingpad { i8*, i32 }
28 catch i8* bitcast (i8** @_ZTIi to i8*)
29 ret void
30}
31
32; Function Attrs: nounwind uwtable
Dehao Chenbe707f22017-09-13 21:49:36 +000033define internal void @_ZL3barv() #0 !dbg !12 {
Dehao Chen41cde0b2016-09-18 23:11:37 +000034 ret void
35}
36
Dehao Chen50f2aa12017-06-21 17:57:43 +000037; CHECK-LABEL: @recursive
Dehao Chenbe707f22017-09-13 21:49:36 +000038define void @recursive() #0 !dbg !13 {
Dehao Chen50f2aa12017-06-21 17:57:43 +000039; Recursive calls should not be early-inlined.
40; CHECK-NOT: call void @recursive
41; CHECK: call void @recursive
42; CHECK: call void @recursive
43; CHECK-NOT: call void @recursive
44; CHECK: ret
45 call void @recursive(), !dbg !14
46 call void @recursive(), !dbg !15
47 ret void
48}
49
Dehao Chen3a81f842017-09-14 17:29:56 +000050; The callee has mismatch attributes to the caller, it should not be inlined
51define void @no_inline() #1 !dbg !17 {
52 ret void
53}
54
Dehao Chen41cde0b2016-09-18 23:11:37 +000055declare i32 @__gxx_personality_v0(...)
56
Dehao Chen3a81f842017-09-14 17:29:56 +000057attributes #0 = {"target-features"="+sse4.1"}
58attributes #1 = {"target-features"="+sse4.2"}
59
Dehao Chen41cde0b2016-09-18 23:11:37 +000060!llvm.dbg.cu = !{!0}
61!llvm.module.flags = !{!3, !4}
62
63!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
64!1 = !DIFile(filename: "a", directory: "b/")
65!3 = !{i32 2, !"Dwarf Version", i32 4}
66!4 = !{i32 2, !"Debug Info Version", i32 3}
Justin Bognerefc3fbf2017-02-17 23:57:42 +000067!6 = distinct !DISubprogram(linkageName: "_Z3foov", scope: !1, file: !1, line: 5, scopeLine: 5, unit: !0)
Dehao Chen41cde0b2016-09-18 23:11:37 +000068!9 = !DILocation(line: 6, column: 3, scope: !6)
69!10 = !DILocation(line: 8, column: 5, scope: !11)
70!11 = distinct !DILexicalBlock(scope: !6, file: !1, line: 7, column: 7)
Justin Bognerefc3fbf2017-02-17 23:57:42 +000071!12 = distinct !DISubprogram(linkageName: "_ZL3barv", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
Dehao Chen50f2aa12017-06-21 17:57:43 +000072!13 = distinct !DISubprogram(linkageName: "recursive", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
73!14 = !DILocation(line: 21, column: 3, scope: !13)
74!15 = !DILocation(line: 22, column: 3, scope: !13)
Dehao Chen3a81f842017-09-14 17:29:56 +000075!16 = !DILocation(line: 7, column: 3, scope: !6)
76!17 = distinct !DISubprogram(linkageName: "no_inline", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)