[flang] Remove fp128 support for llvm.round and llvm.trunc
The fp128 in llvm.round and llvm.trunc is not supported in X86_64 for now. Revert the support. To support quad precision for llvm.round and llvm.trunc, it may should be supported using runtime. Reviewed By: Jean Perier Differential Revision: https://reviews.llvm.org/D130556
This commit is contained in:
parent
b5e3dac33d
commit
418d2338f9
|
@ -1208,7 +1208,6 @@ static constexpr MathOperation mathOperations[] = {
|
|||
{"aint", "llvm.trunc.f32", genF32F32FuncType, genLibCall},
|
||||
{"aint", "llvm.trunc.f64", genF64F64FuncType, genLibCall},
|
||||
{"aint", "llvm.trunc.f80", genF80F80FuncType, genLibCall},
|
||||
{"aint", "llvm.trunc.f128", genF128F128FuncType, genLibCall},
|
||||
// llvm.round behaves the same way as libm's round.
|
||||
{"anint", "llvm.round.f32", genF32F32FuncType,
|
||||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
|
@ -1216,8 +1215,6 @@ static constexpr MathOperation mathOperations[] = {
|
|||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
{"anint", "llvm.round.f80", genF80F80FuncType,
|
||||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
{"anint", "llvm.round.f128", genF128F128FuncType,
|
||||
genMathOp<mlir::LLVM::RoundOp>},
|
||||
{"atan", "atanf", genF32F32FuncType, genMathOp<mlir::math::AtanOp>},
|
||||
{"atan", "atan", genF64F64FuncType, genMathOp<mlir::math::AtanOp>},
|
||||
{"atan2", "atan2f", genF32F32F32FuncType, genMathOp<mlir::math::Atan2Op>},
|
||||
|
|
|
@ -39,16 +39,8 @@ subroutine aint_test_real10(a, b)
|
|||
b = aint(a)
|
||||
end subroutine
|
||||
|
||||
! CHECK-LABEL: func.func @_QPaint_test_real16(
|
||||
! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<f128> {fir.bindc_name = "a"},
|
||||
! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<f128> {fir.bindc_name = "b"}) {
|
||||
! CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_0]] : !fir.ref<f128>
|
||||
! CHECK: %[[VAL_3:.*]] = fir.call @llvm.trunc.f128(%[[VAL_2]]) : (f128) -> f128
|
||||
! CHECK: fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref<f128>
|
||||
! CHECK: return
|
||||
! CHECK: }
|
||||
|
||||
subroutine aint_test_real16(a, b)
|
||||
real(16) :: a, b
|
||||
b = aint(a)
|
||||
end subroutine
|
||||
! TODO: wait until fp128 is supported well in llvm.trunc
|
||||
!subroutine aint_test_real16(a, b)
|
||||
! real(16) :: a, b
|
||||
! b = aint(a)
|
||||
!end subroutine
|
||||
|
|
|
@ -42,16 +42,8 @@ subroutine anint_test_real10(a, b)
|
|||
b = anint(a)
|
||||
end subroutine
|
||||
|
||||
! CHECK-LABEL: func.func @_QPanint_test_real16(
|
||||
! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<f128> {fir.bindc_name = "a"},
|
||||
! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<f128> {fir.bindc_name = "b"}) {
|
||||
! CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_0]] : !fir.ref<f128>
|
||||
! CHECK: %[[VAL_3:.*]] = "llvm.intr.round"(%[[VAL_2]]) : (f128) -> f128
|
||||
! CHECK: fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref<f128>
|
||||
! CHECK: return
|
||||
! CHECK: }
|
||||
|
||||
subroutine anint_test_real16(a, b)
|
||||
real(16) :: a, b
|
||||
b = anint(a)
|
||||
end subroutine
|
||||
! TODO: wait until fp128 is supported well in llvm.round
|
||||
!subroutine anint_test_real16(a, b)
|
||||
! real(16) :: a, b
|
||||
! b = anint(a)
|
||||
!end subroutine
|
||||
|
|
|
@ -85,13 +85,11 @@ end function
|
|||
! ALL-LABEL: @_QPtest_real10
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @llvm.trunc.f80({{%[A-Za-z0-9._]+}}) : (f80) -> f80
|
||||
|
||||
function test_real16(x)
|
||||
real(16) :: x, test_real16
|
||||
test_real16 = aint(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real16
|
||||
! ALL: {{%[A-Za-z0-9._]+}} = fir.call @llvm.trunc.f128({{%[A-Za-z0-9._]+}}) : (f128) -> f128
|
||||
! TODO: wait until fp128 is supported well in llvm.trunc
|
||||
!function test_real16(x)
|
||||
! real(16) :: x, test_real16
|
||||
! test_real16 = aint(x)
|
||||
!end function
|
||||
|
||||
//--- anint.f90
|
||||
! RUN: bbc -emit-fir %t/anint.f90 -o - --math-runtime=fast | FileCheck --check-prefixes=ALL,FAST %t/anint.f90
|
||||
|
@ -131,15 +129,11 @@ end function
|
|||
! RELAXED: {{%[A-Za-z0-9._]+}} = "llvm.intr.round"({{%[A-Za-z0-9._]+}}) : (f80) -> f80
|
||||
! PRECISE: {{%[A-Za-z0-9._]+}} = fir.call @llvm.round.f80({{%[A-Za-z0-9._]+}}) : (f80) -> f80
|
||||
|
||||
function test_real16(x)
|
||||
real(16) :: x, test_real16
|
||||
test_real16 = anint(x)
|
||||
end function
|
||||
|
||||
! ALL-LABEL: @_QPtest_real16
|
||||
! FAST: {{%[A-Za-z0-9._]+}} = "llvm.intr.round"({{%[A-Za-z0-9._]+}}) : (f128) -> f128
|
||||
! RELAXED: {{%[A-Za-z0-9._]+}} = "llvm.intr.round"({{%[A-Za-z0-9._]+}}) : (f128) -> f128
|
||||
! PRECISE: {{%[A-Za-z0-9._]+}} = fir.call @llvm.round.f128({{%[A-Za-z0-9._]+}}) : (f128) -> f128
|
||||
! TODO: wait until fp128 is supported well in llvm.round
|
||||
!function test_real16(x)
|
||||
! real(16) :: x, test_real16
|
||||
! test_real16 = anint(x)
|
||||
!end function
|
||||
|
||||
//--- atan.f90
|
||||
! RUN: bbc -emit-fir %t/atan.f90 -o - --math-runtime=fast | FileCheck --check-prefixes=ALL,FAST %t/atan.f90
|
||||
|
|
Loading…
Reference in New Issue