blob: 155c97c0104c2396eba0572dd6590975b2f50630 [file] [log] [blame]
Meador Inge03be2562012-11-10 03:11:10 +00001; Test that -disable-simplify-libcalls is wired up correctly.
2;
3; RUN: opt < %s -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 i8* @strcat(i8*, i8*)
21declare i8* @strncat(i8*, i8*, i32)
22declare i8* @strchr(i8*, i32)
23declare i8* @strrchr(i8*, i32)
24declare i32 @strcmp(i8*, i8*)
25declare i32 @strncmp(i8*, i8*, i64)
26declare i8* @strcpy(i8*, i8*)
27declare i8* @stpcpy(i8*, i8*)
28declare i8* @strncpy(i8*, i8*, i64)
29declare i64 @strlen(i8*)
30declare i8* @strpbrk(i8*, i8*)
31declare i64 @strspn(i8*, i8*)
32declare double @strtod(i8*, i8**)
33declare float @strtof(i8*, i8**)
34declare x86_fp80 @strtold(i8*, i8**)
35declare i64 @strtol(i8*, i8**, i32)
36declare i64 @strtoll(i8*, i8**, i32)
37declare i64 @strtoul(i8*, i8**, i32)
38declare i64 @strtoull(i8*, i8**, i32)
39
40define double @t1(double %x) {
41; CHECK: @t1
42 %ret = call double @ceil(double %x)
43 ret double %ret
44; CHECK: call double @ceil
45}
46
47define double @t2(double %x, double %y) {
48; CHECK: @t2
49 %ret = call double @copysign(double %x, double %y)
50 ret double %ret
51; CHECK: call double @copysign
52}
53
54define double @t3(double %x) {
55; CHECK: @t3
56 %call = call double @cos(double %x)
57 ret double %call
58; CHECK: call double @cos
59}
60
61define double @t4(double %x) {
62; CHECK: @t4
63 %ret = call double @fabs(double %x)
64 ret double %ret
65; CHECK: call double @fabs
66}
67
68define double @t5(double %x) {
69; CHECK: @t5
70 %ret = call double @floor(double %x)
71 ret double %ret
72; CHECK: call double @floor
73}
74
75define i8* @t6(i8* %x) {
76; CHECK: @t6
77 %empty = getelementptr [1 x i8]* @empty, i32 0, i32 0
78 %ret = call i8* @strcat(i8* %x, i8* %empty)
79 ret i8* %ret
80; CHECK: call i8* @strcat
81}
82
83define i8* @t7(i8* %x) {
84; CHECK: @t7
85 %empty = getelementptr [1 x i8]* @empty, i32 0, i32 0
86 %ret = call i8* @strncat(i8* %x, i8* %empty, i32 1)
87 ret i8* %ret
88; CHECK: call i8* @strncat
89}
90
91define i8* @t8() {
92; CHECK: @t8
93 %x = getelementptr inbounds [13 x i8]* @.str1, i32 0, i32 0
94 %ret = call i8* @strchr(i8* %x, i32 119)
95 ret i8* %ret
96; CHECK: call i8* @strchr
97}
98
99define i8* @t9() {
100; CHECK: @t9
101 %x = getelementptr inbounds [13 x i8]* @.str1, i32 0, i32 0
102 %ret = call i8* @strrchr(i8* %x, i32 119)
103 ret i8* %ret
104; CHECK: call i8* @strrchr
105}
106
107define i32 @t10() {
108; CHECK: @t10
109 %x = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
110 %y = getelementptr inbounds [4 x i8]* @.str3, i32 0, i32 0
111 %ret = call i32 @strcmp(i8* %x, i8* %y)
112 ret i32 %ret
113; CHECK: call i32 @strcmp
114}
115
116define i32 @t11() {
117; CHECK: @t11
118 %x = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
119 %y = getelementptr inbounds [4 x i8]* @.str3, i32 0, i32 0
120 %ret = call i32 @strncmp(i8* %x, i8* %y, i64 3)
121 ret i32 %ret
122; CHECK: call i32 @strncmp
123}
124
125define i8* @t12(i8* %x) {
126; CHECK: @t12
127 %y = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
128 %ret = call i8* @strcpy(i8* %x, i8* %y)
129 ret i8* %ret
130; CHECK: call i8* @strcpy
131}
132
133define i8* @t13(i8* %x) {
134; CHECK: @t13
135 %y = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
136 %ret = call i8* @stpcpy(i8* %x, i8* %y)
137 ret i8* %ret
138; CHECK: call i8* @stpcpy
139}
140
141define i8* @t14(i8* %x) {
142; CHECK: @t14
143 %y = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
144 %ret = call i8* @strncpy(i8* %x, i8* %y, i64 3)
145 ret i8* %ret
146; CHECK: call i8* @strncpy
147}
148
149define i64 @t15() {
150; CHECK: @t15
151 %x = getelementptr inbounds [4 x i8]* @.str2, i32 0, i32 0
152 %ret = call i64 @strlen(i8* %x)
153 ret i64 %ret
154; CHECK: call i64 @strlen
155}
156
157define i8* @t16(i8* %x) {
158; CHECK: @t16
159 %y = getelementptr inbounds [1 x i8]* @.str, i32 0, i32 0
160 %ret = call i8* @strpbrk(i8* %x, i8* %y)
161 ret i8* %ret
162; CHECK: call i8* @strpbrk
163}
164
165define i64 @t17(i8* %x) {
166; CHECK: @t17
167 %y = getelementptr inbounds [1 x i8]* @.str, i32 0, i32 0
168 %ret = call i64 @strspn(i8* %x, i8* %y)
169 ret i64 %ret
170; CHECK: call i64 @strspn
171}
172
173define double @t18(i8** %y) {
174; CHECK: @t18
175 %x = getelementptr inbounds [6 x i8]* @.str4, i64 0, i64 0
176 %ret = call double @strtod(i8* %x, i8** %y)
177 ret double %ret
178; CHECK: call double @strtod
179}
180
181define float @t19(i8** %y) {
182; CHECK: @t19
183 %x = getelementptr inbounds [6 x i8]* @.str4, i64 0, i64 0
184 %ret = call float @strtof(i8* %x, i8** %y)
185 ret float %ret
186; CHECK: call float @strtof
187}
188
189define x86_fp80 @t20(i8** %y) {
190; CHECK: @t20
191 %x = getelementptr inbounds [6 x i8]* @.str4, i64 0, i64 0
192 %ret = call x86_fp80 @strtold(i8* %x, i8** %y)
193 ret x86_fp80 %ret
194; CHECK: call x86_fp80 @strtold
195}
196
197define i64 @t21(i8** %y) {
198; CHECK: @t21
199 %x = getelementptr inbounds [5 x i8]* @.str5, i64 0, i64 0
200 %ret = call i64 @strtol(i8* %x, i8** %y, i32 10)
201 ret i64 %ret
202; CHECK: call i64 @strtol
203}
204
205define i64 @t22(i8** %y) {
206; CHECK: @t22
207 %x = getelementptr inbounds [5 x i8]* @.str5, i64 0, i64 0
208 %ret = call i64 @strtoll(i8* %x, i8** %y, i32 10)
209 ret i64 %ret
210; CHECK: call i64 @strtoll
211}
212
213define i64 @t23(i8** %y) {
214; CHECK: @t23
215 %x = getelementptr inbounds [5 x i8]* @.str5, i64 0, i64 0
216 %ret = call i64 @strtoul(i8* %x, i8** %y, i32 10)
217 ret i64 %ret
218; CHECK: call i64 @strtoul
219}
220
221define i64 @t24(i8** %y) {
222; CHECK: @t24
223 %x = getelementptr inbounds [5 x i8]* @.str5, i64 0, i64 0
224 %ret = call i64 @strtoull(i8* %x, i8** %y, i32 10)
225 ret i64 %ret
226; CHECK: call i64 @strtoull
227}