blob: f711fae0a8570ec7bd6b06a7f8fb57180ebe1f44 [file] [log] [blame]
Sanjay Patele2787b92017-05-17 20:27:55 +00001; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3; Test all integer predicates with bool types and true/false constants.
4; Use vectors to provide test coverage that is not duplicated in other folds.
5
6define <2 x i1> @eq_t(<2 x i1> %a) {
7; CHECK-LABEL: @eq_t(
8; CHECK-NEXT: ret <2 x i1> %a
9;
10 %r = icmp eq <2 x i1> %a, <i1 true, i1 true>
11 ret <2 x i1> %r
12}
13
14define <2 x i1> @eq_f(<2 x i1> %a) {
15; CHECK-LABEL: @eq_f(
16; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i1> %a, zeroinitializer
17; CHECK-NEXT: ret <2 x i1> [[R]]
18;
19 %r = icmp eq <2 x i1> %a, <i1 false, i1 false>
20 ret <2 x i1> %r
21}
22
23define <2 x i1> @ne_t(<2 x i1> %a) {
24; CHECK-LABEL: @ne_t(
25; CHECK-NEXT: [[R:%.*]] = icmp ne <2 x i1> %a, <i1 true, i1 true>
26; CHECK-NEXT: ret <2 x i1> [[R]]
27;
28 %r = icmp ne <2 x i1> %a, <i1 true, i1 true>
29 ret <2 x i1> %r
30}
31
32define <2 x i1> @ne_f(<2 x i1> %a) {
33; CHECK-LABEL: @ne_f(
34; CHECK-NEXT: ret <2 x i1> %a
35;
36 %r = icmp ne <2 x i1> %a, <i1 false, i1 false>
37 ret <2 x i1> %r
38}
39
40define <2 x i1> @ugt_t(<2 x i1> %a) {
41; CHECK-LABEL: @ugt_t(
42; CHECK-NEXT: ret <2 x i1> zeroinitializer
43;
44 %r = icmp ugt <2 x i1> %a, <i1 true, i1 true>
45 ret <2 x i1> %r
46}
47
48define <2 x i1> @ugt_f(<2 x i1> %a) {
49; CHECK-LABEL: @ugt_f(
50; CHECK-NEXT: ret <2 x i1> %a
51;
52 %r = icmp ugt <2 x i1> %a, <i1 false, i1 false>
53 ret <2 x i1> %r
54}
55
56define <2 x i1> @ult_t(<2 x i1> %a) {
57; CHECK-LABEL: @ult_t(
58; CHECK-NEXT: [[R:%.*]] = icmp ult <2 x i1> %a, <i1 true, i1 true>
59; CHECK-NEXT: ret <2 x i1> [[R]]
60;
61 %r = icmp ult <2 x i1> %a, <i1 true, i1 true>
62 ret <2 x i1> %r
63}
64
65define <2 x i1> @ult_f(<2 x i1> %a) {
66; CHECK-LABEL: @ult_f(
67; CHECK-NEXT: ret <2 x i1> zeroinitializer
68;
69 %r = icmp ult <2 x i1> %a, <i1 false, i1 false>
70 ret <2 x i1> %r
71}
72
73define <2 x i1> @sgt_t(<2 x i1> %a) {
74; CHECK-LABEL: @sgt_t(
75; CHECK-NEXT: [[R:%.*]] = icmp sgt <2 x i1> %a, <i1 true, i1 true>
76; CHECK-NEXT: ret <2 x i1> [[R]]
77;
78 %r = icmp sgt <2 x i1> %a, <i1 true, i1 true>
79 ret <2 x i1> %r
80}
81
82define <2 x i1> @sgt_f(<2 x i1> %a) {
83; CHECK-LABEL: @sgt_f(
84; CHECK-NEXT: ret <2 x i1> zeroinitializer
85;
86 %r = icmp sgt <2 x i1> %a, <i1 false, i1 false>
87 ret <2 x i1> %r
88}
89
90define <2 x i1> @slt_t(<2 x i1> %a) {
91; CHECK-LABEL: @slt_t(
92; CHECK-NEXT: ret <2 x i1> zeroinitializer
93;
94 %r = icmp slt <2 x i1> %a, <i1 true, i1 true>
95 ret <2 x i1> %r
96}
97
98define <2 x i1> @slt_f(<2 x i1> %a) {
99; CHECK-LABEL: @slt_f(
100; CHECK-NEXT: ret <2 x i1> %a
101;
102 %r = icmp slt <2 x i1> %a, <i1 false, i1 false>
103 ret <2 x i1> %r
104}
105
106define <2 x i1> @uge_t(<2 x i1> %a) {
107; CHECK-LABEL: @uge_t(
108; CHECK-NEXT: ret <2 x i1> %a
109;
110 %r = icmp uge <2 x i1> %a, <i1 true, i1 true>
111 ret <2 x i1> %r
112}
113
114define <2 x i1> @uge_f(<2 x i1> %a) {
115; CHECK-LABEL: @uge_f(
116; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
117;
118 %r = icmp uge <2 x i1> %a, <i1 false, i1 false>
119 ret <2 x i1> %r
120}
121
122define <2 x i1> @ule_t(<2 x i1> %a) {
123; CHECK-LABEL: @ule_t(
124; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
125;
126 %r = icmp ule <2 x i1> %a, <i1 true, i1 true>
127 ret <2 x i1> %r
128}
129
130define <2 x i1> @ule_f(<2 x i1> %a) {
131; CHECK-LABEL: @ule_f(
132; CHECK-NEXT: [[R:%.*]] = icmp ule <2 x i1> %a, zeroinitializer
133; CHECK-NEXT: ret <2 x i1> [[R]]
134;
135 %r = icmp ule <2 x i1> %a, <i1 false, i1 false>
136 ret <2 x i1> %r
137}
138
139define <2 x i1> @sge_t(<2 x i1> %a) {
140; CHECK-LABEL: @sge_t(
141; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
142;
143 %r = icmp sge <2 x i1> %a, <i1 true, i1 true>
144 ret <2 x i1> %r
145}
146
147define <2 x i1> @sge_f(<2 x i1> %a) {
148; CHECK-LABEL: @sge_f(
149; CHECK-NEXT: [[R:%.*]] = icmp sge <2 x i1> %a, zeroinitializer
150; CHECK-NEXT: ret <2 x i1> [[R]]
151;
152 %r = icmp sge <2 x i1> %a, <i1 false, i1 false>
153 ret <2 x i1> %r
154}
155
156define <2 x i1> @sle_t(<2 x i1> %a) {
157; CHECK-LABEL: @sle_t(
158; CHECK-NEXT: ret <2 x i1> %a
159;
160 %r = icmp sle <2 x i1> %a, <i1 true, i1 true>
161 ret <2 x i1> %r
162}
163
164define <2 x i1> @sle_f(<2 x i1> %a) {
165; CHECK-LABEL: @sle_f(
166; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
167;
168 %r = icmp sle <2 x i1> %a, <i1 false, i1 false>
169 ret <2 x i1> %r
170}
171