1f79470583759d20c20268711e6111461aefa8461Jim Grosbach// REQUIRES: arm-registered-target
21ed1a594e9befc91ebf00d81b41a2fdfab862657Rafael Espindola// RUN: %clang_cc1 -triple arm-unknown-linux-gnueabi -emit-llvm -o - %s | FileCheck %s
334771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar
475d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// CHECK: declare i32 @printf(i8*, ...)
534771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbarvoid f0() {
634771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar  printf("a\n");
734771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar}
834771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar
975d0f82e50565cc4cf71140ecf2141a40a3a5af9Rafael Espindola// CHECK: call void @exit
1034771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar// CHECK: unreachable
1134771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbarvoid f1() {
1234771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar  exit(1);
1334771b594ca8cdf8cd2e40b27170efa4ed2833c5Daniel Dunbar}
14c285372e69f42d95ca638d74abd1f46bd7b77a96Eli Friedman
15c285372e69f42d95ca638d74abd1f46bd7b77a96Eli Friedman// CHECK: call i8* @strstr{{.*}} nounwind
16c285372e69f42d95ca638d74abd1f46bd7b77a96Eli Friedmanchar* f2(char* a, char* b) {
17c285372e69f42d95ca638d74abd1f46bd7b77a96Eli Friedman  return __builtin_strstr(a, b);
18c285372e69f42d95ca638d74abd1f46bd7b77a96Eli Friedman}
1987198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen
2087198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// frexp is NOT readnone. It writes to its pointer argument.
2187198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// <rdar://problem/10070234>
2287198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen//
2387198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: f3
2487198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @frexp(double %
2587198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
2687198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call float @frexpf(float %
2787198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
2887198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @frexpl(double %
2987198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
3087198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen//
3187198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// Same thing for modf and friends.
3287198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen//
3387198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @modf(double %
3487198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
3587198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call float @modff(float %
3687198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
3787198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @modfl(double %
3887198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
3987198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen//
4087198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @remquo(double %
4187198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
4287198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call float @remquof(float %
4387198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
4487198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: call double @remquol(double %
4587198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK-NOT: readnone
4687198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen// CHECK: ret
4787198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesenint f3(double x) {
4887198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  int e;
4987198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_frexp(x, &e);
5087198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_frexpf(x, &e);
5187198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_frexpl(x, &e);
5287198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_modf(x, &e);
5387198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_modff(x, &e);
5487198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_modfl(x, &e);
5587198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_remquo(x, x, &e);
5687198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_remquof(x, x, &e);
5787198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  __builtin_remquol(x, x, &e);
5887198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen  return e;
5987198c304cc1fae48b7a06ce9faf8b4017981059Jakob Stoklund Olesen}
60