blob: 2877aa5cef30ce1b533816785412ea91264560ba [file] [log] [blame] [edit]
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fmath-errno -fclangir -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -ffast-math -fclangir -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM-FASTMATH
// copysign
float my_copysignf(float x, float y) {
return __builtin_copysignf(x, y);
}
// LLVM: define dso_local float @my_copysignf
// LLVM: %{{.+}} = call float @llvm.copysign.f32(float %{{.+}}, float %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local float @my_copysignf
// LLVM-FASTMATH: %{{.+}} = call float @llvm.copysign.f32(float %{{.+}}, float %{{.+}})
// LLVM-FASTMATH: }
double my_copysign(double x, double y) {
return __builtin_copysign(x, y);
}
// LLVM: define dso_local double @my_copysign
// LLVM: %{{.+}} = call double @llvm.copysign.f64(double %{{.+}}, double %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local double @my_copysign
// LLVM-FASTMATH: %{{.+}} = call double @llvm.copysign.f64(double %{{.+}}, double %{{.+}})
// LLVM-FASTMATH: }
long double my_copysignl(long double x, long double y) {
return __builtin_copysignl(x, y);
}
// LLVM: define dso_local x86_fp80 @my_copysignl
// LLVM: %{{.+}} = call x86_fp80 @llvm.copysign.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local x86_fp80 @my_copysignl
// LLVM-FASTMATH: %{{.+}} = call x86_fp80 @llvm.copysign.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM-FASTMATH: }
// fmax
float my_fmaxf(float x, float y) {
return __builtin_fmaxf(x, y);
}
// LLVM: define dso_local float @my_fmaxf
// LLVM: %{{.+}} = call float @llvm.maxnum.f32(float %{{.+}}, float %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local float @my_fmaxf
// LLVM-FASTMATH: %{{.+}} = call float @llvm.maxnum.f32(float %{{.+}}, float %{{.+}})
// LLVM-FASTMATH: }
double my_fmax(double x, double y) {
return __builtin_fmax(x, y);
}
// LLVM: define dso_local double @my_fmax
// LLVM: %{{.+}} = call double @llvm.maxnum.f64(double %{{.+}}, double %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local double @my_fmax
// LLVM-FASTMATH: %{{.+}} = call double @llvm.maxnum.f64(double %{{.+}}, double %{{.+}})
// LLVM-FASTMATH: }
long double my_fmaxl(long double x, long double y) {
return __builtin_fmaxl(x, y);
}
// LLVM: define dso_local x86_fp80 @my_fmaxl
// LLVM: %{{.+}} = call x86_fp80 @llvm.maxnum.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local x86_fp80 @my_fmaxl
// LLVM-FASTMATH: %{{.+}} = call x86_fp80 @llvm.maxnum.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM-FASTMATH: }
// fmin
float my_fminf(float x, float y) {
return __builtin_fminf(x, y);
}
// LLVM: define dso_local float @my_fminf
// LLVM: %{{.+}} = call float @llvm.minnum.f32(float %{{.+}}, float %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local float @my_fminf
// LLVM-FASTMATH: %{{.+}} = call float @llvm.minnum.f32(float %{{.+}}, float %{{.+}})
// LLVM-FASTMATH: }
double my_fmin(double x, double y) {
return __builtin_fmin(x, y);
}
// LLVM: define dso_local double @my_fmin
// LLVM: %{{.+}} = call double @llvm.minnum.f64(double %{{.+}}, double %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local double @my_fmin
// LLVM-FASTMATH: %{{.+}} = call double @llvm.minnum.f64(double %{{.+}}, double %{{.+}})
// LLVM-FASTMATH: }
long double my_fminl(long double x, long double y) {
return __builtin_fminl(x, y);
}
// LLVM: define dso_local x86_fp80 @my_fminl
// LLVM: %{{.+}} = call x86_fp80 @llvm.minnum.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local x86_fp80 @my_fminl
// LLVM-FASTMATH: %{{.+}} = call x86_fp80 @llvm.minnum.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM-FASTMATH: }
// fmod
float my_fmodf(float x, float y) {
return __builtin_fmodf(x, y);
}
// LLVM: define dso_local float @my_fmodf
// LLVM: %{{.+}} = call float @fmodf(float %{{.+}}, float %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local float @my_fmodf
// LLVM-FASTMATH: %{{.+}} = frem float %{{.+}}, %{{.+}}
// LLVM-FASTMATH: }
double my_fmod(double x, double y) {
return __builtin_fmod(x, y);
}
// LLVM: define dso_local double @my_fmod
// LLVM: %{{.+}} = call double @fmod(double %{{.+}}, double %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local double @my_fmod
// LLVM-FASTMATH: %{{.+}} = frem double %{{.+}}, %{{.+}}
// LLVM-FASTMATH: }
long double my_fmodl(long double x, long double y) {
return __builtin_fmodl(x, y);
}
// LLVM: define dso_local x86_fp80 @my_fmodl
// LLVM: %{{.+}} = call x86_fp80 @fmodl(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local x86_fp80 @my_fmodl
// LLVM-FASTMATH: %{{.+}} = frem x86_fp80 %{{.+}}, %{{.+}}
// LLVM-FASTMATH: }
// pow
float my_powf(float x, float y) {
return __builtin_powf(x, y);
}
// LLVM: define dso_local float @my_powf
// LLVM: %{{.+}} = call float @powf(float %{{.+}}, float %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local float @my_powf
// LLVM-FASTMATH: %{{.+}} = call float @llvm.pow.f32(float %{{.+}}, float %{{.+}})
// LLVM-FASTMATH: }
double my_pow(double x, double y) {
return __builtin_pow(x, y);
}
// LLVM: define dso_local double @my_pow
// LLVM: %{{.+}} = call double @pow(double %{{.+}}, double %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local double @my_pow
// LLVM-FASTMATH: %{{.+}} = call double @llvm.pow.f64(double %{{.+}}, double %{{.+}})
// LLVM-FASTMATH: }
long double my_powl(long double x, long double y) {
return __builtin_powl(x, y);
}
// LLVM: define dso_local x86_fp80 @my_powl
// LLVM: %{{.+}} = call x86_fp80 @powl(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM: }
// LLVM-FASTMATH: define dso_local x86_fp80 @my_powl
// LLVM-FASTMATH: %{{.+}} = call x86_fp80 @llvm.pow.f80(x86_fp80 %{{.+}}, x86_fp80 %{{.+}})
// LLVM-FASTMATH: }