xref: /llvm-project/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-02.ll (revision 4178e33470763b406f614b646c8b01d24309e20b)
1; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=zEC12 | FileCheck %s
2;
3; Check the cost values for older subtargets that use an IPM sequence for
4; extension of a compare result.
5
6define i8 @fun0(i8 %val1, i8 %val2) {
7  %cmp = icmp eq i8 %val1, %val2
8  %v = sext i1 %cmp to i8
9  ret i8 %v
10
11; CHECK: fun0
12; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
13; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i8
14}
15
16define i16 @fun1(i8 %val1, i8 %val2) {
17  %cmp = icmp eq i8 %val1, %val2
18  %v = sext i1 %cmp to i16
19  ret i16 %v
20
21; CHECK: fun1
22; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
23; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i16
24}
25
26define i32 @fun2(i8 %val1, i8 %val2) {
27  %cmp = icmp eq i8 %val1, %val2
28  %v = sext i1 %cmp to i32
29  ret i32 %v
30
31; CHECK: fun2
32; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
33; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i32
34}
35
36define i64 @fun3(i8 %val1, i8 %val2) {
37  %cmp = icmp eq i8 %val1, %val2
38  %v = sext i1 %cmp to i64
39  ret i64 %v
40
41; CHECK: fun3
42; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
43; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i64
44}
45
46define i8 @fun4(i16 %val1, i16 %val2) {
47  %cmp = icmp eq i16 %val1, %val2
48  %v = sext i1 %cmp to i8
49  ret i8 %v
50
51; CHECK: fun4
52; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
53; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i8
54}
55
56define i16 @fun5(i16 %val1, i16 %val2) {
57  %cmp = icmp eq i16 %val1, %val2
58  %v = sext i1 %cmp to i16
59  ret i16 %v
60
61; CHECK: fun5
62; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
63; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i16
64}
65
66define i32 @fun6(i16 %val1, i16 %val2) {
67  %cmp = icmp eq i16 %val1, %val2
68  %v = sext i1 %cmp to i32
69  ret i32 %v
70
71; CHECK: fun6
72; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
73; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i32
74}
75
76define i64 @fun7(i16 %val1, i16 %val2) {
77  %cmp = icmp eq i16 %val1, %val2
78  %v = sext i1 %cmp to i64
79  ret i64 %v
80
81; CHECK: fun7
82; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
83; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i64
84}
85
86define i8 @fun8(i32 %val1, i32 %val2) {
87  %cmp = icmp eq i32 %val1, %val2
88  %v = sext i1 %cmp to i8
89  ret i8 %v
90
91; CHECK: fun8
92; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
93; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i8
94}
95
96define i16 @fun9(i32 %val1, i32 %val2) {
97  %cmp = icmp eq i32 %val1, %val2
98  %v = sext i1 %cmp to i16
99  ret i16 %v
100
101; CHECK: fun9
102; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
103; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i16
104}
105
106define i32 @fun10(i32 %val1, i32 %val2) {
107  %cmp = icmp eq i32 %val1, %val2
108  %v = sext i1 %cmp to i32
109  ret i32 %v
110
111; CHECK: fun10
112; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
113; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i32
114}
115
116define i64 @fun11(i32 %val1, i32 %val2) {
117  %cmp = icmp eq i32 %val1, %val2
118  %v = sext i1 %cmp to i64
119  ret i64 %v
120
121; CHECK: fun11
122; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
123; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i64
124}
125
126define i8 @fun12(i64 %val1, i64 %val2) {
127  %cmp = icmp eq i64 %val1, %val2
128  %v = sext i1 %cmp to i8
129  ret i8 %v
130
131; CHECK: fun12
132; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
133; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i8
134}
135
136define i16 @fun13(i64 %val1, i64 %val2) {
137  %cmp = icmp eq i64 %val1, %val2
138  %v = sext i1 %cmp to i16
139  ret i16 %v
140
141; CHECK: fun13
142; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
143; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i16
144}
145
146define i32 @fun14(i64 %val1, i64 %val2) {
147  %cmp = icmp eq i64 %val1, %val2
148  %v = sext i1 %cmp to i32
149  ret i32 %v
150
151; CHECK: fun14
152; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
153; CHECK: cost of 3 for instruction:   %v = sext i1 %cmp to i32
154}
155
156define i64 @fun15(i64 %val1, i64 %val2) {
157  %cmp = icmp eq i64 %val1, %val2
158  %v = sext i1 %cmp to i64
159  ret i64 %v
160
161; CHECK: fun15
162; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
163; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i64
164}
165
166define i8 @fun16(float %val1, float %val2) {
167  %cmp = fcmp ogt float %val1, %val2
168  %v = sext i1 %cmp to i8
169  ret i8 %v
170
171; CHECK: fun16
172; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
173; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i8
174}
175
176define i16 @fun17(float %val1, float %val2) {
177  %cmp = fcmp ogt float %val1, %val2
178  %v = sext i1 %cmp to i16
179  ret i16 %v
180
181; CHECK: fun17
182; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
183; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i16
184}
185
186define i32 @fun18(float %val1, float %val2) {
187  %cmp = fcmp ogt float %val1, %val2
188  %v = sext i1 %cmp to i32
189  ret i32 %v
190
191; CHECK: fun18
192; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
193; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i32
194}
195
196define i64 @fun19(float %val1, float %val2) {
197  %cmp = fcmp ogt float %val1, %val2
198  %v = sext i1 %cmp to i64
199  ret i64 %v
200
201; CHECK: fun19
202; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
203; CHECK: cost of 5 for instruction:   %v = sext i1 %cmp to i64
204}
205
206define i8 @fun20(double %val1, double %val2) {
207  %cmp = fcmp ogt double %val1, %val2
208  %v = sext i1 %cmp to i8
209  ret i8 %v
210
211; CHECK: fun20
212; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
213; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i8
214}
215
216define i16 @fun21(double %val1, double %val2) {
217  %cmp = fcmp ogt double %val1, %val2
218  %v = sext i1 %cmp to i16
219  ret i16 %v
220
221; CHECK: fun21
222; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
223; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i16
224}
225
226define i32 @fun22(double %val1, double %val2) {
227  %cmp = fcmp ogt double %val1, %val2
228  %v = sext i1 %cmp to i32
229  ret i32 %v
230
231; CHECK: fun22
232; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
233; CHECK: cost of 4 for instruction:   %v = sext i1 %cmp to i32
234}
235
236define i64 @fun23(double %val1, double %val2) {
237  %cmp = fcmp ogt double %val1, %val2
238  %v = sext i1 %cmp to i64
239  ret i64 %v
240
241; CHECK: fun23
242; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
243; CHECK: cost of 5 for instruction:   %v = sext i1 %cmp to i64
244}
245
246define i8 @fun120(i8 %val1, i8 %val2) {
247  %cmp = icmp eq i8 %val1, %val2
248  %v = zext i1 %cmp to i8
249  ret i8 %v
250
251; CHECK: fun120
252; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
253; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i8
254}
255
256define i16 @fun121(i8 %val1, i8 %val2) {
257  %cmp = icmp eq i8 %val1, %val2
258  %v = zext i1 %cmp to i16
259  ret i16 %v
260
261; CHECK: fun121
262; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
263; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i16
264}
265
266define i32 @fun122(i8 %val1, i8 %val2) {
267  %cmp = icmp eq i8 %val1, %val2
268  %v = zext i1 %cmp to i32
269  ret i32 %v
270
271; CHECK: fun122
272; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
273; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i32
274}
275
276define i64 @fun123(i8 %val1, i8 %val2) {
277  %cmp = icmp eq i8 %val1, %val2
278  %v = zext i1 %cmp to i64
279  ret i64 %v
280
281; CHECK: fun123
282; CHECK: cost of 3 for instruction:   %cmp = icmp eq i8 %val1, %val2
283; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i64
284}
285
286define i8 @fun124(i16 %val1, i16 %val2) {
287  %cmp = icmp eq i16 %val1, %val2
288  %v = zext i1 %cmp to i8
289  ret i8 %v
290
291; CHECK: fun124
292; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
293; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i8
294}
295
296define i16 @fun125(i16 %val1, i16 %val2) {
297  %cmp = icmp eq i16 %val1, %val2
298  %v = zext i1 %cmp to i16
299  ret i16 %v
300
301; CHECK: fun125
302; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
303; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i16
304}
305
306define i32 @fun126(i16 %val1, i16 %val2) {
307  %cmp = icmp eq i16 %val1, %val2
308  %v = zext i1 %cmp to i32
309  ret i32 %v
310
311; CHECK: fun126
312; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
313; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i32
314}
315
316define i64 @fun127(i16 %val1, i16 %val2) {
317  %cmp = icmp eq i16 %val1, %val2
318  %v = zext i1 %cmp to i64
319  ret i64 %v
320
321; CHECK: fun127
322; CHECK: cost of 3 for instruction:   %cmp = icmp eq i16 %val1, %val2
323; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i64
324}
325
326define i8 @fun128(i32 %val1, i32 %val2) {
327  %cmp = icmp eq i32 %val1, %val2
328  %v = zext i1 %cmp to i8
329  ret i8 %v
330
331; CHECK: fun128
332; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
333; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i8
334}
335
336define i16 @fun129(i32 %val1, i32 %val2) {
337  %cmp = icmp eq i32 %val1, %val2
338  %v = zext i1 %cmp to i16
339  ret i16 %v
340
341; CHECK: fun129
342; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
343; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i16
344}
345
346define i32 @fun130(i32 %val1, i32 %val2) {
347  %cmp = icmp eq i32 %val1, %val2
348  %v = zext i1 %cmp to i32
349  ret i32 %v
350
351; CHECK: fun130
352; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
353; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i32
354}
355
356define i64 @fun131(i32 %val1, i32 %val2) {
357  %cmp = icmp eq i32 %val1, %val2
358  %v = zext i1 %cmp to i64
359  ret i64 %v
360
361; CHECK: fun131
362; CHECK: cost of 1 for instruction:   %cmp = icmp eq i32 %val1, %val2
363; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i64
364}
365
366define i8 @fun132(i64 %val1, i64 %val2) {
367  %cmp = icmp eq i64 %val1, %val2
368  %v = zext i1 %cmp to i8
369  ret i8 %v
370
371; CHECK: fun132
372; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
373; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i8
374}
375
376define i16 @fun133(i64 %val1, i64 %val2) {
377  %cmp = icmp eq i64 %val1, %val2
378  %v = zext i1 %cmp to i16
379  ret i16 %v
380
381; CHECK: fun133
382; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
383; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i16
384}
385
386define i32 @fun134(i64 %val1, i64 %val2) {
387  %cmp = icmp eq i64 %val1, %val2
388  %v = zext i1 %cmp to i32
389  ret i32 %v
390
391; CHECK: fun134
392; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
393; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i32
394}
395
396define i64 @fun135(i64 %val1, i64 %val2) {
397  %cmp = icmp eq i64 %val1, %val2
398  %v = zext i1 %cmp to i64
399  ret i64 %v
400
401; CHECK: fun135
402; CHECK: cost of 1 for instruction:   %cmp = icmp eq i64 %val1, %val2
403; CHECK: cost of 3 for instruction:   %v = zext i1 %cmp to i64
404}
405
406define i8 @fun136(float %val1, float %val2) {
407  %cmp = fcmp ogt float %val1, %val2
408  %v = zext i1 %cmp to i8
409  ret i8 %v
410
411; CHECK: fun136
412; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
413; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i8
414}
415
416define i16 @fun137(float %val1, float %val2) {
417  %cmp = fcmp ogt float %val1, %val2
418  %v = zext i1 %cmp to i16
419  ret i16 %v
420
421; CHECK: fun137
422; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
423; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i16
424}
425
426define i32 @fun138(float %val1, float %val2) {
427  %cmp = fcmp ogt float %val1, %val2
428  %v = zext i1 %cmp to i32
429  ret i32 %v
430
431; CHECK: fun138
432; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
433; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i32
434}
435
436define i64 @fun139(float %val1, float %val2) {
437  %cmp = fcmp ogt float %val1, %val2
438  %v = zext i1 %cmp to i64
439  ret i64 %v
440
441; CHECK: fun139
442; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt float %val1, %val2
443; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i64
444}
445
446define i8 @fun140(double %val1, double %val2) {
447  %cmp = fcmp ogt double %val1, %val2
448  %v = zext i1 %cmp to i8
449  ret i8 %v
450
451; CHECK: fun140
452; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
453; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i8
454}
455
456define i16 @fun141(double %val1, double %val2) {
457  %cmp = fcmp ogt double %val1, %val2
458  %v = zext i1 %cmp to i16
459  ret i16 %v
460
461; CHECK: fun141
462; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
463; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i16
464}
465
466define i32 @fun142(double %val1, double %val2) {
467  %cmp = fcmp ogt double %val1, %val2
468  %v = zext i1 %cmp to i32
469  ret i32 %v
470
471; CHECK: fun142
472; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
473; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i32
474}
475
476define i64 @fun143(double %val1, double %val2) {
477  %cmp = fcmp ogt double %val1, %val2
478  %v = zext i1 %cmp to i64
479  ret i64 %v
480
481; CHECK: fun143
482; CHECK: cost of 1 for instruction:   %cmp = fcmp ogt double %val1, %val2
483; CHECK: cost of 4 for instruction:   %v = zext i1 %cmp to i64
484}
485