xref: /llvm-project/llvm/test/Transforms/PhaseOrdering/X86/merge-functions.ll (revision 56b3222b79632a4bbb36271735556a03b2504791)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes="default<O3>" -enable-merge-functions -S < %s | FileCheck %s
3
4; TODO: These two functions should get merged, but currently aren't, because
5; the function merging pass is scheduled too early.
6
7target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
8target triple = "x86_64-unknown-linux-gnu"
9
10define i1 @test1(i32 %c) {
11; CHECK-LABEL: @test1(
12; CHECK-NEXT:  entry:
13; CHECK-NEXT:    [[SWITCH_TABLEIDX:%.*]] = add i32 [[C:%.*]], -100
14; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 20
15; CHECK-NEXT:    [[SWITCH_CAST:%.*]] = trunc i32 [[SWITCH_TABLEIDX]] to i20
16; CHECK-NEXT:    [[SWITCH_DOWNSHIFT:%.*]] = lshr i20 -490991, [[SWITCH_CAST]]
17; CHECK-NEXT:    [[SWITCH_MASKED:%.*]] = trunc i20 [[SWITCH_DOWNSHIFT]] to i1
18; CHECK-NEXT:    [[I_0:%.*]] = select i1 [[TMP0]], i1 [[SWITCH_MASKED]], i1 false
19; CHECK-NEXT:    ret i1 [[I_0]]
20;
21entry:
22  %_4 = alloca i8, align 1
23  %_3 = alloca i8, align 1
24  %_2 = alloca i8, align 1
25  %i = alloca i8, align 1
26  %i1 = icmp eq i32 %c, 115
27  br i1 %i1, label %bb10, label %bb11
28
29bb10:                                             ; preds = %entry
30  store i8 1, ptr %_4, align 1
31  br label %bb12
32
33bb11:                                             ; preds = %entry
34  %_6 = icmp eq i32 %c, 109
35  %i2 = zext i1 %_6 to i8
36  store i8 %i2, ptr %_4, align 1
37  br label %bb12
38
39bb12:                                             ; preds = %bb11, %bb10
40  %i3 = load i8, ptr %_4, align 1
41  %i4 = trunc i8 %i3 to i1
42  br i1 %i4, label %bb7, label %bb8
43
44bb8:                                              ; preds = %bb12
45  %_8 = icmp eq i32 %c, 104
46  %i5 = zext i1 %_8 to i8
47  store i8 %i5, ptr %_3, align 1
48  br label %bb9
49
50bb7:                                              ; preds = %bb12
51  store i8 1, ptr %_3, align 1
52  br label %bb9
53
54bb9:                                              ; preds = %bb7, %bb8
55  %i6 = load i8, ptr %_3, align 1
56  %i7 = trunc i8 %i6 to i1
57  br i1 %i7, label %bb4, label %bb5
58
59bb5:                                              ; preds = %bb9
60  %_10 = icmp eq i32 %c, 100
61  %i8 = zext i1 %_10 to i8
62  store i8 %i8, ptr %_2, align 1
63  br label %bb6
64
65bb4:                                              ; preds = %bb9
66  store i8 1, ptr %_2, align 1
67  br label %bb6
68
69bb6:                                              ; preds = %bb4, %bb5
70  %i9 = load i8, ptr %_2, align 1
71  %i10 = trunc i8 %i9 to i1
72  br i1 %i10, label %bb1, label %bb2
73
74bb2:                                              ; preds = %bb6
75  %_12 = icmp eq i32 %c, 119
76  %i11 = zext i1 %_12 to i8
77  store i8 %i11, ptr %i, align 1
78  br label %bb3
79
80bb1:                                              ; preds = %bb6
81  store i8 1, ptr %i, align 1
82  br label %bb3
83
84bb3:                                              ; preds = %bb1, %bb2
85  %i12 = load i8, ptr %i, align 1
86  %i13 = trunc i8 %i12 to i1
87  ret i1 %i13
88}
89
90define i1 @test2(i32 %c) {
91; CHECK-LABEL: @test2(
92; CHECK-NEXT:    [[TMP2:%.*]] = tail call noundef i1 @test1(i32 [[TMP0:%.*]]) #[[ATTR0:[0-9]+]]
93; CHECK-NEXT:    ret i1 [[TMP2]]
94;
95entry:
96  %i = alloca i8, align 1
97  switch i32 %c, label %bb1 [
98  i32 115, label %bb2
99  i32 109, label %bb2
100  i32 104, label %bb2
101  i32 100, label %bb2
102  i32 119, label %bb2
103  ]
104
105bb1:                                              ; preds = %entry
106  store i8 0, ptr %i, align 1
107  br label %bb3
108
109bb2:                                              ; preds = %entry, %entry, %entry, %entry, %entry
110  store i8 1, ptr %i, align 1
111  br label %bb3
112
113bb3:                                              ; preds = %bb2, %bb1
114  %i1 = load i8, ptr %i, align 1
115  %i2 = trunc i8 %i1 to i1
116  ret i1 %i2
117}
118
119