LIBBUILTIN(ceill, "LdLd", "fc", "math.h", ALL_LANGUAGES)
LIBBUILTIN(ceilf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cimag, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cimagf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cimagl, "LdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(creal, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(crealf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(creall, "LdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
LIBBUILTIN(copysign, "ddd", "fc", "math.h", ALL_LANGUAGES)
LIBBUILTIN(copysignl, "LdLdLd", "fc", "math.h", ALL_LANGUAGES)
LIBBUILTIN(copysignf, "fff", "fc", "math.h", ALL_LANGUAGES)
}
case Builtin::BI__builtin_creal:
case Builtin::BI__builtin_crealf:
- case Builtin::BI__builtin_creall: {
+ case Builtin::BI__builtin_creall:
+ case Builtin::BIcreal:
+ case Builtin::BIcrealf:
+ case Builtin::BIcreall: {
ComplexPairTy ComplexVal = EmitComplexExpr(E->getArg(0));
return RValue::get(ComplexVal.first);
}
case Builtin::BI__builtin_cimag:
case Builtin::BI__builtin_cimagf:
- case Builtin::BI__builtin_cimagl: {
+ case Builtin::BI__builtin_cimagl:
+ case Builtin::BIcimag:
+ case Builtin::BIcimagf:
+ case Builtin::BIcimagl: {
ComplexPairTy ComplexVal = EmitComplexExpr(E->getArg(0));
return RValue::get(ComplexVal.second);
}
--- /dev/null
+// RUN: %clang_cc1 -fno-builtin -emit-llvm -o - %s -triple i386-unknown-unknown | FileCheck -check-prefix YES %s
+// RUN: %clang_cc1 -emit-llvm -o - %s -triple i386-unknown-unknown | FileCheck -check-prefix NO %s
+
+extern float crealf(float _Complex);
+extern double creal(double _Complex);
+extern long double creall(long double _Complex);
+
+extern float cimagf(float _Complex);
+extern double cimag(double _Complex);
+extern long double cimagl(long double _Complex);
+
+double test_creal(double _Complex z) {
+ return creal(z);
+ // CHECK-NO-NOT: call double @creal
+ // CHECK-YES: call double @creal
+}
+
+long double test_creall(double _Complex z) {
+ return creall(z);
+ // CHECK-NO-NOT: call x86_fp80 @creall
+ // CHECK-YES: call x86_fp80 @creall
+}
+
+float test_crealf(double _Complex z) {
+ return crealf(z);
+ // CHECK-NO-NOT: call float @crealf
+ // CHECK-YES: call float @crealf
+}
+
+double test_cimag(double _Complex z) {
+ return cimag(z);
+ // CHECK-NO-NOT: call double @cimag
+ // CHECK-YES: call double @cimag
+}
+
+long double test_cimagl(double _Complex z) {
+ return cimagl(z);
+ // CHECK-NO-NOT: call x86_fp80 @cimagl
+ // CHECK-YES: call x86_fp80 @cimagl
+}
+
+float test_cimagf(double _Complex z) {
+ return cimagf(z);
+ // CHECK-NO-NOT: call float @cimagf
+ // CHECK-YES: call float @cimagf
+}