1; RUN: opt < %s -cost-model -analyze -mtriple=systemz-unknown -mcpu=z13 | FileCheck %s
2; RUN: opt < %s -cost-model -analyze -mtriple=systemz-unknown -mcpu=zEC12 \
3; RUN:  | FileCheck %s --check-prefix=IPMSQ
4;
5; TODO: add more tests for differing operand types of the two compares.
6
7define i8 @fun0(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
8                i8 %val5, i8 %val6) {
9  %cmp0 = icmp eq i8 %val1, %val2
10  %cmp1 = icmp eq i8 %val3, %val4
11  %and = and i1 %cmp0, %cmp1
12  %sel = select i1 %and, i8 %val5, i8 %val6
13  ret i8 %sel
14
15; CHECK: fun0
16; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
17; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
18; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
19; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
20}
21
22define i16 @fun1(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
23                 i16 %val5, i16 %val6) {
24  %cmp0 = icmp eq i8 %val1, %val2
25  %cmp1 = icmp eq i8 %val3, %val4
26  %and = and i1 %cmp0, %cmp1
27  %sel = select i1 %and, i16 %val5, i16 %val6
28  ret i16 %sel
29
30; CHECK: fun1
31; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
32; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
33; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
34; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
35}
36
37define i32 @fun2(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
38                 i32 %val5, i32 %val6) {
39  %cmp0 = icmp eq i8 %val1, %val2
40  %cmp1 = icmp eq i8 %val3, %val4
41  %and = and i1 %cmp0, %cmp1
42  %sel = select i1 %and, i32 %val5, i32 %val6
43  ret i32 %sel
44
45; CHECK: fun2
46; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
47; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
48; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
49; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
50}
51
52define i64 @fun3(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
53                 i64 %val5, i64 %val6) {
54  %cmp0 = icmp eq i8 %val1, %val2
55  %cmp1 = icmp eq i8 %val3, %val4
56  %and = and i1 %cmp0, %cmp1
57  %sel = select i1 %and, i64 %val5, i64 %val6
58  ret i64 %sel
59
60; CHECK: fun3
61; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
62; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
63; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
64; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
65}
66
67define float @fun4(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
68                   float %val5, float %val6) {
69  %cmp0 = icmp eq i8 %val1, %val2
70  %cmp1 = icmp eq i8 %val3, %val4
71  %and = and i1 %cmp0, %cmp1
72  %sel = select i1 %and, float %val5, float %val6
73  ret float %sel
74
75; CHECK: fun4
76; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
77; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
78; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
79; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
80}
81
82define double @fun5(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
83                    double %val5, double %val6) {
84  %cmp0 = icmp eq i8 %val1, %val2
85  %cmp1 = icmp eq i8 %val3, %val4
86  %and = and i1 %cmp0, %cmp1
87  %sel = select i1 %and, double %val5, double %val6
88  ret double %sel
89
90; CHECK: fun5
91; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
92; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
93; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
94; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
95}
96
97define i8 @fun6(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
98                i8 %val5, i8 %val6) {
99  %cmp0 = icmp eq i16 %val1, %val2
100  %cmp1 = icmp eq i16 %val3, %val4
101  %and = and i1 %cmp0, %cmp1
102  %sel = select i1 %and, i8 %val5, i8 %val6
103  ret i8 %sel
104
105; CHECK: fun6
106; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
107; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
108; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
109; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
110}
111
112define i16 @fun7(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
113                 i16 %val5, i16 %val6) {
114  %cmp0 = icmp eq i16 %val1, %val2
115  %cmp1 = icmp eq i16 %val3, %val4
116  %and = and i1 %cmp0, %cmp1
117  %sel = select i1 %and, i16 %val5, i16 %val6
118  ret i16 %sel
119
120; CHECK: fun7
121; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
122; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
123; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
124; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
125}
126
127define i32 @fun8(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
128                 i32 %val5, i32 %val6) {
129  %cmp0 = icmp eq i16 %val1, %val2
130  %cmp1 = icmp eq i16 %val3, %val4
131  %and = and i1 %cmp0, %cmp1
132  %sel = select i1 %and, i32 %val5, i32 %val6
133  ret i32 %sel
134
135; CHECK: fun8
136; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
137; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
138; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
139; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
140}
141
142define i64 @fun9(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
143                 i64 %val5, i64 %val6) {
144  %cmp0 = icmp eq i16 %val1, %val2
145  %cmp1 = icmp eq i16 %val3, %val4
146  %and = and i1 %cmp0, %cmp1
147  %sel = select i1 %and, i64 %val5, i64 %val6
148  ret i64 %sel
149
150; CHECK: fun9
151; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
152; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
153; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
154; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
155}
156
157define float @fun10(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
158                    float %val5, float %val6) {
159  %cmp0 = icmp eq i16 %val1, %val2
160  %cmp1 = icmp eq i16 %val3, %val4
161  %and = and i1 %cmp0, %cmp1
162  %sel = select i1 %and, float %val5, float %val6
163  ret float %sel
164
165; CHECK: fun10
166; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
167; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
168; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
169; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
170}
171
172define double @fun11(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
173                     double %val5, double %val6) {
174  %cmp0 = icmp eq i16 %val1, %val2
175  %cmp1 = icmp eq i16 %val3, %val4
176  %and = and i1 %cmp0, %cmp1
177  %sel = select i1 %and, double %val5, double %val6
178  ret double %sel
179
180; CHECK: fun11
181; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
182; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
183; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
184; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
185}
186
187define i8 @fun12(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
188                 i8 %val5, i8 %val6) {
189  %cmp0 = icmp eq i32 %val1, %val2
190  %cmp1 = icmp eq i32 %val3, %val4
191  %and = and i1 %cmp0, %cmp1
192  %sel = select i1 %and, i8 %val5, i8 %val6
193  ret i8 %sel
194
195; CHECK: fun12
196; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
197; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
198; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
199; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
200}
201
202define i16 @fun13(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
203                  i16 %val5, i16 %val6) {
204  %cmp0 = icmp eq i32 %val1, %val2
205  %cmp1 = icmp eq i32 %val3, %val4
206  %and = and i1 %cmp0, %cmp1
207  %sel = select i1 %and, i16 %val5, i16 %val6
208  ret i16 %sel
209
210; CHECK: fun13
211; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
212; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
213; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
214; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
215}
216
217define i32 @fun14(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
218                  i32 %val5, i32 %val6) {
219  %cmp0 = icmp eq i32 %val1, %val2
220  %cmp1 = icmp eq i32 %val3, %val4
221  %and = and i1 %cmp0, %cmp1
222  %sel = select i1 %and, i32 %val5, i32 %val6
223  ret i32 %sel
224
225; CHECK: fun14
226; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
227; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
228; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
229; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
230}
231
232define i64 @fun15(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
233                  i64 %val5, i64 %val6) {
234  %cmp0 = icmp eq i32 %val1, %val2
235  %cmp1 = icmp eq i32 %val3, %val4
236  %and = and i1 %cmp0, %cmp1
237  %sel = select i1 %and, i64 %val5, i64 %val6
238  ret i64 %sel
239
240; CHECK: fun15
241; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
242; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
243; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
244; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
245}
246
247define float @fun16(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
248                    float %val5, float %val6) {
249  %cmp0 = icmp eq i32 %val1, %val2
250  %cmp1 = icmp eq i32 %val3, %val4
251  %and = and i1 %cmp0, %cmp1
252  %sel = select i1 %and, float %val5, float %val6
253  ret float %sel
254
255; CHECK: fun16
256; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
257; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
258; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
259; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
260}
261
262define double @fun17(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
263                     double %val5, double %val6) {
264  %cmp0 = icmp eq i32 %val1, %val2
265  %cmp1 = icmp eq i32 %val3, %val4
266  %and = and i1 %cmp0, %cmp1
267  %sel = select i1 %and, double %val5, double %val6
268  ret double %sel
269
270; CHECK: fun17
271; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
272; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
273; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
274; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
275}
276
277define i8 @fun18(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
278                 i8 %val5, i8 %val6) {
279  %cmp0 = icmp eq i64 %val1, %val2
280  %cmp1 = icmp eq i64 %val3, %val4
281  %and = and i1 %cmp0, %cmp1
282  %sel = select i1 %and, i8 %val5, i8 %val6
283  ret i8 %sel
284
285; CHECK: fun18
286; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
287; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
288; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
289; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
290}
291
292define i16 @fun19(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
293                  i16 %val5, i16 %val6) {
294  %cmp0 = icmp eq i64 %val1, %val2
295  %cmp1 = icmp eq i64 %val3, %val4
296  %and = and i1 %cmp0, %cmp1
297  %sel = select i1 %and, i16 %val5, i16 %val6
298  ret i16 %sel
299
300; CHECK: fun19
301; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
302; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
303; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
304; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
305}
306
307define i32 @fun20(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
308                  i32 %val5, i32 %val6) {
309  %cmp0 = icmp eq i64 %val1, %val2
310  %cmp1 = icmp eq i64 %val3, %val4
311  %and = and i1 %cmp0, %cmp1
312  %sel = select i1 %and, i32 %val5, i32 %val6
313  ret i32 %sel
314
315; CHECK: fun20
316; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
317; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
318; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
319; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
320}
321
322define i64 @fun21(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
323                  i64 %val5, i64 %val6) {
324  %cmp0 = icmp eq i64 %val1, %val2
325  %cmp1 = icmp eq i64 %val3, %val4
326  %and = and i1 %cmp0, %cmp1
327  %sel = select i1 %and, i64 %val5, i64 %val6
328  ret i64 %sel
329
330; CHECK: fun21
331; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
332; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
333; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
334; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
335}
336
337define float @fun22(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
338                    float %val5, float %val6) {
339  %cmp0 = icmp eq i64 %val1, %val2
340  %cmp1 = icmp eq i64 %val3, %val4
341  %and = and i1 %cmp0, %cmp1
342  %sel = select i1 %and, float %val5, float %val6
343  ret float %sel
344
345; CHECK: fun22
346; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
347; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
348; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
349; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
350}
351
352define double @fun23(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
353                     double %val5, double %val6) {
354  %cmp0 = icmp eq i64 %val1, %val2
355  %cmp1 = icmp eq i64 %val3, %val4
356  %and = and i1 %cmp0, %cmp1
357  %sel = select i1 %and, double %val5, double %val6
358  ret double %sel
359
360; CHECK: fun23
361; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
362; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
363; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
364; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
365}
366
367define i8 @fun24(float %val1, float %val2, float %val3, float %val4,
368                 i8 %val5, i8 %val6) {
369  %cmp0 = fcmp ogt float %val1, %val2
370  %cmp1 = fcmp ogt float %val3, %val4
371  %and = and i1 %cmp0, %cmp1
372  %sel = select i1 %and, i8 %val5, i8 %val6
373  ret i8 %sel
374
375; CHECK: fun24
376; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
377; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
378; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
379; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
380}
381
382define i16 @fun25(float %val1, float %val2, float %val3, float %val4,
383                  i16 %val5, i16 %val6) {
384  %cmp0 = fcmp ogt float %val1, %val2
385  %cmp1 = fcmp ogt float %val3, %val4
386  %and = and i1 %cmp0, %cmp1
387  %sel = select i1 %and, i16 %val5, i16 %val6
388  ret i16 %sel
389
390; CHECK: fun25
391; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
392; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
393; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
394; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
395}
396
397define i32 @fun26(float %val1, float %val2, float %val3, float %val4,
398                  i32 %val5, i32 %val6) {
399  %cmp0 = fcmp ogt float %val1, %val2
400  %cmp1 = fcmp ogt float %val3, %val4
401  %and = and i1 %cmp0, %cmp1
402  %sel = select i1 %and, i32 %val5, i32 %val6
403  ret i32 %sel
404
405; CHECK: fun26
406; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
407; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
408; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
409; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
410}
411
412define i64 @fun27(float %val1, float %val2, float %val3, float %val4,
413                  i64 %val5, i64 %val6) {
414  %cmp0 = fcmp ogt float %val1, %val2
415  %cmp1 = fcmp ogt float %val3, %val4
416  %and = and i1 %cmp0, %cmp1
417  %sel = select i1 %and, i64 %val5, i64 %val6
418  ret i64 %sel
419
420; CHECK: fun27
421; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
422; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
423; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
424; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
425}
426
427define float @fun28(float %val1, float %val2, float %val3, float %val4,
428                    float %val5, float %val6) {
429  %cmp0 = fcmp ogt float %val1, %val2
430  %cmp1 = fcmp ogt float %val3, %val4
431  %and = and i1 %cmp0, %cmp1
432  %sel = select i1 %and, float %val5, float %val6
433  ret float %sel
434
435; CHECK: fun28
436; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
437; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
438; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
439; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
440}
441
442define double @fun29(float %val1, float %val2, float %val3, float %val4,
443                     double %val5, double %val6) {
444  %cmp0 = fcmp ogt float %val1, %val2
445  %cmp1 = fcmp ogt float %val3, %val4
446  %and = and i1 %cmp0, %cmp1
447  %sel = select i1 %and, double %val5, double %val6
448  ret double %sel
449
450; CHECK: fun29
451; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
452; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
453; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
454; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
455}
456
457define i8 @fun30(double %val1, double %val2, double %val3, double %val4,
458                 i8 %val5, i8 %val6) {
459  %cmp0 = fcmp ogt double %val1, %val2
460  %cmp1 = fcmp ogt double %val3, %val4
461  %and = and i1 %cmp0, %cmp1
462  %sel = select i1 %and, i8 %val5, i8 %val6
463  ret i8 %sel
464
465; CHECK: fun30
466; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
467; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
468; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
469; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
470}
471
472define i16 @fun31(double %val1, double %val2, double %val3, double %val4,
473                  i16 %val5, i16 %val6) {
474  %cmp0 = fcmp ogt double %val1, %val2
475  %cmp1 = fcmp ogt double %val3, %val4
476  %and = and i1 %cmp0, %cmp1
477  %sel = select i1 %and, i16 %val5, i16 %val6
478  ret i16 %sel
479
480; CHECK: fun31
481; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
482; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
483; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
484; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
485}
486
487define i32 @fun32(double %val1, double %val2, double %val3, double %val4,
488                  i32 %val5, i32 %val6) {
489  %cmp0 = fcmp ogt double %val1, %val2
490  %cmp1 = fcmp ogt double %val3, %val4
491  %and = and i1 %cmp0, %cmp1
492  %sel = select i1 %and, i32 %val5, i32 %val6
493  ret i32 %sel
494
495; CHECK: fun32
496; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
497; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
498; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
499; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
500}
501
502define i64 @fun33(double %val1, double %val2, double %val3, double %val4,
503                  i64 %val5, i64 %val6) {
504  %cmp0 = fcmp ogt double %val1, %val2
505  %cmp1 = fcmp ogt double %val3, %val4
506  %and = and i1 %cmp0, %cmp1
507  %sel = select i1 %and, i64 %val5, i64 %val6
508  ret i64 %sel
509
510; CHECK: fun33
511; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
512; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
513; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
514; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
515}
516
517define float @fun34(double %val1, double %val2, double %val3, double %val4,
518                    float %val5, float %val6) {
519  %cmp0 = fcmp ogt double %val1, %val2
520  %cmp1 = fcmp ogt double %val3, %val4
521  %and = and i1 %cmp0, %cmp1
522  %sel = select i1 %and, float %val5, float %val6
523  ret float %sel
524
525; CHECK: fun34
526; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
527; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
528; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
529; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
530}
531
532define double @fun35(double %val1, double %val2, double %val3, double %val4,
533                     double %val5, double %val6) {
534  %cmp0 = fcmp ogt double %val1, %val2
535  %cmp1 = fcmp ogt double %val3, %val4
536  %and = and i1 %cmp0, %cmp1
537  %sel = select i1 %and, double %val5, double %val6
538  ret double %sel
539
540; CHECK: fun35
541; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
542; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
543; CHECK: cost of 1 for instruction:   %and = and i1 %cmp0, %cmp1
544; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
545}
546
547define i8 @fun36(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
548                 i8 %val5, i8 %val6) {
549  %cmp0 = icmp eq i8 %val1, %val2
550  %cmp1 = icmp eq i8 %val3, %val4
551  %and = or i1 %cmp0, %cmp1
552  %sel = select i1 %and, i8 %val5, i8 %val6
553  ret i8 %sel
554
555; CHECK: fun36
556; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
557; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
558; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
559; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
560}
561
562define i16 @fun37(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
563                  i16 %val5, i16 %val6) {
564  %cmp0 = icmp eq i8 %val1, %val2
565  %cmp1 = icmp eq i8 %val3, %val4
566  %and = or i1 %cmp0, %cmp1
567  %sel = select i1 %and, i16 %val5, i16 %val6
568  ret i16 %sel
569
570; CHECK: fun37
571; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
572; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
573; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
574; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
575}
576
577define i32 @fun38(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
578                  i32 %val5, i32 %val6) {
579  %cmp0 = icmp eq i8 %val1, %val2
580  %cmp1 = icmp eq i8 %val3, %val4
581  %and = or i1 %cmp0, %cmp1
582  %sel = select i1 %and, i32 %val5, i32 %val6
583  ret i32 %sel
584
585; CHECK: fun38
586; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
587; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
588; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
589; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
590}
591
592define i64 @fun39(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
593                  i64 %val5, i64 %val6) {
594  %cmp0 = icmp eq i8 %val1, %val2
595  %cmp1 = icmp eq i8 %val3, %val4
596  %and = or i1 %cmp0, %cmp1
597  %sel = select i1 %and, i64 %val5, i64 %val6
598  ret i64 %sel
599
600; CHECK: fun39
601; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
602; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
603; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
604; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
605}
606
607define float @fun40(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
608                    float %val5, float %val6) {
609  %cmp0 = icmp eq i8 %val1, %val2
610  %cmp1 = icmp eq i8 %val3, %val4
611  %and = or i1 %cmp0, %cmp1
612  %sel = select i1 %and, float %val5, float %val6
613  ret float %sel
614
615; CHECK: fun40
616; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
617; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
618; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
619; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
620}
621
622define double @fun41(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
623                     double %val5, double %val6) {
624  %cmp0 = icmp eq i8 %val1, %val2
625  %cmp1 = icmp eq i8 %val3, %val4
626  %and = or i1 %cmp0, %cmp1
627  %sel = select i1 %and, double %val5, double %val6
628  ret double %sel
629
630; CHECK: fun41
631; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
632; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
633; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
634; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
635}
636
637define i8 @fun42(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
638                 i8 %val5, i8 %val6) {
639  %cmp0 = icmp eq i16 %val1, %val2
640  %cmp1 = icmp eq i16 %val3, %val4
641  %and = or i1 %cmp0, %cmp1
642  %sel = select i1 %and, i8 %val5, i8 %val6
643  ret i8 %sel
644
645; CHECK: fun42
646; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
647; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
648; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
649; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
650}
651
652define i16 @fun43(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
653                  i16 %val5, i16 %val6) {
654  %cmp0 = icmp eq i16 %val1, %val2
655  %cmp1 = icmp eq i16 %val3, %val4
656  %and = or i1 %cmp0, %cmp1
657  %sel = select i1 %and, i16 %val5, i16 %val6
658  ret i16 %sel
659
660; CHECK: fun43
661; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
662; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
663; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
664; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
665}
666
667define i32 @fun44(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
668                  i32 %val5, i32 %val6) {
669  %cmp0 = icmp eq i16 %val1, %val2
670  %cmp1 = icmp eq i16 %val3, %val4
671  %and = or i1 %cmp0, %cmp1
672  %sel = select i1 %and, i32 %val5, i32 %val6
673  ret i32 %sel
674
675; CHECK: fun44
676; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
677; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
678; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
679; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
680}
681
682define i64 @fun45(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
683                  i64 %val5, i64 %val6) {
684  %cmp0 = icmp eq i16 %val1, %val2
685  %cmp1 = icmp eq i16 %val3, %val4
686  %and = or i1 %cmp0, %cmp1
687  %sel = select i1 %and, i64 %val5, i64 %val6
688  ret i64 %sel
689
690; CHECK: fun45
691; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
692; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
693; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
694; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
695}
696
697define float @fun46(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
698                    float %val5, float %val6) {
699  %cmp0 = icmp eq i16 %val1, %val2
700  %cmp1 = icmp eq i16 %val3, %val4
701  %and = or i1 %cmp0, %cmp1
702  %sel = select i1 %and, float %val5, float %val6
703  ret float %sel
704
705; CHECK: fun46
706; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
707; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
708; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
709; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
710}
711
712define double @fun47(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
713                     double %val5, double %val6) {
714  %cmp0 = icmp eq i16 %val1, %val2
715  %cmp1 = icmp eq i16 %val3, %val4
716  %and = or i1 %cmp0, %cmp1
717  %sel = select i1 %and, double %val5, double %val6
718  ret double %sel
719
720; CHECK: fun47
721; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
722; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
723; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
724; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
725}
726
727define i8 @fun48(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
728                 i8 %val5, i8 %val6) {
729  %cmp0 = icmp eq i32 %val1, %val2
730  %cmp1 = icmp eq i32 %val3, %val4
731  %and = or i1 %cmp0, %cmp1
732  %sel = select i1 %and, i8 %val5, i8 %val6
733  ret i8 %sel
734
735; CHECK: fun48
736; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
737; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
738; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
739; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
740}
741
742define i16 @fun49(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
743                  i16 %val5, i16 %val6) {
744  %cmp0 = icmp eq i32 %val1, %val2
745  %cmp1 = icmp eq i32 %val3, %val4
746  %and = or i1 %cmp0, %cmp1
747  %sel = select i1 %and, i16 %val5, i16 %val6
748  ret i16 %sel
749
750; CHECK: fun49
751; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
752; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
753; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
754; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
755}
756
757define i32 @fun50(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
758                  i32 %val5, i32 %val6) {
759  %cmp0 = icmp eq i32 %val1, %val2
760  %cmp1 = icmp eq i32 %val3, %val4
761  %and = or i1 %cmp0, %cmp1
762  %sel = select i1 %and, i32 %val5, i32 %val6
763  ret i32 %sel
764
765; CHECK: fun50
766; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
767; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
768; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
769; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
770}
771
772define i64 @fun51(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
773                  i64 %val5, i64 %val6) {
774  %cmp0 = icmp eq i32 %val1, %val2
775  %cmp1 = icmp eq i32 %val3, %val4
776  %and = or i1 %cmp0, %cmp1
777  %sel = select i1 %and, i64 %val5, i64 %val6
778  ret i64 %sel
779
780; CHECK: fun51
781; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
782; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
783; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
784; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
785}
786
787define float @fun52(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
788                    float %val5, float %val6) {
789  %cmp0 = icmp eq i32 %val1, %val2
790  %cmp1 = icmp eq i32 %val3, %val4
791  %and = or i1 %cmp0, %cmp1
792  %sel = select i1 %and, float %val5, float %val6
793  ret float %sel
794
795; CHECK: fun52
796; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
797; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
798; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
799; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
800}
801
802define double @fun53(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
803                     double %val5, double %val6) {
804  %cmp0 = icmp eq i32 %val1, %val2
805  %cmp1 = icmp eq i32 %val3, %val4
806  %and = or i1 %cmp0, %cmp1
807  %sel = select i1 %and, double %val5, double %val6
808  ret double %sel
809
810; CHECK: fun53
811; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
812; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
813; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
814; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
815}
816
817define i8 @fun54(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
818                 i8 %val5, i8 %val6) {
819  %cmp0 = icmp eq i64 %val1, %val2
820  %cmp1 = icmp eq i64 %val3, %val4
821  %and = or i1 %cmp0, %cmp1
822  %sel = select i1 %and, i8 %val5, i8 %val6
823  ret i8 %sel
824
825; CHECK: fun54
826; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
827; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
828; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
829; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
830}
831
832define i16 @fun55(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
833                  i16 %val5, i16 %val6) {
834  %cmp0 = icmp eq i64 %val1, %val2
835  %cmp1 = icmp eq i64 %val3, %val4
836  %and = or i1 %cmp0, %cmp1
837  %sel = select i1 %and, i16 %val5, i16 %val6
838  ret i16 %sel
839
840; CHECK: fun55
841; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
842; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
843; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
844; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
845}
846
847define i32 @fun56(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
848                  i32 %val5, i32 %val6) {
849  %cmp0 = icmp eq i64 %val1, %val2
850  %cmp1 = icmp eq i64 %val3, %val4
851  %and = or i1 %cmp0, %cmp1
852  %sel = select i1 %and, i32 %val5, i32 %val6
853  ret i32 %sel
854
855; CHECK: fun56
856; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
857; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
858; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
859; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
860}
861
862define i64 @fun57(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
863                  i64 %val5, i64 %val6) {
864  %cmp0 = icmp eq i64 %val1, %val2
865  %cmp1 = icmp eq i64 %val3, %val4
866  %and = or i1 %cmp0, %cmp1
867  %sel = select i1 %and, i64 %val5, i64 %val6
868  ret i64 %sel
869
870; CHECK: fun57
871; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
872; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
873; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
874; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
875}
876
877define float @fun58(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
878                    float %val5, float %val6) {
879  %cmp0 = icmp eq i64 %val1, %val2
880  %cmp1 = icmp eq i64 %val3, %val4
881  %and = or i1 %cmp0, %cmp1
882  %sel = select i1 %and, float %val5, float %val6
883  ret float %sel
884
885; CHECK: fun58
886; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
887; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
888; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
889; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
890}
891
892define double @fun59(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
893                     double %val5, double %val6) {
894  %cmp0 = icmp eq i64 %val1, %val2
895  %cmp1 = icmp eq i64 %val3, %val4
896  %and = or i1 %cmp0, %cmp1
897  %sel = select i1 %and, double %val5, double %val6
898  ret double %sel
899
900; CHECK: fun59
901; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
902; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
903; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
904; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
905}
906
907define i8 @fun60(float %val1, float %val2, float %val3, float %val4,
908                 i8 %val5, i8 %val6) {
909  %cmp0 = fcmp ogt float %val1, %val2
910  %cmp1 = fcmp ogt float %val3, %val4
911  %and = or i1 %cmp0, %cmp1
912  %sel = select i1 %and, i8 %val5, i8 %val6
913  ret i8 %sel
914
915; CHECK: fun60
916; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
917; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
918; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
919; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
920}
921
922define i16 @fun61(float %val1, float %val2, float %val3, float %val4,
923                  i16 %val5, i16 %val6) {
924  %cmp0 = fcmp ogt float %val1, %val2
925  %cmp1 = fcmp ogt float %val3, %val4
926  %and = or i1 %cmp0, %cmp1
927  %sel = select i1 %and, i16 %val5, i16 %val6
928  ret i16 %sel
929
930; CHECK: fun61
931; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
932; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
933; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
934; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
935}
936
937define i32 @fun62(float %val1, float %val2, float %val3, float %val4,
938                  i32 %val5, i32 %val6) {
939  %cmp0 = fcmp ogt float %val1, %val2
940  %cmp1 = fcmp ogt float %val3, %val4
941  %and = or i1 %cmp0, %cmp1
942  %sel = select i1 %and, i32 %val5, i32 %val6
943  ret i32 %sel
944
945; CHECK: fun62
946; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
947; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
948; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
949; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
950}
951
952define i64 @fun63(float %val1, float %val2, float %val3, float %val4,
953                  i64 %val5, i64 %val6) {
954  %cmp0 = fcmp ogt float %val1, %val2
955  %cmp1 = fcmp ogt float %val3, %val4
956  %and = or i1 %cmp0, %cmp1
957  %sel = select i1 %and, i64 %val5, i64 %val6
958  ret i64 %sel
959
960; CHECK: fun63
961; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
962; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
963; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
964; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
965}
966
967define float @fun64(float %val1, float %val2, float %val3, float %val4,
968                    float %val5, float %val6) {
969  %cmp0 = fcmp ogt float %val1, %val2
970  %cmp1 = fcmp ogt float %val3, %val4
971  %and = or i1 %cmp0, %cmp1
972  %sel = select i1 %and, float %val5, float %val6
973  ret float %sel
974
975; CHECK: fun64
976; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
977; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
978; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
979; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
980}
981
982define double @fun65(float %val1, float %val2, float %val3, float %val4,
983                     double %val5, double %val6) {
984  %cmp0 = fcmp ogt float %val1, %val2
985  %cmp1 = fcmp ogt float %val3, %val4
986  %and = or i1 %cmp0, %cmp1
987  %sel = select i1 %and, double %val5, double %val6
988  ret double %sel
989
990; CHECK: fun65
991; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
992; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
993; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
994; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
995}
996
997define i8 @fun66(double %val1, double %val2, double %val3, double %val4,
998                 i8 %val5, i8 %val6) {
999  %cmp0 = fcmp ogt double %val1, %val2
1000  %cmp1 = fcmp ogt double %val3, %val4
1001  %and = or i1 %cmp0, %cmp1
1002  %sel = select i1 %and, i8 %val5, i8 %val6
1003  ret i8 %sel
1004
1005; CHECK: fun66
1006; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1007; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1008; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1009; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1010}
1011
1012define i16 @fun67(double %val1, double %val2, double %val3, double %val4,
1013                  i16 %val5, i16 %val6) {
1014  %cmp0 = fcmp ogt double %val1, %val2
1015  %cmp1 = fcmp ogt double %val3, %val4
1016  %and = or i1 %cmp0, %cmp1
1017  %sel = select i1 %and, i16 %val5, i16 %val6
1018  ret i16 %sel
1019
1020; CHECK: fun67
1021; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1022; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1023; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1024; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1025}
1026
1027define i32 @fun68(double %val1, double %val2, double %val3, double %val4,
1028                  i32 %val5, i32 %val6) {
1029  %cmp0 = fcmp ogt double %val1, %val2
1030  %cmp1 = fcmp ogt double %val3, %val4
1031  %and = or i1 %cmp0, %cmp1
1032  %sel = select i1 %and, i32 %val5, i32 %val6
1033  ret i32 %sel
1034
1035; CHECK: fun68
1036; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1037; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1038; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1039; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1040}
1041
1042define i64 @fun69(double %val1, double %val2, double %val3, double %val4,
1043                  i64 %val5, i64 %val6) {
1044  %cmp0 = fcmp ogt double %val1, %val2
1045  %cmp1 = fcmp ogt double %val3, %val4
1046  %and = or i1 %cmp0, %cmp1
1047  %sel = select i1 %and, i64 %val5, i64 %val6
1048  ret i64 %sel
1049
1050; CHECK: fun69
1051; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1052; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1053; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1054; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1055}
1056
1057define float @fun70(double %val1, double %val2, double %val3, double %val4,
1058                    float %val5, float %val6) {
1059  %cmp0 = fcmp ogt double %val1, %val2
1060  %cmp1 = fcmp ogt double %val3, %val4
1061  %and = or i1 %cmp0, %cmp1
1062  %sel = select i1 %and, float %val5, float %val6
1063  ret float %sel
1064
1065; CHECK: fun70
1066; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1067; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1068; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1069; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1070}
1071
1072define double @fun71(double %val1, double %val2, double %val3, double %val4,
1073                     double %val5, double %val6) {
1074  %cmp0 = fcmp ogt double %val1, %val2
1075  %cmp1 = fcmp ogt double %val3, %val4
1076  %and = or i1 %cmp0, %cmp1
1077  %sel = select i1 %and, double %val5, double %val6
1078  ret double %sel
1079
1080; CHECK: fun71
1081; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1082; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1083; CHECK: cost of 1 for instruction:   %and = or i1 %cmp0, %cmp1
1084; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1085}
1086
1087define i8 @fun72(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1088                 i8 %val5, i8 %val6) {
1089  %cmp0 = icmp eq i8 %val1, %val2
1090  %cmp1 = icmp eq i8 %val3, %val4
1091  %and = xor i1 %cmp0, %cmp1
1092  %sel = select i1 %and, i8 %val5, i8 %val6
1093  ret i8 %sel
1094
1095; CHECK: fun72
1096; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1097; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1098; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1099; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1100; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1101}
1102
1103define i16 @fun73(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1104                  i16 %val5, i16 %val6) {
1105  %cmp0 = icmp eq i8 %val1, %val2
1106  %cmp1 = icmp eq i8 %val3, %val4
1107  %and = xor i1 %cmp0, %cmp1
1108  %sel = select i1 %and, i16 %val5, i16 %val6
1109  ret i16 %sel
1110
1111; CHECK: fun73
1112; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1113; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1114; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1115; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1116; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1117}
1118
1119define i32 @fun74(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1120                  i32 %val5, i32 %val6) {
1121  %cmp0 = icmp eq i8 %val1, %val2
1122  %cmp1 = icmp eq i8 %val3, %val4
1123  %and = xor i1 %cmp0, %cmp1
1124  %sel = select i1 %and, i32 %val5, i32 %val6
1125  ret i32 %sel
1126
1127; CHECK: fun74
1128; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1129; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1130; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1131; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1132; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1133}
1134
1135define i64 @fun75(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1136                  i64 %val5, i64 %val6) {
1137  %cmp0 = icmp eq i8 %val1, %val2
1138  %cmp1 = icmp eq i8 %val3, %val4
1139  %and = xor i1 %cmp0, %cmp1
1140  %sel = select i1 %and, i64 %val5, i64 %val6
1141  ret i64 %sel
1142
1143; CHECK: fun75
1144; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1145; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1146; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1147; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1148; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1149}
1150
1151define float @fun76(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1152                    float %val5, float %val6) {
1153  %cmp0 = icmp eq i8 %val1, %val2
1154  %cmp1 = icmp eq i8 %val3, %val4
1155  %and = xor i1 %cmp0, %cmp1
1156  %sel = select i1 %and, float %val5, float %val6
1157  ret float %sel
1158
1159; CHECK: fun76
1160; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1161; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1162; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1163; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1164; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1165}
1166
1167define double @fun77(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
1168                     double %val5, double %val6) {
1169  %cmp0 = icmp eq i8 %val1, %val2
1170  %cmp1 = icmp eq i8 %val3, %val4
1171  %and = xor i1 %cmp0, %cmp1
1172  %sel = select i1 %and, double %val5, double %val6
1173  ret double %sel
1174
1175; CHECK: fun77
1176; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i8 %val1, %val2
1177; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i8 %val3, %val4
1178; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1179; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1180; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1181}
1182
1183define i8 @fun78(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1184                 i8 %val5, i8 %val6) {
1185  %cmp0 = icmp eq i16 %val1, %val2
1186  %cmp1 = icmp eq i16 %val3, %val4
1187  %and = xor i1 %cmp0, %cmp1
1188  %sel = select i1 %and, i8 %val5, i8 %val6
1189  ret i8 %sel
1190
1191; CHECK: fun78
1192; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1193; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1194; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1195; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1196; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1197}
1198
1199define i16 @fun79(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1200                  i16 %val5, i16 %val6) {
1201  %cmp0 = icmp eq i16 %val1, %val2
1202  %cmp1 = icmp eq i16 %val3, %val4
1203  %and = xor i1 %cmp0, %cmp1
1204  %sel = select i1 %and, i16 %val5, i16 %val6
1205  ret i16 %sel
1206
1207; CHECK: fun79
1208; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1209; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1210; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1211; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1212; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1213}
1214
1215define i32 @fun80(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1216                  i32 %val5, i32 %val6) {
1217  %cmp0 = icmp eq i16 %val1, %val2
1218  %cmp1 = icmp eq i16 %val3, %val4
1219  %and = xor i1 %cmp0, %cmp1
1220  %sel = select i1 %and, i32 %val5, i32 %val6
1221  ret i32 %sel
1222
1223; CHECK: fun80
1224; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1225; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1226; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1227; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1228; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1229}
1230
1231define i64 @fun81(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1232                  i64 %val5, i64 %val6) {
1233  %cmp0 = icmp eq i16 %val1, %val2
1234  %cmp1 = icmp eq i16 %val3, %val4
1235  %and = xor i1 %cmp0, %cmp1
1236  %sel = select i1 %and, i64 %val5, i64 %val6
1237  ret i64 %sel
1238
1239; CHECK: fun81
1240; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1241; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1242; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1243; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1244; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1245}
1246
1247define float @fun82(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1248                    float %val5, float %val6) {
1249  %cmp0 = icmp eq i16 %val1, %val2
1250  %cmp1 = icmp eq i16 %val3, %val4
1251  %and = xor i1 %cmp0, %cmp1
1252  %sel = select i1 %and, float %val5, float %val6
1253  ret float %sel
1254
1255; CHECK: fun82
1256; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1257; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1258; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1259; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1260; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1261}
1262
1263define double @fun83(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
1264                     double %val5, double %val6) {
1265  %cmp0 = icmp eq i16 %val1, %val2
1266  %cmp1 = icmp eq i16 %val3, %val4
1267  %and = xor i1 %cmp0, %cmp1
1268  %sel = select i1 %and, double %val5, double %val6
1269  ret double %sel
1270
1271; CHECK: fun83
1272; CHECK: cost of 3 for instruction:   %cmp0 = icmp eq i16 %val1, %val2
1273; CHECK: cost of 3 for instruction:   %cmp1 = icmp eq i16 %val3, %val4
1274; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1275; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1276; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1277}
1278
1279define i8 @fun84(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1280                 i8 %val5, i8 %val6) {
1281  %cmp0 = icmp eq i32 %val1, %val2
1282  %cmp1 = icmp eq i32 %val3, %val4
1283  %and = xor i1 %cmp0, %cmp1
1284  %sel = select i1 %and, i8 %val5, i8 %val6
1285  ret i8 %sel
1286
1287; CHECK: fun84
1288; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1289; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1290; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1291; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1292; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1293}
1294
1295define i16 @fun85(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1296                  i16 %val5, i16 %val6) {
1297  %cmp0 = icmp eq i32 %val1, %val2
1298  %cmp1 = icmp eq i32 %val3, %val4
1299  %and = xor i1 %cmp0, %cmp1
1300  %sel = select i1 %and, i16 %val5, i16 %val6
1301  ret i16 %sel
1302
1303; CHECK: fun85
1304; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1305; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1306; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1307; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1308; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1309}
1310
1311define i32 @fun86(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1312                  i32 %val5, i32 %val6) {
1313  %cmp0 = icmp eq i32 %val1, %val2
1314  %cmp1 = icmp eq i32 %val3, %val4
1315  %and = xor i1 %cmp0, %cmp1
1316  %sel = select i1 %and, i32 %val5, i32 %val6
1317  ret i32 %sel
1318
1319; CHECK: fun86
1320; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1321; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1322; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1323; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1324; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1325}
1326
1327define i64 @fun87(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1328                  i64 %val5, i64 %val6) {
1329  %cmp0 = icmp eq i32 %val1, %val2
1330  %cmp1 = icmp eq i32 %val3, %val4
1331  %and = xor i1 %cmp0, %cmp1
1332  %sel = select i1 %and, i64 %val5, i64 %val6
1333  ret i64 %sel
1334
1335; CHECK: fun87
1336; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1337; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1338; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1339; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1340; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1341}
1342
1343define float @fun88(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1344                    float %val5, float %val6) {
1345  %cmp0 = icmp eq i32 %val1, %val2
1346  %cmp1 = icmp eq i32 %val3, %val4
1347  %and = xor i1 %cmp0, %cmp1
1348  %sel = select i1 %and, float %val5, float %val6
1349  ret float %sel
1350
1351; CHECK: fun88
1352; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1353; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1354; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1355; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1356; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1357}
1358
1359define double @fun89(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
1360                     double %val5, double %val6) {
1361  %cmp0 = icmp eq i32 %val1, %val2
1362  %cmp1 = icmp eq i32 %val3, %val4
1363  %and = xor i1 %cmp0, %cmp1
1364  %sel = select i1 %and, double %val5, double %val6
1365  ret double %sel
1366
1367; CHECK: fun89
1368; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i32 %val1, %val2
1369; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i32 %val3, %val4
1370; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1371; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1372; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1373}
1374
1375define i8 @fun90(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1376                 i8 %val5, i8 %val6) {
1377  %cmp0 = icmp eq i64 %val1, %val2
1378  %cmp1 = icmp eq i64 %val3, %val4
1379  %and = xor i1 %cmp0, %cmp1
1380  %sel = select i1 %and, i8 %val5, i8 %val6
1381  ret i8 %sel
1382
1383; CHECK: fun90
1384; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1385; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1386; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1387; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1388; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1389}
1390
1391define i16 @fun91(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1392                  i16 %val5, i16 %val6) {
1393  %cmp0 = icmp eq i64 %val1, %val2
1394  %cmp1 = icmp eq i64 %val3, %val4
1395  %and = xor i1 %cmp0, %cmp1
1396  %sel = select i1 %and, i16 %val5, i16 %val6
1397  ret i16 %sel
1398
1399; CHECK: fun91
1400; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1401; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1402; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1403; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1404; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1405}
1406
1407define i32 @fun92(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1408                  i32 %val5, i32 %val6) {
1409  %cmp0 = icmp eq i64 %val1, %val2
1410  %cmp1 = icmp eq i64 %val3, %val4
1411  %and = xor i1 %cmp0, %cmp1
1412  %sel = select i1 %and, i32 %val5, i32 %val6
1413  ret i32 %sel
1414
1415; CHECK: fun92
1416; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1417; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1418; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1419; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1420; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1421}
1422
1423define i64 @fun93(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1424                  i64 %val5, i64 %val6) {
1425  %cmp0 = icmp eq i64 %val1, %val2
1426  %cmp1 = icmp eq i64 %val3, %val4
1427  %and = xor i1 %cmp0, %cmp1
1428  %sel = select i1 %and, i64 %val5, i64 %val6
1429  ret i64 %sel
1430
1431; CHECK: fun93
1432; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1433; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1434; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1435; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1436; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1437}
1438
1439define float @fun94(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1440                    float %val5, float %val6) {
1441  %cmp0 = icmp eq i64 %val1, %val2
1442  %cmp1 = icmp eq i64 %val3, %val4
1443  %and = xor i1 %cmp0, %cmp1
1444  %sel = select i1 %and, float %val5, float %val6
1445  ret float %sel
1446
1447; CHECK: fun94
1448; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1449; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1450; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1451; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1452; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1453}
1454
1455define double @fun95(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
1456                     double %val5, double %val6) {
1457  %cmp0 = icmp eq i64 %val1, %val2
1458  %cmp1 = icmp eq i64 %val3, %val4
1459  %and = xor i1 %cmp0, %cmp1
1460  %sel = select i1 %and, double %val5, double %val6
1461  ret double %sel
1462
1463; CHECK: fun95
1464; CHECK: cost of 1 for instruction:   %cmp0 = icmp eq i64 %val1, %val2
1465; CHECK: cost of 1 for instruction:   %cmp1 = icmp eq i64 %val3, %val4
1466; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1467; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1468; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1469}
1470
1471define i8 @fun96(float %val1, float %val2, float %val3, float %val4,
1472                 i8 %val5, i8 %val6) {
1473  %cmp0 = fcmp ogt float %val1, %val2
1474  %cmp1 = fcmp ogt float %val3, %val4
1475  %and = xor i1 %cmp0, %cmp1
1476  %sel = select i1 %and, i8 %val5, i8 %val6
1477  ret i8 %sel
1478
1479; CHECK: fun96
1480; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1481; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1482; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1483; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1484; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1485}
1486
1487define i16 @fun97(float %val1, float %val2, float %val3, float %val4,
1488                  i16 %val5, i16 %val6) {
1489  %cmp0 = fcmp ogt float %val1, %val2
1490  %cmp1 = fcmp ogt float %val3, %val4
1491  %and = xor i1 %cmp0, %cmp1
1492  %sel = select i1 %and, i16 %val5, i16 %val6
1493  ret i16 %sel
1494
1495; CHECK: fun97
1496; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1497; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1498; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1499; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1500; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1501}
1502
1503define i32 @fun98(float %val1, float %val2, float %val3, float %val4,
1504                  i32 %val5, i32 %val6) {
1505  %cmp0 = fcmp ogt float %val1, %val2
1506  %cmp1 = fcmp ogt float %val3, %val4
1507  %and = xor i1 %cmp0, %cmp1
1508  %sel = select i1 %and, i32 %val5, i32 %val6
1509  ret i32 %sel
1510
1511; CHECK: fun98
1512; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1513; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1514; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1515; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1516; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1517}
1518
1519define i64 @fun99(float %val1, float %val2, float %val3, float %val4,
1520                  i64 %val5, i64 %val6) {
1521  %cmp0 = fcmp ogt float %val1, %val2
1522  %cmp1 = fcmp ogt float %val3, %val4
1523  %and = xor i1 %cmp0, %cmp1
1524  %sel = select i1 %and, i64 %val5, i64 %val6
1525  ret i64 %sel
1526
1527; CHECK: fun99
1528; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1529; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1530; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1531; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1532; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1533}
1534
1535define float @fun100(float %val1, float %val2, float %val3, float %val4,
1536                     float %val5, float %val6) {
1537  %cmp0 = fcmp ogt float %val1, %val2
1538  %cmp1 = fcmp ogt float %val3, %val4
1539  %and = xor i1 %cmp0, %cmp1
1540  %sel = select i1 %and, float %val5, float %val6
1541  ret float %sel
1542
1543; CHECK: fun100
1544; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1545; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1546; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1547; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1548; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1549}
1550
1551define double @fun101(float %val1, float %val2, float %val3, float %val4,
1552                      double %val5, double %val6) {
1553  %cmp0 = fcmp ogt float %val1, %val2
1554  %cmp1 = fcmp ogt float %val3, %val4
1555  %and = xor i1 %cmp0, %cmp1
1556  %sel = select i1 %and, double %val5, double %val6
1557  ret double %sel
1558
1559; CHECK: fun101
1560; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt float %val1, %val2
1561; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt float %val3, %val4
1562; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1563; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1564; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1565}
1566
1567define i8 @fun102(double %val1, double %val2, double %val3, double %val4,
1568                  i8 %val5, i8 %val6) {
1569  %cmp0 = fcmp ogt double %val1, %val2
1570  %cmp1 = fcmp ogt double %val3, %val4
1571  %and = xor i1 %cmp0, %cmp1
1572  %sel = select i1 %and, i8 %val5, i8 %val6
1573  ret i8 %sel
1574
1575; CHECK: fun102
1576; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1577; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1578; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1579; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1580; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i8 %val5, i8 %val6
1581}
1582
1583define i16 @fun103(double %val1, double %val2, double %val3, double %val4,
1584                   i16 %val5, i16 %val6) {
1585  %cmp0 = fcmp ogt double %val1, %val2
1586  %cmp1 = fcmp ogt double %val3, %val4
1587  %and = xor i1 %cmp0, %cmp1
1588  %sel = select i1 %and, i16 %val5, i16 %val6
1589  ret i16 %sel
1590
1591; CHECK: fun103
1592; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1593; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1594; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1595; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1596; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i16 %val5, i16 %val6
1597}
1598
1599define i32 @fun104(double %val1, double %val2, double %val3, double %val4,
1600                   i32 %val5, i32 %val6) {
1601  %cmp0 = fcmp ogt double %val1, %val2
1602  %cmp1 = fcmp ogt double %val3, %val4
1603  %and = xor i1 %cmp0, %cmp1
1604  %sel = select i1 %and, i32 %val5, i32 %val6
1605  ret i32 %sel
1606
1607; CHECK: fun104
1608; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1609; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1610; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1611; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1612; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i32 %val5, i32 %val6
1613}
1614
1615define i64 @fun105(double %val1, double %val2, double %val3, double %val4,
1616                   i64 %val5, i64 %val6) {
1617  %cmp0 = fcmp ogt double %val1, %val2
1618  %cmp1 = fcmp ogt double %val3, %val4
1619  %and = xor i1 %cmp0, %cmp1
1620  %sel = select i1 %and, i64 %val5, i64 %val6
1621  ret i64 %sel
1622
1623; CHECK: fun105
1624; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1625; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1626; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1627; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1628; CHECK: cost of 1 for instruction:   %sel = select i1 %and, i64 %val5, i64 %val6
1629}
1630
1631define float @fun106(double %val1, double %val2, double %val3, double %val4,
1632                     float %val5, float %val6) {
1633  %cmp0 = fcmp ogt double %val1, %val2
1634  %cmp1 = fcmp ogt double %val3, %val4
1635  %and = xor i1 %cmp0, %cmp1
1636  %sel = select i1 %and, float %val5, float %val6
1637  ret float %sel
1638
1639; CHECK: fun106
1640; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1641; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1642; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1643; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1644; CHECK: cost of 4 for instruction:   %sel = select i1 %and, float %val5, float %val6
1645}
1646
1647define double @fun107(double %val1, double %val2, double %val3, double %val4,
1648                      double %val5, double %val6) {
1649  %cmp0 = fcmp ogt double %val1, %val2
1650  %cmp1 = fcmp ogt double %val3, %val4
1651  %and = xor i1 %cmp0, %cmp1
1652  %sel = select i1 %and, double %val5, double %val6
1653  ret double %sel
1654
1655; CHECK: fun107
1656; CHECK: cost of 1 for instruction:   %cmp0 = fcmp ogt double %val1, %val2
1657; CHECK: cost of 1 for instruction:   %cmp1 = fcmp ogt double %val3, %val4
1658; CHECK: cost of 5 for instruction:   %and = xor i1 %cmp0, %cmp1
1659; IPMSQ: cost of 7 for instruction:   %and = xor i1 %cmp0, %cmp1
1660; CHECK: cost of 4 for instruction:   %sel = select i1 %and, double %val5, double %val6
1661}
1662
1663