xref: /llvm-project/llvm/test/Transforms/Inline/ML/skip-unreachable.ll (revision 7f24e574d434eb54675abb452b7e673302e7bd3d)
1; Test skipping inlining when the callsite is unreachable (for both mandatory
2; and non-mandatory cases)
3; REQUIRES: llvm_inliner_model_autogenerated
4; RUN: opt -passes=inliner-ml-advisor-release -S < %s | FileCheck %s --check-prefix=CHECK
5
6target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
7target triple = "x86_64-grtev4-linux-gnu"
8
9; Mandatory case
10define i32 @f1() {
11entry:
12  br label %exit
13some_bb:  ; unreachable - has no predecessors
14  %r = call i32 @f2()
15  br label %exit
16exit:
17  ret i32 1
18}
19
20define i32 @f2() #0 {
21  ret i32 2
22}
23
24; Non-mandatory case
25define i32 @f3() {
26entry:
27  br label %exit
28some_bb:  ; unreachable - has no predecessors
29  %r = call i32 @f4()
30  br label %exit
31exit:
32  ret i32 1
33}
34
35define i32 @f4() {
36  ret i32 2
37}
38
39attributes #0 = { alwaysinline }
40
41; CHECK-LABEL: @f1
42; CHECK-LABEL: some_bb
43; CHECK-NEXT: call i32 @f2
44; CHECK-LABEL: @f3
45; CHECK-LABEL: some_bb
46; CHECK-NEXT: call i32 @f4
47