// REQUIRES: powerpc-registered-target // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fapprox-func --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -Ofast --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-MASS-FAST // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fapprox-func --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -Ofast --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-MASS-FAST // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass=false -O3 -fapprox-func --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass=false -Ofast --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-FAST // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass=false -O3 -fapprox-func --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass=false -Ofast --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-FAST // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fno-approx-func --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -fno-fast-math --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-FAST // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fno-approx-func --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-AFN // RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -fno-fast-math --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-NO-MASS-FAST extern double sin(double a); extern double cos(double a); extern double pow(double a, double b); extern double log(double a); extern double log10(double a); extern double exp(double a); extern float sinf(float a); extern float cosf(float a); extern float powf(float a, float b); extern float logf(float a); extern float log10f(float a); extern float expf(float a); double sin_f64(double a) { // CHECK-LABEL: sin_f64 // CHECK-MASS-FAST: __xl_sin_finite // CHECK-MASS-AFN: __xl_sin // CHECK-NO-MASS-FAST-NOT: {{__xl_sin|__xl_sin_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_sin|__xl_sin_finite}} // CHECK: blr return sin(a); } double cos_f64(double a) { // CHECK-LABEL: cos_f64 // CHECK-MASS-FAST: __xl_cos_finite // CHECK-MASS-AFN: __xl_cos // CHECK-NO-MASS-FAST-NOT: {{__xl_cos|__xl_cos_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_cos|__xl_cos_finite}} // CHECK: blr return cos(a); } double pow_f64(double a, double b) { // CHECK-LABEL: pow_f64 // CHECK-MASS-FAST: __xl_pow_finite // CHECK-MASS-AFN: __xl_pow // CHECK-NO-MASS-FAST-NOT: {{__xl_pow|__xl_pow_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_pow|__xl_pow_finite}} // CHECK: blr return pow(a, b); } double log_f64(double a) { // CHECK-LABEL: log_f64 // CHECK-MASS-FAST: __xl_log_finite // CHECK-MASS-AFN: __xl_log // CHECK-NO-MASS-FAST-NOT: {{__xl_log|__xl_log_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_log|__xl_log_finite}} // CHECK: blr return log(a); } double log10_f64(double a) { // CHECK-LABEL: log10_f64 // CHECK-MASS-FAST: __xl_log10_finite // CHECK-MASS-AFN: __xl_log10 // CHECK-NO-MASS-FAST-NOT: {{__xl_log10|__xl_log10_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_log10|__xl_log10_finite}} // CHECK: blr return log10(a); } double exp_f64(double a) { // CHECK-LABEL: exp_f64 // CHECK-MASS-FAST: __xl_exp_finite // CHECK-MASS-AFN: __xl_exp // CHECK-NO-MASS-FAST-NOT: {{__xl_exp|__xl_exp_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_exp|__xl_exp_finite}} // CHECK: blr return exp(a); } float sin_f32(float a) { // CHECK-LABEL: sin_f32 // CHECK-MASS-FAST: __xl_sinf_finite // CHECK-MASS-AFN: __xl_sinf // CHECK-NO-MASS-FAST-NOT: {{__xl_sinf|__xl_sinf_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_sinf|__xl_sinf_finite}} // CHECK: blr return sinf(a); } float cos_f32(float a) { // CHECK-LABEL: cos_f32 // CHECK-MASS-FAST: __xl_cosf_finite // CHECK-MASS-AFN: __xl_cosf // CHECK-NO-MASS-FAST-NOT: {{__xl_cosf|__xl_cosf_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_cosf|__xl_cosf_finite}} // CHECK: blr return cosf(a); } float pow_f32(float a, float b) { // CHECK-LABEL: pow_f32 // CHECK-MASS-FAST: __xl_powf_finite // CHECK-MASS-AFN: __xl_powf // CHECK-NO-MASS-FAST-NOT: {{__xl_pow|__xl_powf_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_pow|__xl_powf_finite}} // CHECK: blr return powf(a, b); } float log_f32(float a) { // CHECK-LABEL: log_f32 // CHECK-MASS-FAST: __xl_logf_finite // CHECK-MASS-AFN: __xl_logf // CHECK-NO-MASS-FAST-NOT: {{__xl_logf|__xl_logf_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_logf|__xl_logf_finite}} // CHECK: blr return logf(a); } float log10_f32(float a) { // CHECK-LABEL: log10_f32 // CHECK-MASS-FAST: __xl_log10f_finite // CHECK-MASS-AFN: __xl_log10f // CHECK-NO-MASS-FAST-NOT: {{__xl_log10f|__xl_log10f_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_log10f|__xl_log10f_finite}} // CHECK: blr return log10f(a); } float exp_f32(float a) { // CHECK-LABEL: exp_f32 // CHECK-MASS-FAST: __xl_expf_finite // CHECK-MASS-AFN: __xl_expf // CHECK-NO-MASS-FAST-NOT: {{__xl_expf|__xl_expf_finite}} // CHECK-NO-MASS-AFN-NOT: {{__xl_expf|__xl_expf_finite}} // CHECK: blr return expf(a); }