Skip to content

Commit a2bb19c

Browse files
committed
[x86] add size cost tests for casts and binops; NFC
Shows bugs for div/rem/fdiv and possibly others.
1 parent 8d75df1 commit a2bb19c

File tree

1 file changed

+248
-0
lines changed

1 file changed

+248
-0
lines changed
Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2+
; RUN: opt < %s -cost-model -cost-kind=code-size -analyze -mtriple=x86_64-- | FileCheck %s
3+
4+
define i8 @trunc_i64_i8(i64 %x) {
5+
; CHECK-LABEL: 'trunc_i64_i8'
6+
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r = trunc i64 %x to i8
7+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i8 %r
8+
;
9+
%r = trunc i64 %x to i8
10+
ret i8 %r
11+
}
12+
13+
define i64 @sext_i8_i64(i8 %x) {
14+
; CHECK-LABEL: 'sext_i8_i64'
15+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = sext i8 %x to i64
16+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
17+
;
18+
%r = sext i8 %x to i64
19+
ret i64 %r
20+
}
21+
22+
define i64 @zext_i8_i64(i8 %x) {
23+
; CHECK-LABEL: 'zext_i8_i64'
24+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = zext i8 %x to i64
25+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
26+
;
27+
%r = zext i8 %x to i64
28+
ret i64 %r
29+
}
30+
31+
define i64 @bitcast_f64_i64(double %x) {
32+
; CHECK-LABEL: 'bitcast_f64_i64'
33+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = bitcast double %x to i64
34+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
35+
;
36+
%r = bitcast double %x to i64
37+
ret i64 %r
38+
}
39+
40+
define double @bitcast_i64_f64(i64 %x) {
41+
; CHECK-LABEL: 'bitcast_i64_f64'
42+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = bitcast i64 %x to double
43+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
44+
;
45+
%r = bitcast i64 %x to double
46+
ret double %r
47+
}
48+
49+
define i64* @inttoptr_i64_p64(i64 %x) {
50+
; CHECK-LABEL: 'inttoptr_i64_p64'
51+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = inttoptr i64 %x to i64*
52+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64* %r
53+
;
54+
%r = inttoptr i64 %x to i64*
55+
ret i64* %r
56+
}
57+
58+
define i64 @ptrtoint_p64_i64(i64* %x) {
59+
; CHECK-LABEL: 'ptrtoint_p64_i64'
60+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = ptrtoint i64* %x to i64
61+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
62+
;
63+
%r = ptrtoint i64* %x to i64
64+
ret i64 %r
65+
}
66+
67+
define i64 @add_i64(i64 %x, i64 %y) {
68+
; CHECK-LABEL: 'add_i64'
69+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = add i64 %x, %y
70+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
71+
;
72+
%r = add i64 %x, %y
73+
ret i64 %r
74+
}
75+
76+
define i64 @sub_i64(i64 %x, i64 %y) {
77+
; CHECK-LABEL: 'sub_i64'
78+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = sub i64 %x, %y
79+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
80+
;
81+
%r = sub i64 %x, %y
82+
ret i64 %r
83+
}
84+
85+
define i64 @mul_i64(i64 %x, i64 %y) {
86+
; CHECK-LABEL: 'mul_i64'
87+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = mul i64 %x, %y
88+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
89+
;
90+
%r = mul i64 %x, %y
91+
ret i64 %r
92+
}
93+
94+
; FIXME: idiv is 1 instruction.
95+
96+
define i64 @sdiv_i64(i64 %x, i64 %y) {
97+
; CHECK-LABEL: 'sdiv_i64'
98+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = sdiv i64 %x, %y
99+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
100+
;
101+
%r = sdiv i64 %x, %y
102+
ret i64 %r
103+
}
104+
105+
; FIXME: div is 1 instruction.
106+
107+
define i64 @udiv_i64(i64 %x, i64 %y) {
108+
; CHECK-LABEL: 'udiv_i64'
109+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = udiv i64 %x, %y
110+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
111+
;
112+
%r = udiv i64 %x, %y
113+
ret i64 %r
114+
}
115+
116+
; FIXME: idiv is 1 instruction.
117+
118+
define i64 @srem_i64(i64 %x, i64 %y) {
119+
; CHECK-LABEL: 'srem_i64'
120+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = srem i64 %x, %y
121+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
122+
;
123+
%r = srem i64 %x, %y
124+
ret i64 %r
125+
}
126+
127+
; FIXME: div is 1 instruction.
128+
129+
define i64 @urem_i64(i64 %x, i64 %y) {
130+
; CHECK-LABEL: 'urem_i64'
131+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = urem i64 %x, %y
132+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
133+
;
134+
%r = urem i64 %x, %y
135+
ret i64 %r
136+
}
137+
138+
define i64 @ashr_i64(i64 %x, i64 %y) {
139+
; CHECK-LABEL: 'ashr_i64'
140+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = ashr i64 %x, %y
141+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
142+
;
143+
%r = ashr i64 %x, %y
144+
ret i64 %r
145+
}
146+
147+
define i64 @lshr_i64(i64 %x, i64 %y) {
148+
; CHECK-LABEL: 'lshr_i64'
149+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = lshr i64 %x, %y
150+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
151+
;
152+
%r = lshr i64 %x, %y
153+
ret i64 %r
154+
}
155+
156+
define i64 @shl_i64(i64 %x, i64 %y) {
157+
; CHECK-LABEL: 'shl_i64'
158+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = shl i64 %x, %y
159+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
160+
;
161+
%r = shl i64 %x, %y
162+
ret i64 %r
163+
}
164+
165+
define i64 @and_i64(i64 %x, i64 %y) {
166+
; CHECK-LABEL: 'and_i64'
167+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = and i64 %x, %y
168+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
169+
;
170+
%r = and i64 %x, %y
171+
ret i64 %r
172+
}
173+
174+
define i64 @or_i64(i64 %x, i64 %y) {
175+
; CHECK-LABEL: 'or_i64'
176+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = or i64 %x, %y
177+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
178+
;
179+
%r = or i64 %x, %y
180+
ret i64 %r
181+
}
182+
183+
define i64 @xor_i64(i64 %x, i64 %y) {
184+
; CHECK-LABEL: 'xor_i64'
185+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = xor i64 %x, %y
186+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %r
187+
;
188+
%r = xor i64 %x, %y
189+
ret i64 %r
190+
}
191+
192+
define double @fadd_f64(double %x, double %y) {
193+
; CHECK-LABEL: 'fadd_f64'
194+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = fadd double %x, %y
195+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
196+
;
197+
%r = fadd double %x, %y
198+
ret double %r
199+
}
200+
201+
define double @fsub_f64(double %x, double %y) {
202+
; CHECK-LABEL: 'fsub_f64'
203+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = fsub double %x, %y
204+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
205+
;
206+
%r = fsub double %x, %y
207+
ret double %r
208+
}
209+
210+
define double @fmul_f64(double %x, double %y) {
211+
; CHECK-LABEL: 'fmul_f64'
212+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = fmul double %x, %y
213+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
214+
;
215+
%r = fmul double %x, %y
216+
ret double %r
217+
}
218+
219+
; FIXME: divsd is 1 instruction.
220+
221+
define double @fdiv_f64(double %x, double %y) {
222+
; CHECK-LABEL: 'fdiv_f64'
223+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = fdiv double %x, %y
224+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
225+
;
226+
%r = fdiv double %x, %y
227+
ret double %r
228+
}
229+
230+
; TODO: How does this lower?
231+
232+
define double @frem_f64(double %x, double %y) {
233+
; CHECK-LABEL: 'frem_f64'
234+
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %r = frem double %x, %y
235+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
236+
;
237+
%r = frem double %x, %y
238+
ret double %r
239+
}
240+
241+
define double @fneg_f64(double %x) {
242+
; CHECK-LABEL: 'fneg_f64'
243+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r = fneg double %x
244+
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret double %r
245+
;
246+
%r = fneg double %x
247+
ret double %r
248+
}

0 commit comments

Comments
 (0)