xref: /llvm-project/llvm/test/Transforms/InstCombine/disable-simplify-libcalls.ll (revision 3528e63d89305907b3d6e0f59f7b03b94a12dacc)
1; Test that -disable-simplify-libcalls is wired up correctly.
2;
3; RUN: opt < %s -passes=instcombine -disable-simplify-libcalls -S | FileCheck %s
4
5target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
6
7@.str  = constant [1 x i8] zeroinitializer, align 1
8@.str1 = constant [13 x i8] c"hello, world\00", align 1
9@.str2 = constant [4 x i8] c"foo\00", align 1
10@.str3 = constant [4 x i8] c"bar\00", align 1
11@.str4 = constant [6 x i8] c"123.4\00", align 1
12@.str5 = constant [5 x i8] c"1234\00", align 1
13@empty = constant [1 x i8] c"\00", align 1
14
15declare double @ceil(double)
16declare double @copysign(double, double)
17declare double @cos(double)
18declare double @fabs(double)
19declare double @floor(double)
20declare ptr @strcat(ptr, ptr)
21declare ptr @strncat(ptr, ptr, i32)
22declare ptr @strchr(ptr, i32)
23declare ptr @strrchr(ptr, i32)
24declare i32 @strcmp(ptr, ptr)
25declare i32 @strncmp(ptr, ptr, i64)
26declare ptr @strcpy(ptr, ptr)
27declare ptr @stpcpy(ptr, ptr)
28declare ptr @strncpy(ptr, ptr, i64)
29declare i64 @strlen(ptr)
30declare ptr @strpbrk(ptr, ptr)
31declare i64 @strspn(ptr, ptr)
32declare double @strtod(ptr, ptr)
33declare float @strtof(ptr, ptr)
34declare x86_fp80 @strtold(ptr, ptr)
35declare i64 @strtol(ptr, ptr, i32)
36declare i64 @strtoll(ptr, ptr, i32)
37declare i64 @strtoul(ptr, ptr, i32)
38declare i64 @strtoull(ptr, ptr, i32)
39declare i64 @strcspn(ptr, ptr)
40declare i32 @abs(i32)
41declare i32 @ffs(i32)
42declare i32 @ffsl(i64)
43declare i32 @ffsll(i64)
44declare i32 @fprintf(ptr, ptr)
45declare i32 @isascii(i32)
46declare i32 @isdigit(i32)
47declare i32 @toascii(i32)
48declare i64 @labs(i64)
49declare i64 @llabs(i64)
50declare i32 @printf(ptr)
51declare i32 @sprintf(ptr, ptr)
52
53define double @t1(double %x) {
54; CHECK-LABEL: @t1(
55  %ret = call double @ceil(double %x)
56  ret double %ret
57; CHECK: call double @ceil
58}
59
60define double @t2(double %x, double %y) {
61; CHECK-LABEL: @t2(
62  %ret = call double @copysign(double %x, double %y)
63  ret double %ret
64; CHECK: call double @copysign
65}
66
67define double @t3(double %x) {
68; CHECK-LABEL: @t3(
69  %call = call double @cos(double %x)
70  ret double %call
71; CHECK: call double @cos
72}
73
74define double @t4(double %x) {
75; CHECK-LABEL: @t4(
76  %ret = call double @fabs(double %x)
77  ret double %ret
78; CHECK: call double @fabs
79}
80
81define double @t5(double %x) {
82; CHECK-LABEL: @t5(
83  %ret = call double @floor(double %x)
84  ret double %ret
85; CHECK: call double @floor
86}
87
88define ptr @t6(ptr %x) {
89; CHECK-LABEL: @t6(
90  %ret = call ptr @strcat(ptr %x, ptr @empty)
91  ret ptr %ret
92; CHECK: call ptr @strcat
93}
94
95define ptr @t7(ptr %x) {
96; CHECK-LABEL: @t7(
97  %ret = call ptr @strncat(ptr %x, ptr @empty, i32 1)
98  ret ptr %ret
99; CHECK: call ptr @strncat
100}
101
102define ptr @t8() {
103; CHECK-LABEL: @t8(
104  %ret = call ptr @strchr(ptr @.str1, i32 119)
105  ret ptr %ret
106; CHECK: call ptr @strchr
107}
108
109define ptr @t9() {
110; CHECK-LABEL: @t9(
111  %ret = call ptr @strrchr(ptr @.str1, i32 119)
112  ret ptr %ret
113; CHECK: call ptr @strrchr
114}
115
116define i32 @t10() {
117; CHECK-LABEL: @t10(
118  %ret = call i32 @strcmp(ptr @.str2, ptr @.str3)
119  ret i32 %ret
120; CHECK: call i32 @strcmp
121}
122
123define i32 @t11() {
124; CHECK-LABEL: @t11(
125  %ret = call i32 @strncmp(ptr @.str2, ptr @.str3, i64 3)
126  ret i32 %ret
127; CHECK: call i32 @strncmp
128}
129
130define ptr @t12(ptr %x) {
131; CHECK-LABEL: @t12(
132  %ret = call ptr @strcpy(ptr %x, ptr @.str2)
133  ret ptr %ret
134; CHECK: call ptr @strcpy
135}
136
137define ptr @t13(ptr %x) {
138; CHECK-LABEL: @t13(
139  %ret = call ptr @stpcpy(ptr %x, ptr @.str2)
140  ret ptr %ret
141; CHECK: call ptr @stpcpy
142}
143
144define ptr @t14(ptr %x) {
145; CHECK-LABEL: @t14(
146  %ret = call ptr @strncpy(ptr %x, ptr @.str2, i64 3)
147  ret ptr %ret
148; CHECK: call ptr @strncpy
149}
150
151define i64 @t15() {
152; CHECK-LABEL: @t15(
153  %ret = call i64 @strlen(ptr @.str2)
154  ret i64 %ret
155; CHECK: call i64 @strlen
156}
157
158define ptr @t16(ptr %x) {
159; CHECK-LABEL: @t16(
160  %ret = call ptr @strpbrk(ptr %x, ptr @.str)
161  ret ptr %ret
162; CHECK: call ptr @strpbrk
163}
164
165define i64 @t17(ptr %x) {
166; CHECK-LABEL: @t17(
167  %ret = call i64 @strspn(ptr %x, ptr @.str)
168  ret i64 %ret
169; CHECK: call i64 @strspn
170}
171
172define double @t18(ptr %y) {
173; CHECK-LABEL: @t18(
174  %ret = call double @strtod(ptr @.str4, ptr %y)
175  ret double %ret
176; CHECK: call double @strtod
177}
178
179define float @t19(ptr %y) {
180; CHECK-LABEL: @t19(
181  %ret = call float @strtof(ptr @.str4, ptr %y)
182  ret float %ret
183; CHECK: call float @strtof
184}
185
186define x86_fp80 @t20(ptr %y) {
187; CHECK-LABEL: @t20(
188  %ret = call x86_fp80 @strtold(ptr @.str4, ptr %y)
189  ret x86_fp80 %ret
190; CHECK: call x86_fp80 @strtold
191}
192
193define i64 @t21(ptr %y) {
194; CHECK-LABEL: @t21(
195  %ret = call i64 @strtol(ptr @.str5, ptr %y, i32 10)
196  ret i64 %ret
197; CHECK: call i64 @strtol
198}
199
200define i64 @t22(ptr %y) {
201; CHECK-LABEL: @t22(
202  %ret = call i64 @strtoll(ptr @.str5, ptr %y, i32 10)
203  ret i64 %ret
204; CHECK: call i64 @strtoll
205}
206
207define i64 @t23(ptr %y) {
208; CHECK-LABEL: @t23(
209  %ret = call i64 @strtoul(ptr @.str5, ptr %y, i32 10)
210  ret i64 %ret
211; CHECK: call i64 @strtoul
212}
213
214define i64 @t24(ptr %y) {
215; CHECK-LABEL: @t24(
216  %ret = call i64 @strtoull(ptr @.str5, ptr %y, i32 10)
217  ret i64 %ret
218; CHECK: call i64 @strtoull
219}
220
221define i64 @t25(ptr %y) {
222; CHECK-LABEL: @t25(
223  %ret = call i64 @strcspn(ptr @empty, ptr %y)
224  ret i64 %ret
225; CHECK: call i64 @strcspn
226}
227
228define i32 @t26(i32 %y) {
229; CHECK-LABEL: @t26(
230  %ret = call i32 @abs(i32 %y)
231  ret i32 %ret
232; CHECK: call i32 @abs
233}
234
235define i32 @t27(i32 %y) {
236; CHECK-LABEL: @t27(
237  %ret = call i32 @ffs(i32 %y)
238  ret i32 %ret
239; CHECK: call i32 @ffs
240}
241
242define i32 @t28(i64 %y) {
243; CHECK-LABEL: @t28(
244  %ret = call i32 @ffsl(i64 %y)
245  ret i32 %ret
246; CHECK: call i32 @ffsl
247}
248
249define i32 @t29(i64 %y) {
250; CHECK-LABEL: @t29(
251  %ret = call i32 @ffsll(i64 %y)
252  ret i32 %ret
253; CHECK: call i32 @ffsll
254}
255
256define void @t30() {
257; CHECK-LABEL: @t30(
258  call i32 @fprintf(ptr null, ptr @.str1)
259  ret void
260; CHECK: call i32 @fprintf
261}
262
263define i32 @t31(i32 %y) {
264; CHECK-LABEL: @t31(
265  %ret = call i32 @isascii(i32 %y)
266  ret i32 %ret
267; CHECK: call i32 @isascii
268}
269
270define i32 @t32(i32 %y) {
271; CHECK-LABEL: @t32(
272  %ret = call i32 @isdigit(i32 %y)
273  ret i32 %ret
274; CHECK: call i32 @isdigit
275}
276
277define i32 @t33(i32 %y) {
278; CHECK-LABEL: @t33(
279  %ret = call i32 @toascii(i32 %y)
280  ret i32 %ret
281; CHECK: call i32 @toascii
282}
283
284define i64 @t34(i64 %y) {
285; CHECK-LABEL: @t34(
286  %ret = call i64 @labs(i64 %y)
287  ret i64 %ret
288; CHECK: call i64 @labs
289}
290
291define i64 @t35(i64 %y) {
292; CHECK-LABEL: @t35(
293  %ret = call i64 @llabs(i64 %y)
294  ret i64 %ret
295; CHECK: call i64 @llabs
296}
297
298define void @t36() {
299; CHECK-LABEL: @t36(
300  call i32 @printf(ptr @empty)
301  ret void
302; CHECK: call i32 @printf
303}
304
305define void @t37(ptr %x) {
306; CHECK-LABEL: @t37(
307  call i32 @sprintf(ptr %x, ptr @.str1)
308  ret void
309; CHECK: call i32 @sprintf
310}
311