blob: 7598222325678c8e89850342bb7d03346b4969ae [file] [log] [blame]
Sjoerd Meijera1e8b752021-09-08 11:24:58 +01001; RUN: opt -function-specialization -func-specialization-size-threshold=3 -S < %s | FileCheck %s
Sjoerd Meijerc4a09692021-05-04 15:12:44 +01002
Sjoerd Meijerc4a09692021-05-04 15:12:44 +01003define i64 @main(i64 %x, i1 %flag) {
Sjoerd Meijera1e8b752021-09-08 11:24:58 +01004;
5; CHECK-LABEL: @main(i64 %x, i1 %flag) {
6; CHECK: entry:
7; CHECK-NEXT: br i1 %flag, label %plus, label %minus
8; CHECK: plus:
9; CHECK-NEXT: [[TMP0:%.+]] = call i64 @compute.1(i64 %x, i64 (i64)* @plus)
10; CHECK-NEXT: br label %merge
11; CHECK: minus:
12; CHECK-NEXT: [[TMP1:%.+]] = call i64 @compute.2(i64 %x, i64 (i64)* @minus)
13; CHECK-NEXT: br label %merge
14; CHECK: merge:
15; CHECK-NEXT: [[TMP2:%.+]] = phi i64 [ [[TMP0]], %plus ], [ [[TMP1]], %minus ]
16; CHECK-NEXT: ret i64 [[TMP2]]
17; CHECK-NEXT: }
18;
Sjoerd Meijerc4a09692021-05-04 15:12:44 +010019entry:
20 br i1 %flag, label %plus, label %minus
21
22plus:
23 %tmp0 = call i64 @compute(i64 %x, i64 (i64)* @plus)
24 br label %merge
25
26minus:
27 %tmp1 = call i64 @compute(i64 %x, i64 (i64)* @minus)
28 br label %merge
29
30merge:
31 %tmp2 = phi i64 [ %tmp0, %plus ], [ %tmp1, %minus]
32 ret i64 %tmp2
33}
34
Sjoerd Meijera1e8b752021-09-08 11:24:58 +010035; CHECK-LABEL: define internal i64 @compute.1(i64 %x, i64 (i64)* %binop) {
36; CHECK-NEXT: entry:
37; CHECK-NEXT: [[TMP0:%.+]] = call i64 @plus(i64 %x)
38; CHECK-NEXT: ret i64 [[TMP0]]
39; CHECK-NEXT: }
40;
41; CHECK-LABEL: define internal i64 @compute.2(i64 %x, i64 (i64)* %binop) {
42; CHECK-NEXT: entry:
43; CHECK-NEXT: [[TMP0:%.+]] = call i64 @minus(i64 %x)
44; CHECK-NEXT: ret i64 [[TMP0]]
45; CHECK-NEXT: }
46;
Sjoerd Meijerc4a09692021-05-04 15:12:44 +010047define internal i64 @compute(i64 %x, i64 (i64)* %binop) {
48entry:
49 %tmp0 = call i64 %binop(i64 %x)
50 ret i64 %tmp0
51}
52
53define internal i64 @plus(i64 %x) {
54entry:
55 %tmp0 = add i64 %x, 1
56 ret i64 %tmp0
57}
58
59define internal i64 @minus(i64 %x) {
60entry:
61 %tmp0 = sub i64 %x, 1
62 ret i64 %tmp0
63}