From 746f3d95ed05c0151c403fac0c6c7fd90b3bc49d Mon Sep 17 00:00:00 2001 From: Zahira Ammarguellat Date: Mon, 12 Aug 2024 07:24:16 -0700 Subject: [PATCH] Add missing fpbuiltin math functions. (#15039) This change due to https://github.com/llvm/llvm-project/pull/98949. --- clang/lib/CodeGen/CGBuiltin.cpp | 18 ++++++++++------ clang/test/CodeGen/fp-accuracy.c | 36 ++++++++++++++++---------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 80159fd993168..6115e2fc9aa5e 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -2750,7 +2750,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_acosl: case Builtin::BI__builtin_acosf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::acos, Intrinsic::experimental_constrained_acos)); + *this, E, Intrinsic::acos, Intrinsic::experimental_constrained_acos, + Intrinsic::fpbuiltin_acos)); case Builtin::BIasin: case Builtin::BIasinf: @@ -2761,7 +2762,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_asinl: case Builtin::BI__builtin_asinf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::asin, Intrinsic::experimental_constrained_asin)); + *this, E, Intrinsic::asin, Intrinsic::experimental_constrained_asin, + Intrinsic::fpbuiltin_asin)); case Builtin::BIatan: case Builtin::BIatanf: @@ -2772,7 +2774,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_atanl: case Builtin::BI__builtin_atanf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::atan, Intrinsic::experimental_constrained_atan)); + *this, E, Intrinsic::atan, Intrinsic::experimental_constrained_atan, + Intrinsic::fpbuiltin_atan)); case Builtin::BIceil: case Builtin::BIceilf: @@ -2818,7 +2821,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_coshl: case Builtin::BI__builtin_coshf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::cosh, Intrinsic::experimental_constrained_cosh)); + *this, E, Intrinsic::cosh, Intrinsic::experimental_constrained_cosh, + Intrinsic::fpbuiltin_cosh)); case Builtin::BIexp: case Builtin::BIexpf: @@ -3045,7 +3049,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_sinhl: case Builtin::BI__builtin_sinhf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::sinh, Intrinsic::experimental_constrained_sinh)); + *this, E, Intrinsic::sinh, Intrinsic::experimental_constrained_sinh, + Intrinsic::fpbuiltin_sinh)); case Builtin::BIsqrt: case Builtin::BIsqrtf: @@ -3083,7 +3088,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_tanhl: case Builtin::BI__builtin_tanhf128: return RValue::get(emitUnaryMaybeConstrainedFPBuiltin( - *this, E, Intrinsic::tanh, Intrinsic::experimental_constrained_tanh)); + *this, E, Intrinsic::tanh, Intrinsic::experimental_constrained_tanh, + Intrinsic::fpbuiltin_tanh)); case Builtin::BItrunc: case Builtin::BItruncf: diff --git a/clang/test/CodeGen/fp-accuracy.c b/clang/test/CodeGen/fp-accuracy.c index c5a26849b4b3d..71606c95e620c 100644 --- a/clang/test/CodeGen/fp-accuracy.c +++ b/clang/test/CodeGen/fp-accuracy.c @@ -97,15 +97,15 @@ double rsqrt(double); // CHECK: call double @llvm.fpbuiltin.tanh.f64(double {{.*}}) #[[ATTR_HIGH]] // CHECK-F1-LABEL: define dso_local void @f1 -// CHECK-F1: call double @acos(double {{.*}}) +// CHECK-F1: call double @llvm.acos.f64(double {{.*}}) // CHECK-F1: call double @acosh(double {{.*}}) -// CHECK-F1: call double @asin(double {{.*}}) +// CHECK-F1: call double @llvm.asin.f64(double {{.*}}) // CHECK-F1: call double @asinh(double {{.*}}) -// CHECK-F1: call double @atan(double {{.*}}) +// CHECK-F1: call double @llvm.atan.f64(double {{.*}}) // CHECK-F1: call double @atan2(double {{.*}}, double {{.*}}) // CHECK-F1: call double @atanh(double {{.*}}) // CHECK-F1: call double @llvm.fpbuiltin.cos.f64(double {{.*}}) #[[ATTR_F1_HIGH:[0-9]+]] -// CHECK-F1: call double @cosh(double {{.*}}) +// CHECK-F1: call double @llvm.cosh.f64(double {{.*}}) // CHECK-F1: call double @erf(double {{.*}}) // CHECK-F1: call double @erfc(double {{.*}}) // CHECK-F1: call i32 (double, ...) @exp10(double {{.*}}) @@ -126,10 +126,10 @@ double rsqrt(double); // CHECK-F1: call i32 (double, ...) @rsqrt(double {{.*}}) // CHECK-F1: call double @llvm.sin.f64(double {{.*}}) // CHECK-F1: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr {{.*}}, ptr {{.*}}) #[[ATTR_F1_MEDIUM]] -// CHECK-F1: call double @sinh(double {{.*}}) +// CHECK-F1: call double @llvm.sinh.f64(double {{.*}}) // CHECK-F1: call double @llvm.sqrt.f64(double {{.*}}) // CHECK-F1: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F1_LOW:[0-9]+]] -// CHECK-F1: call double @tanh(double {{.*}}) +// CHECK-F1: call double @llvm.tanh.f64(double {{.*}}) // // CHECK-F2-LABEL: define dso_local void @f1 // CHECK-F2: call double @llvm.fpbuiltin.acos.f64(double {{.*}}) #[[ATTR_F2_MEDIUM:[0-9]+]] @@ -259,15 +259,15 @@ double rsqrt(double); // CHECK-F4: call double @llvm.fpbuiltin.tanh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]] // // CHECK-F5-LABEL: define dso_local void @f1 -// CHECK-F5: call double @acos(double {{.*}}) +// CHECK-F5: call double @llvm.acos.f64(double {{.*}}) // CHECK-F5: call double @acosh(double {{.*}}) -// CHECK-F5: call double @asin(double {{.*}}) +// CHECK-F5: call double @llvm.asin.f64(double {{.*}}) // CHECK-F5: call double @asinh(double {{.*}}) -// CHECK-F5: call double @atan(double {{.*}}) +// CHECK-F5: call double @llvm.atan.f64(double {{.*}}) // CHECK-F5: call double @atan2(double {{.*}}, double {{.*}}) // CHECK-F5: call double @atanh(double {{.*}}) // CHECK-F5: call double @llvm.fpbuiltin.cos.f64(double {{.*}}) #[[ATTR_F5_MEDIUM:[0-9]+]] -// CHECK-F5: call double @cosh(double {{.*}}) +// CHECK-F5: call double @llvm.cosh.f64(double {{.*}}) // CHECK-F5: call double @erf(double {{.*}}) // CHECK-F5: call double @erfc(double {{.*}}) // CHECK-F5: call double @llvm.exp.f64(double {{.*}}) @@ -289,10 +289,10 @@ double rsqrt(double); // CHECK-F5: call i32 (double, ...) @rsqrt(double {{.*}}) // CHECK-F5: call double @llvm.fpbuiltin.sin.f64(double {{.*}}) #[[ATTR_F5_HIGH:[0-9]+]] // CHECK-F5: call i32 (double, ptr, ptr, ...) @sincos(double {{.*}}, ptr {{.*}}, ptr {{.*}}) -// CHECK-F5: call double @sinh(double {{.*}}) +// CHECK-F5: call double @llvm.sinh.f64(double {{.*}}) // CHECK-F5: call double @llvm.sqrt.f64(double {{.*}}) // CHECK-F5: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F5_HIGH]] -// CHECK-F5: call double @tanh(double {{.*}}) +// CHECK-F5: call double @llvm.tanh.f64(double {{.*}}) // // // CHECK-F6-LABEL: define dso_local void @f1 @@ -560,15 +560,15 @@ void f1(float a, float b) { // CHECK-SPIR: attributes #[[ATTR_SYCL8]] = {{.*}}"fpbuiltin-max-error"="2.0" // CHECK-DEFAULT-LABEL: define dso_local void @f1 -// CHECK-DEFAULT: call double @acos(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.acos.f64(double {{.*}}) // CHECK-DEFAULT: call double @acosh(double {{.*}}) -// CHECK-DEFAULT: call double @asin(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.asin.f64(double {{.*}}) // CHECK-DEFAULT: call double @asinh(double {{.*}}) -// CHECK-DEFAULT: call double @atan(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.atan.f64(double {{.*}}) // CHECK-DEFAULT: call double @atan2(double {{.*}}, double {{.*}}) // CHECK-DEFAULT: call double @atanh(double {{.*}}) // CHECK-DEFAULT: call double @llvm.cos.f64(double {{.*}}) -// CHECK-DEFAULT: call double @cosh(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.cosh.f64(double {{.*}}) // CHECK-DEFAULT: call double @erf(double {{.*}}) // CHECK-DEFAULT: call double @erfc(double {{.*}}) // CHECK-DEFAULT: call double @llvm.exp.f64(double {{.*}}) @@ -590,10 +590,10 @@ void f1(float a, float b) { // CHECK-DEFAULT: call i32 (double, ...) @rsqrt(double {{.*}}) // CHECK-DEFAULT: call double @llvm.sin.f64(double {{.*}}) // CHECK-DEFAULT: call i32 (double, ptr, ptr, ...) @sincos(double {{.*}}, ptr {{.*}}, ptr {{.*}}) -// CHECK-DEFAULT: call double @sinh(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.sinh.f64(double {{.*}}) // CHECK-DEFAULT: call double @llvm.sqrt.f64(double {{.*}}) // CHECK-DEFAULT: call double @llvm.tan.f64(double {{.*}}) -// CHECK-DEFAULT: call double @tanh(double {{.*}}) +// CHECK-DEFAULT: call double @llvm.tanh.f64(double {{.*}}) // // CHECK-DEFAULT-LABEL: define dso_local void @f2 // CHECK-DEFAULT: call float @llvm.cos.f32(float {{.*}})