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