Skip to content

Commit

Permalink
Add missing fpbuiltin math functions. (#15039)
Browse files Browse the repository at this point in the history
This change due to llvm/llvm-project#98949.
  • Loading branch information
zahiraam authored and jsji committed Aug 16, 2024
1 parent c6519ef commit 22f9f89
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 24 deletions.
18 changes: 12 additions & 6 deletions clang/lib/CodeGen/CGBuiltin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
36 changes: 18 additions & 18 deletions clang/test/CodeGen/fp-accuracy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {{.*}})
Expand All @@ -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]+]]
Expand Down Expand Up @@ -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 {{.*}})
Expand All @@ -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
Expand Down Expand Up @@ -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 {{.*}})
Expand All @@ -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 {{.*}})
Expand Down

0 comments on commit 22f9f89

Please sign in to comment.