mirror of
https://github.com/intel/llvm.git
synced 2026-02-02 10:08:59 +08:00
[flang] Replace more pgmath with libm.
With this change all supported pgmath functions for non-complex data types are replaced with either libm calls or MLIR operations, except for MOD and some flavors of POW, which are going to be addressed by other commits. At the current stage a few math intrinsics are lowered into libm calls always. When appropriate MLIR operation are available, the table can be updated to generate them.
This commit is contained in:
@@ -1122,6 +1122,20 @@ static mlir::FunctionType genF32F32IntFuncType(mlir::MLIRContext *context) {
|
||||
return mlir::FunctionType::get(context, {ftype, itype}, {ftype});
|
||||
}
|
||||
|
||||
template <int Bits>
|
||||
static mlir::FunctionType genF64IntF64FuncType(mlir::MLIRContext *context) {
|
||||
auto ftype = mlir::FloatType::getF64(context);
|
||||
auto itype = mlir::IntegerType::get(context, Bits);
|
||||
return mlir::FunctionType::get(context, {itype, ftype}, {ftype});
|
||||
}
|
||||
|
||||
template <int Bits>
|
||||
static mlir::FunctionType genF32IntF32FuncType(mlir::MLIRContext *context) {
|
||||
auto ftype = mlir::FloatType::getF32(context);
|
||||
auto itype = mlir::IntegerType::get(context, Bits);
|
||||
return mlir::FunctionType::get(context, {itype, ftype}, {ftype});
|
||||
}
|
||||
|
||||
/// Callback type for generating lowering for a math operation.
|
||||
using MathGeneratorTy = mlir::Value (*)(fir::FirOpBuilder &, mlir::Location,
|
||||
llvm::StringRef, mlir::FunctionType,
|
||||
@@ -1211,6 +1225,10 @@ static constexpr MathOperation mathOperations[] = {
|
||||
{"abs", "fabs", genF64F64FuncType, genMathOp<mlir::math::AbsFOp>},
|
||||
{"abs", "llvm.fabs.f128", genF128F128FuncType,
|
||||
genMathOp<mlir::math::AbsFOp>},
|
||||
{"acos", "acosf", genF32F32FuncType, genLibCall},
|
||||
{"acos", "acos", genF64F64FuncType, genLibCall},
|
||||
{"acosh", "acoshf", genF32F32FuncType, genLibCall},
|
||||
{"acosh", "acosh", genF64F64FuncType, genLibCall},
|
||||
// llvm.trunc behaves the same way as libm's trunc.
|
||||
{"aint", "llvm.trunc.f32", genF32F32FuncType, genLibCall},
|
||||
{"aint", "llvm.trunc.f64", genF64F64FuncType, genLibCall},
|
||||
@@ -1222,10 +1240,28 @@ static constexpr MathOperation mathOperations[] = {
|
||||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
{"anint", "llvm.round.f80", genF80F80FuncType,
|
||||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
{"asin", "asinf", genF32F32FuncType, genLibCall},
|
||||
{"asin", "asin", genF64F64FuncType, genLibCall},
|
||||
{"asinh", "asinhf", genF32F32FuncType, genLibCall},
|
||||
{"asinh", "asinh", genF64F64FuncType, genLibCall},
|
||||
{"atan", "atanf", genF32F32FuncType, genMathOp<mlir::math::AtanOp>},
|
||||
{"atan", "atan", genF64F64FuncType, genMathOp<mlir::math::AtanOp>},
|
||||
{"atan2", "atan2f", genF32F32F32FuncType, genMathOp<mlir::math::Atan2Op>},
|
||||
{"atan2", "atan2", genF64F64F64FuncType, genMathOp<mlir::math::Atan2Op>},
|
||||
{"atanh", "atanhf", genF32F32FuncType, genLibCall},
|
||||
{"atanh", "atanh", genF64F64FuncType, genLibCall},
|
||||
{"bessel_j0", "j0f", genF32F32FuncType, genLibCall},
|
||||
{"bessel_j0", "j0", genF64F64FuncType, genLibCall},
|
||||
{"bessel_j1", "j1f", genF32F32FuncType, genLibCall},
|
||||
{"bessel_j1", "j1", genF64F64FuncType, genLibCall},
|
||||
{"bessel_jn", "jnf", genF32IntF32FuncType<32>, genLibCall},
|
||||
{"bessel_jn", "jn", genF64IntF64FuncType<32>, genLibCall},
|
||||
{"bessel_y0", "y0f", genF32F32FuncType, genLibCall},
|
||||
{"bessel_y0", "y0", genF64F64FuncType, genLibCall},
|
||||
{"bessel_y1", "y1f", genF32F32FuncType, genLibCall},
|
||||
{"bessel_y1", "y1", genF64F64FuncType, genLibCall},
|
||||
{"bessel_yn", "ynf", genF32IntF32FuncType<32>, genLibCall},
|
||||
{"bessel_yn", "yn", genF64IntF64FuncType<32>, genLibCall},
|
||||
// math::CeilOp returns a real, while Fortran CEILING returns integer.
|
||||
{"ceil", "ceilf", genF32F32FuncType, genMathOp<mlir::math::CeilOp>},
|
||||
{"ceil", "ceil", genF64F64FuncType, genMathOp<mlir::math::CeilOp>},
|
||||
@@ -1235,17 +1271,23 @@ static constexpr MathOperation mathOperations[] = {
|
||||
{"cosh", "cosh", genF64F64FuncType, genLibCall},
|
||||
{"erf", "erff", genF32F32FuncType, genMathOp<mlir::math::ErfOp>},
|
||||
{"erf", "erf", genF64F64FuncType, genMathOp<mlir::math::ErfOp>},
|
||||
{"erfc", "erfcf", genF32F32FuncType, genLibCall},
|
||||
{"erfc", "erfc", genF64F64FuncType, genLibCall},
|
||||
{"exp", "expf", genF32F32FuncType, genMathOp<mlir::math::ExpOp>},
|
||||
{"exp", "exp", genF64F64FuncType, genMathOp<mlir::math::ExpOp>},
|
||||
// math::FloorOp returns a real, while Fortran FLOOR returns integer.
|
||||
{"floor", "floorf", genF32F32FuncType, genMathOp<mlir::math::FloorOp>},
|
||||
{"floor", "floor", genF64F64FuncType, genMathOp<mlir::math::FloorOp>},
|
||||
{"gamma", "tgammaf", genF32F32FuncType, genLibCall},
|
||||
{"gamma", "tgamma", genF64F64FuncType, genLibCall},
|
||||
{"hypot", "hypotf", genF32F32F32FuncType, genLibCall},
|
||||
{"hypot", "hypot", genF64F64F64FuncType, genLibCall},
|
||||
{"log", "logf", genF32F32FuncType, genMathOp<mlir::math::LogOp>},
|
||||
{"log", "log", genF64F64FuncType, genMathOp<mlir::math::LogOp>},
|
||||
{"log10", "log10f", genF32F32FuncType, genMathOp<mlir::math::Log10Op>},
|
||||
{"log10", "log10", genF64F64FuncType, genMathOp<mlir::math::Log10Op>},
|
||||
{"log_gamma", "lgammaf", genF32F32FuncType, genLibCall},
|
||||
{"log_gamma", "lgamma", genF64F64FuncType, genLibCall},
|
||||
// llvm.lround behaves the same way as libm's lround.
|
||||
{"nint", "llvm.lround.i64.f64", genIntF64FuncType<64>, genLibCall},
|
||||
{"nint", "llvm.lround.i64.f32", genIntF32FuncType<64>, genLibCall},
|
||||
|
||||
22
flang/test/Lower/Intrinsics/acos.f90
Normal file
22
flang/test/Lower/Intrinsics/acos.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = acos(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @acosf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = acos(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @acos({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/acosh.f90
Normal file
22
flang/test/Lower/Intrinsics/acosh.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = acosh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @acoshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = acosh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @acosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/asin.f90
Normal file
22
flang/test/Lower/Intrinsics/asin.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = asin(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @asinf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = asin(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @asin({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/asinh.f90
Normal file
22
flang/test/Lower/Intrinsics/asinh.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = asinh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @asinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = asinh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @asinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/atanh.f90
Normal file
22
flang/test/Lower/Intrinsics/atanh.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = atanh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @atanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = atanh(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @atanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/bessel_j0.f90
Normal file
22
flang/test/Lower/Intrinsics/bessel_j0.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = bessel_j0(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @j0f({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = bessel_j0(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @j0({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/bessel_j1.f90
Normal file
22
flang/test/Lower/Intrinsics/bessel_j1.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = bessel_j1(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @j1f({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = bessel_j1(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @j1({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
24
flang/test/Lower/Intrinsics/bessel_jn.f90
Normal file
24
flang/test/Lower/Intrinsics/bessel_jn.f90
Normal file
@@ -0,0 +1,24 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x, n)
|
||||
real :: x, test_real4
|
||||
integer :: n
|
||||
test_real4 = bessel_jn(n, x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @jnf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, f32) -> f32
|
||||
|
||||
function test_real8(x, n)
|
||||
real(8) :: x, test_real8
|
||||
integer :: n
|
||||
test_real8 = bessel_jn(n, x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @jn({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/bessel_y0.f90
Normal file
22
flang/test/Lower/Intrinsics/bessel_y0.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = bessel_y0(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @y0f({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = bessel_y0(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @y0({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/bessel_y1.f90
Normal file
22
flang/test/Lower/Intrinsics/bessel_y1.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = bessel_y1(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @y1f({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = bessel_y1(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @y1({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
24
flang/test/Lower/Intrinsics/bessel_yn.f90
Normal file
24
flang/test/Lower/Intrinsics/bessel_yn.f90
Normal file
@@ -0,0 +1,24 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x, n)
|
||||
real :: x, test_real4
|
||||
integer :: n
|
||||
test_real4 = bessel_yn(n, x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @ynf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, f32) -> f32
|
||||
|
||||
function test_real8(x, n)
|
||||
real(8) :: x, test_real8
|
||||
integer :: n
|
||||
test_real8 = bessel_yn(n, x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @yn({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/erfc.f90
Normal file
22
flang/test/Lower/Intrinsics/erfc.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = erfc(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @erfcf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = erfc(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @erfc({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/gamma.f90
Normal file
22
flang/test/Lower/Intrinsics/gamma.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = gamma(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @tgammaf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = gamma(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @tgamma({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
22
flang/test/Lower/Intrinsics/log_gamma.f90
Normal file
22
flang/test/Lower/Intrinsics/log_gamma.f90
Normal file
@@ -0,0 +1,22 @@
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s
|
||||
! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s
|
||||
|
||||
function test_real4(x)
|
||||
real :: x, test_real4
|
||||
test_real4 = log_gamma(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real4
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @lgammaf({{%[A-Za-z0-9._]+}}) : (f32) -> f32
|
||||
|
||||
function test_real8(x)
|
||||
real(8) :: x, test_real8
|
||||
test_real8 = log_gamma(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real8
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @lgamma({{%[A-Za-z0-9._]+}}) : (f64) -> f64
|
||||
@@ -154,7 +154,7 @@ end subroutine
|
||||
|
||||
! CHECK-LABEL: func private @fir.acos.f32.ref_f32(%arg0: !fir.ref<f32>) -> f32
|
||||
!CHECK: %[[load:.*]] = fir.load %arg0
|
||||
!CHECK: %[[res:.*]] = fir.call @__fs_acos_1(%[[load]]) : (f32) -> f32
|
||||
!CHECK: %[[res:.*]] = fir.call @acosf(%[[load]]) : (f32) -> f32
|
||||
!CHECK: return %[[res]] : f32
|
||||
|
||||
! CHECK-LABEL: func private @fir.atan2.f32.ref_f32.ref_f32(
|
||||
|
||||
Reference in New Issue
Block a user