diff --git a/flang/include/flang/Common/Fortran-features.h b/flang/include/flang/Common/Fortran-features.h index 9549e8bfbbef0..96c4de74cd6a8 100644 --- a/flang/include/flang/Common/Fortran-features.h +++ b/flang/include/flang/Common/Fortran-features.h @@ -71,7 +71,7 @@ ENUM_CLASS(UsageWarning, Portability, PointerToUndefinable, ZeroDoStep, UnusedForallIndex, OpenMPUsage, DataLength, IgnoredDirective, HomonymousSpecific, HomonymousResult, IgnoredIntrinsicFunctionType, PreviousScalarUse, RedeclaredInaccessibleComponent, ImplicitShared, - IndexVarRedefinition, IncompatibleImplicitInterfaces, BadTypeForTarget, + IndexVarRedefinition, IncompatibleImplicitInterfaces, VectorSubscriptFinalization, UndefinedFunctionResult, UselessIomsg, MismatchingDummyProcedure, SubscriptedEmptyArray, UnsignedLiteralTruncation, CompatibleDeclarationsFromDistinctModules) diff --git a/flang/lib/Common/Fortran-features.cpp b/flang/lib/Common/Fortran-features.cpp index 3565275915a31..bbf16a4f7ac67 100644 --- a/flang/lib/Common/Fortran-features.cpp +++ b/flang/lib/Common/Fortran-features.cpp @@ -79,7 +79,6 @@ LanguageFeatureControl::LanguageFeatureControl() { warnUsage_.set(UsageWarning::ImplicitShared); warnUsage_.set(UsageWarning::IndexVarRedefinition); warnUsage_.set(UsageWarning::IncompatibleImplicitInterfaces); - warnUsage_.set(UsageWarning::BadTypeForTarget); warnUsage_.set(UsageWarning::VectorSubscriptFinalization); warnUsage_.set(UsageWarning::UndefinedFunctionResult); warnUsage_.set(UsageWarning::UselessIomsg); diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp index 3ec6f385ceb86..22f5f633d3b39 100644 --- a/flang/lib/Semantics/expression.cpp +++ b/flang/lib/Semantics/expression.cpp @@ -4079,8 +4079,7 @@ bool ExpressionAnalyzer::CheckIntrinsicKind( return true; } else if (foldingContext_.targetCharacteristics().CanSupportType( category, kind)) { - Warn(common::UsageWarning::BadTypeForTarget, - "%s(KIND=%jd) is not an enabled type for this target"_warn_en_US, + Say("%s(KIND=%jd) is not an enabled type for this target"_err_en_US, ToUpperCase(EnumToString(category)), kind); return true; } else { @@ -4102,20 +4101,7 @@ bool ExpressionAnalyzer::CheckIntrinsicSize( return false; } } - if (foldingContext_.targetCharacteristics().IsTypeEnabled( - category, kind)) { // C712, C714, C715, C727 - return true; - } else if (foldingContext_.targetCharacteristics().CanSupportType( - category, kind)) { - Warn(common::UsageWarning::BadTypeForTarget, - "%s*%jd is not an enabled type for this target"_warn_en_US, - ToUpperCase(EnumToString(category)), size); - return true; - } else { - Say("%s*%jd is not a supported type"_err_en_US, - ToUpperCase(EnumToString(category)), size); - return false; - } + return CheckIntrinsicKind(category, kind); } bool ExpressionAnalyzer::AddImpliedDo(parser::CharBlock name, int kind) { diff --git a/flang/test/Evaluate/rewrite-out_of_range.F90 b/flang/test/Evaluate/rewrite-out_of_range.F90 index b5df610ff2fbb..9196bba591e63 100644 --- a/flang/test/Evaluate/rewrite-out_of_range.F90 +++ b/flang/test/Evaluate/rewrite-out_of_range.F90 @@ -1,5 +1,7 @@ ! Tests rewriting of OUT_OF_RANGE() -! RUN: %flang_fc1 -fdebug-unparse -cpp %s 2>&1 | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-X86-64%} +! REQUIRES: target=x86-64{{.*}} +! REQUIRES: system-linux +! RUN: %flang_fc1 -fdebug-unparse -cpp %s 2>&1 | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{%if system-linux %{,CHECK-X86-64%}%} logical round diff --git a/flang/test/Lower/HLFIR/convert-variable.f90 b/flang/test/Lower/HLFIR/convert-variable.f90 index 7acb1be578b93..07b91d0f34a07 100644 --- a/flang/test/Lower/HLFIR/convert-variable.f90 +++ b/flang/test/Lower/HLFIR/convert-variable.f90 @@ -1,5 +1,5 @@ ! Test lowering of variables to fir.declare -! RUN: bbc -emit-hlfir %s -o - | FileCheck %s +! RUN: bbc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK,%if flang-supports-f128-math %{F128%} %else %{F64%} subroutine scalar_numeric(x) integer :: x @@ -68,13 +68,16 @@ subroutine scalar_numeric_attributes(x) ! CHECK: %[[VAL_1:.*]] = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFscalar_numeric_attributesEx"} : (!fir.ref, !fir.dscope) -> (!fir.ref, !fir.ref) subroutine scalar_numeric_attributes_2(x) - real(16), value :: x(100) + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) + real(rk), value :: x(100) end subroutine ! CHECK-LABEL: func.func @_QPscalar_numeric_attributes_2( -! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> +! F128-SAME: %[[VAL_0:.*]]: !fir.ref> +! F64-SAME: %[[VAL_0:.*]]: !fir.ref> ! CHECK: %[[VAL_1:.*]] = arith.constant 100 : index ! CHECK: %[[VAL_2:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1> -! CHECK: %[[VAL_3:.*]] = hlfir.declare %[[VAL_0]](%[[VAL_2]]) dummy_scope %{{[0-9]+}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFscalar_numeric_attributes_2Ex"} : (!fir.ref>, !fir.shape<1>, !fir.dscope) -> (!fir.ref>, !fir.ref>) +! F128: %[[VAL_3:.*]] = hlfir.declare %[[VAL_0]](%[[VAL_2]]) dummy_scope %{{[0-9]+}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFscalar_numeric_attributes_2Ex"} : (!fir.ref>, !fir.shape<1>, !fir.dscope) -> (!fir.ref>, !fir.ref>) +! F64: %[[VAL_3:.*]] = hlfir.declare %[[VAL_0]](%[[VAL_2]]) dummy_scope %{{[0-9]+}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFscalar_numeric_attributes_2Ex"} : (!fir.ref>, !fir.shape<1>, !fir.dscope) -> (!fir.ref>, !fir.ref>) subroutine scalar_numeric_attributes_3(x) real, intent(in) :: x diff --git a/flang/test/Lower/Intrinsics/abs.f90 b/flang/test/Lower/Intrinsics/abs.f90 index e5e4b79e9f79e..7150cb2d352fd 100644 --- a/flang/test/Lower/Intrinsics/abs.f90 +++ b/flang/test/Lower/Intrinsics/abs.f90 @@ -1,7 +1,7 @@ -! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s --check-prefixes="CHECK,CMPLX,CMPLX-PRECISE" +! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s --check-prefixes=CHECK,CMPLX,CMPLX-PRECISE,%if flang-supports-f128-math %{F128%} %else %{F64%} ! RUN: bbc -emit-fir -hlfir=false --math-runtime=precise %s -o - | FileCheck %s --check-prefixes="CMPLX,CMPLX-PRECISE" ! RUN: bbc --force-mlir-complex -emit-fir -hlfir=false %s -o - | FileCheck %s --check-prefixes="CMPLX,CMPLX-FAST" -! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s --check-prefixes="CHECK,CMPLX,CMPLX-PRECISE" +! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK,CMPLX,CMPLX-PRECISE,%if flang-supports-f128-math %{F128%} %else %{F64%} ! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -mllvm --math-runtime=precise %s -o - | FileCheck %s --check-prefixes="CMPLX,CMPLX-PRECISE" ! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -mllvm --force-mlir-complex %s -o - | FileCheck %s --check-prefixes="CMPLX,CMPLX-FAST" ! RUN: %flang_fc1 -fapprox-func -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s --check-prefixes="CMPLX,CMPLX-APPROX" @@ -85,13 +85,18 @@ subroutine abs_testd(a, b) end subroutine ! CHECK-LABEL: func @_QPabs_testr16( -! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref{{.*}}, %[[VAL_1:.*]]: !fir.ref{{.*}}) { +! F128-SAME: %[[VAL_0:.*]]: !fir.ref{{.*}}, %[[VAL_1:.*]]: !fir.ref{{.*}}) { +! F64-SAME: %[[VAL_0:.*]]: !fir.ref{{.*}}, %[[VAL_1:.*]]: !fir.ref{{.*}}) { subroutine abs_testr16(a, b) -! CHECK: %[[VAL_2:.*]] = fir.load %[[VAL_0]] : !fir.ref -! CHECK: %[[VAL_3:.*]] = math.absf %[[VAL_2]] {{.*}}: f128 -! CHECK: fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref +! F128: %[[VAL_2:.*]] = fir.load %[[VAL_0]] : !fir.ref +! F64: %[[VAL_2:.*]] = fir.load %[[VAL_0]] : !fir.ref +! F128: %[[VAL_3:.*]] = math.absf %[[VAL_2]] {{.*}}: f128 +! F64: %[[VAL_3:.*]] = math.absf %[[VAL_2]] {{.*}}: f64 +! F128: fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref +! F64: fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref ! CHECK: return - real(kind=16) :: a, b + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) + real(kind=rk) :: a, b b = abs(a) end subroutine diff --git a/flang/test/Lower/Intrinsics/exponent.f90 b/flang/test/Lower/Intrinsics/exponent.f90 index 32a3bda24b0bb..f5f0603ee13c8 100644 --- a/flang/test/Lower/Intrinsics/exponent.f90 +++ b/flang/test/Lower/Intrinsics/exponent.f90 @@ -7,7 +7,6 @@ subroutine exponent_test(i1, i2, x4, x8) integer :: i1, i2, i3 real(kind = 4) :: x4 real(kind = 8) :: x8 - real(kind = 16) :: x16 i1 = exponent(x4) ! CHECK: %[[temp0:.*]] = fir.load %{{.*}} : !fir.ref diff --git a/flang/test/Lower/Intrinsics/fma_real16.f90 b/flang/test/Lower/Intrinsics/fma_real16.f90 index 62cf2fbcefbf1..ecc32635be9dc 100644 --- a/flang/test/Lower/Intrinsics/fma_real16.f90 +++ b/flang/test/Lower/Intrinsics/fma_real16.f90 @@ -1,3 +1,4 @@ +! REQUIRES: flang-supports-f128-math ! RUN: bbc -emit-fir %s -o - | FileCheck %s ! RUN: bbc --math-runtime=precise -emit-fir %s -o - | FileCheck %s ! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s diff --git a/flang/test/Lower/Intrinsics/ieee_class_queries.f90 b/flang/test/Lower/Intrinsics/ieee_class_queries.f90 index 0123d8163b984..aae8071b6a8b5 100644 --- a/flang/test/Lower/Intrinsics/ieee_class_queries.f90 +++ b/flang/test/Lower/Intrinsics/ieee_class_queries.f90 @@ -1,5 +1,6 @@ ! REQUIRES: flang-supports-f128-math -! RUN: bbc -emit-fir -o - %s | FileCheck %s +! REQUIRES: x86_64-registered-target +! RUN: bbc -target x86_64-unknown-linux-gnu -emit-fir -o - %s | FileCheck %s ! CHECK-LABEL: func @_QQmain use ieee_arithmetic, only: ieee_is_finite, ieee_is_nan, ieee_is_negative, & diff --git a/flang/test/Lower/Intrinsics/modulo.f90 b/flang/test/Lower/Intrinsics/modulo.f90 index 781ef8296a2b7..37c4cd1a94ca2 100644 --- a/flang/test/Lower/Intrinsics/modulo.f90 +++ b/flang/test/Lower/Intrinsics/modulo.f90 @@ -1,5 +1,5 @@ ! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s -check-prefixes=HONORINF,ALL -! RUN: flang -fc1 -menable-no-infs -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s -check-prefixes=CHECK,ALL +! RUN: flang -fc1 -menable-no-infs -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s -check-prefixes=CHECK,ALL,%if flang-supports-f128-math %{F128%} %else %{F64%} ! ALL-LABEL: func @_QPmodulo_testr( ! ALL-SAME: %[[arg0:.*]]: !fir.ref{{.*}}, %[[arg1:.*]]: !fir.ref{{.*}}, %[[arg2:.*]]: !fir.ref{{.*}}) { @@ -39,9 +39,12 @@ subroutine modulo_testi(r, a, p) end subroutine ! CHECK-LABEL: func @_QPmodulo_testr16( -! CHECK-SAME: %[[arg0:.*]]: !fir.ref{{.*}}, %[[arg1:.*]]: !fir.ref{{.*}}, %[[arg2:.*]]: !fir.ref{{.*}}) { +! F128-SAME: %[[arg0:.*]]: !fir.ref{{.*}}, %[[arg1:.*]]: !fir.ref{{.*}}, %[[arg2:.*]]: !fir.ref{{.*}}) { +! F64-SAME: %[[arg0:.*]]: !fir.ref{{.*}}, %[[arg1:.*]]: !fir.ref{{.*}}, %[[arg2:.*]]: !fir.ref{{.*}}) { subroutine modulo_testr16(r, a, p) - real(16) :: r, a, p - ! CHECK: fir.call @_FortranAModuloReal16({{.*}}){{.*}}: (f128, f128, !fir.ref, i32) -> f128 + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) + real(rk) :: r, a, p + !F128: fir.call @_FortranAModuloReal16({{.*}}){{.*}}: (f128, f128, !fir.ref, i32) -> f128 + !F64: arith.remf %0, %1 fastmath : f64 r = modulo(a, p) end subroutine diff --git a/flang/test/Lower/Intrinsics/powi_real16.f90 b/flang/test/Lower/Intrinsics/powi_real16.f90 index 9e7d0f828b5cd..dc19b32742c0b 100644 --- a/flang/test/Lower/Intrinsics/powi_real16.f90 +++ b/flang/test/Lower/Intrinsics/powi_real16.f90 @@ -1,3 +1,4 @@ +! REQUIRES: flang-supports-f128-math ! RUN: bbc -emit-fir %s -o - | FileCheck %s --check-prefix=CHECK-FAST ! RUN: bbc --math-runtime=precise -emit-fir %s -o - | FileCheck %s --check-prefix=CHECK-PRECISE ! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s --check-prefix=CHECK-FAST diff --git a/flang/test/Lower/Intrinsics/random_number_real16.f90 b/flang/test/Lower/Intrinsics/random_number_real16.f90 index 060574d5b3b3f..1597d9bd5397f 100644 --- a/flang/test/Lower/Intrinsics/random_number_real16.f90 +++ b/flang/test/Lower/Intrinsics/random_number_real16.f90 @@ -1,3 +1,4 @@ +! REQUIRES: flang-supports-f128-math ! RUN: bbc -emit-fir %s -o - | FileCheck %s ! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s diff --git a/flang/test/Lower/Intrinsics/rrspacing.f90 b/flang/test/Lower/Intrinsics/rrspacing.f90 index 7125f6bf319b8..5cfd7c7befdc4 100644 --- a/flang/test/Lower/Intrinsics/rrspacing.f90 +++ b/flang/test/Lower/Intrinsics/rrspacing.f90 @@ -1,3 +1,4 @@ +! REQUIRES: flang-supports-f128-math ! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s ! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s diff --git a/flang/test/Lower/Intrinsics/sign.f90 b/flang/test/Lower/Intrinsics/sign.f90 index 218080f0d49b6..965bda3d5b834 100644 --- a/flang/test/Lower/Intrinsics/sign.f90 +++ b/flang/test/Lower/Intrinsics/sign.f90 @@ -1,4 +1,4 @@ -! RUN: bbc %s -o - | FileCheck %s +! RUN: bbc %s -o - | FileCheck %s --check-prefixes=CHECK,%if flang-supports-f128-math %{F128%} %else %{F64%} ! CHECK-LABEL: sign_testi subroutine sign_testi(a, b, c) @@ -22,8 +22,10 @@ subroutine sign_testr(a, b, c) ! CHECK-LABEL: sign_testr2 subroutine sign_testr2(a, b, c) - real(KIND=16) a, b, c + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) + real(KIND=rk) a, b, c ! CHECK-NOT: fir.call @{{.*}}fabs - ! CHECK: math.copysign{{.*}} : f128 + ! F128: math.copysign{{.*}} : f128 + ! F64: math.copysign{{.*}} : f64 c = sign(a, b) end subroutine diff --git a/flang/test/Lower/OpenMP/parallel-firstprivate-clause-scalar.f90 b/flang/test/Lower/OpenMP/parallel-firstprivate-clause-scalar.f90 index c9ed7ebe8bf93..017b2a3f2edd2 100644 --- a/flang/test/Lower/OpenMP/parallel-firstprivate-clause-scalar.f90 +++ b/flang/test/Lower/OpenMP/parallel-firstprivate-clause-scalar.f90 @@ -1,5 +1,6 @@ ! This test checks lowering of `FIRSTPRIVATE` clause for scalar types. +! REQUIRES: x86_64-registered-target ! REQUIRES: shell ! RUN: bbc -fopenmp -emit-hlfir %s -o - \ ! RUN: | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%} diff --git a/flang/test/Lower/assignment.f90 b/flang/test/Lower/assignment.f90 index dde5110bdfa9a..defeec5b7edfe 100644 --- a/flang/test/Lower/assignment.f90 +++ b/flang/test/Lower/assignment.f90 @@ -1,4 +1,4 @@ -! RUN: %flang_fc1 %s -o "-" -emit-fir -cpp -flang-deprecated-no-hlfir | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-X86-64%} +! RUN: %flang_fc1 %s -o "-" -emit-fir -cpp -flang-deprecated-no-hlfir | FileCheck %s --check-prefixes=CHECK,%if flang-supports-f128-math %{F128%} %else %{F64%}%if target=x86_64-unknown-linux{{.*}} %{,CHECK-X86-64%} subroutine sub1(a) integer :: a @@ -261,27 +261,29 @@ real function divf(a, b) ! CHECK: return %[[RET]] : complex subroutine real_constant() + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) real(2) :: a real(4) :: b real(8) :: c #if __x86_64__ real(10) :: d #endif - real(16) :: e + real(rk) :: e a = 2.0_2 b = 4.0_4 c = 8.0_8 #if __x86_64__ d = 10.0_10 #endif - e = 16.0_16 + e = 16.0_rk end ! CHECK: %[[A:.*]] = fir.alloca f16 ! CHECK: %[[B:.*]] = fir.alloca f32 ! CHECK: %[[C:.*]] = fir.alloca f64 ! CHECK-X86-64: %[[D:.*]] = fir.alloca f80 -! CHECK: %[[E:.*]] = fir.alloca f128 +! F128: %[[E:.*]] = fir.alloca f128 +! F64: %[[E:.*]] = fir.alloca f64 ! CHECK: %[[C2:.*]] = arith.constant 2.000000e+00 : f16 ! CHECK: fir.store %[[C2]] to %[[A]] : !fir.ref ! CHECK: %[[C4:.*]] = arith.constant 4.000000e+00 : f32 @@ -290,8 +292,10 @@ subroutine real_constant() ! CHECK: fir.store %[[C8]] to %[[C]] : !fir.ref ! CHECK-X86-64: %[[C10:.*]] = arith.constant 1.000000e+01 : f80 ! CHECK-X86-64: fir.store %[[C10]] to %[[D]] : !fir.ref -! CHECK: %[[C16:.*]] = arith.constant 1.600000e+01 : f128 -! CHECK: fir.store %[[C16]] to %[[E]] : !fir.ref +! F128: %[[C16:.*]] = arith.constant 1.600000e+01 : f128 +! F64: %[[C16:.*]] = arith.constant 1.600000e+01 : f64 +! F128: fir.store %[[C16]] to %[[E]] : !fir.ref +! F64: fir.store %[[C16]] to %[[E]] : !fir.ref subroutine complex_constant() complex(4) :: a diff --git a/flang/test/Lower/math-lowering/abs.f90 b/flang/test/Lower/math-lowering/abs.f90 index ead603c1d13e8..9d3b8b92cfdd6 100644 --- a/flang/test/Lower/math-lowering/abs.f90 +++ b/flang/test/Lower/math-lowering/abs.f90 @@ -1,9 +1,9 @@ -! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL,FAST %s -! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL,FAST %s -! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL,RELAXED %s -! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL,RELAXED %s -! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL,PRECISE %s -! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL,PRECISE %s +! RUN: bbc -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL,FAST-%if flang-supports-f128-math %{F128%} %else %{F64%} %s +! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL,FAST,FAST-%if flang-supports-f128-math %{F128%} %else %{F64%} %s +! RUN: bbc -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL,RELAXED,RELAXED-%if flang-supports-f128-math %{F128%} %else %{F64%} %s +! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL,RELAXED,RELAXED-%if flang-supports-f128-math %{F128%} %else %{F64%} %s +! RUN: bbc -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL,PRECISE,PRECISE-%if flang-supports-f128-math %{F128%} %else %{F64%} %s +! RUN: %flang_fc1 -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL,PRECISE,PRECISE-%if flang-supports-f128-math %{F128%} %else %{F64%} %s function test_real4(x) real :: x, test_real4 @@ -26,13 +26,17 @@ function test_real8(x) ! PRECISE: {{%[A-Za-z0-9._]+}} = fir.call @fabs({{%[A-Za-z0-9._]+}}) {{.*}}: (f64) -> f64 function test_real16(x) - real(16) :: x, test_real16 + integer, parameter :: rk = merge(16, 8, selected_real_kind(33, 4931)==16) + real(rk) :: x, test_real16 test_real16 = abs(x) end function ! ALL-LABEL: @_QPtest_real16 -! FAST: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f128 -! RELAXED: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f128 -! PRECISE: {{%[A-Za-z0-9._]+}} = fir.call @llvm.fabs.f128({{%[A-Za-z0-9._]+}}) {{.*}}: (f128) -> f128 +! FAST-F128: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f128 +! FAST-F64: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f64 +! RELAXED-F128: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f128 +! RELAXED-F64: {{%[A-Za-z0-9._]+}} = math.absf {{%[A-Za-z0-9._]+}} {{.*}}: f64 +! PRECISE-F128: {{%[A-Za-z0-9._]+}} = fir.call @llvm.fabs.f128({{%[A-Za-z0-9._]+}}) {{.*}}: (f128) -> f128 +! PRECISE-F64: {{%[A-Za-z0-9._]+}} = fir.call @fabs({{%[A-Za-z0-9._]+}}) {{.*}}: (f64) -> f64 function test_complex4(c) complex(4) :: c, test_complex4 @@ -50,6 +54,6 @@ function test_complex8(c) ! PRECISE-DAG: func.func private @fabsf(f32) -> f32 attributes {fir.bindc_name = "fabsf", fir.runtime} ! PRECISE-DAG: func.func private @fabs(f64) -> f64 attributes {fir.bindc_name = "fabs", fir.runtime} -! PRECISE-DAG: func.func private @llvm.fabs.f128(f128) -> f128 attributes {fir.bindc_name = "llvm.fabs.f128", fir.runtime} +! PRECISE-F128-DAG: func.func private @llvm.fabs.f128(f128) -> f128 attributes {fir.bindc_name = "llvm.fabs.f128", fir.runtime} ! PRECISE-DAG: func.func private @cabsf(complex) -> f32 attributes {fir.bindc_name = "cabsf", fir.runtime} ! PRECISE-DAG: func.func private @cabs(complex) -> f64 attributes {fir.bindc_name = "cabs", fir.runtime} diff --git a/flang/test/Lower/math-lowering/aint.f90 b/flang/test/Lower/math-lowering/aint.f90 index 103e152be15f6..6c7809f8ea1a3 100644 --- a/flang/test/Lower/math-lowering/aint.f90 +++ b/flang/test/Lower/math-lowering/aint.f90 @@ -1,9 +1,10 @@ -! 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 +! REQUIRES: x86_64-registered-target +! RUN: bbc -target x86_64-unknown-linux-gnu -emit-fir %s -o - --math-runtime=fast | FileCheck --check-prefixes=ALL %s +! RUN: %flang_fc1 -target x86_64-unknown-linux-gnu -emit-fir -mllvm -math-runtime=fast %s -o - | FileCheck --check-prefixes=ALL %s +! RUN: bbc -target x86_64-unknown-linux-gnu -emit-fir %s -o - --math-runtime=relaxed | FileCheck --check-prefixes=ALL %s +! RUN: %flang_fc1 -target x86_64-unknown-linux-gnu -emit-fir -mllvm -math-runtime=relaxed %s -o - | FileCheck --check-prefixes=ALL %s +! RUN: bbc -target x86_64-unknown-linux-gnu -emit-fir %s -o - --math-runtime=precise | FileCheck --check-prefixes=ALL %s +! RUN: %flang_fc1 -target x86_64-unknown-linux-gnu -emit-fir -mllvm -math-runtime=precise %s -o - | FileCheck --check-prefixes=ALL %s function test_real4(x) real :: x, test_real4 diff --git a/flang/test/Lower/real-operations-1.f90 b/flang/test/Lower/real-operations-1.f90 index aeefc39ca2a0d..d155b7dc9570f 100644 --- a/flang/test/Lower/real-operations-1.f90 +++ b/flang/test/Lower/real-operations-1.f90 @@ -1,5 +1,4 @@ ! RUN: bbc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%} - ! Test real add on real kinds. ! CHECK-LABEL: real2 diff --git a/flang/test/Semantics/kinds01.f90 b/flang/test/Semantics/kinds01.f90 index 5238a90719fe4..82c4d76da3710 100644 --- a/flang/test/Semantics/kinds01.f90 +++ b/flang/test/Semantics/kinds01.f90 @@ -1,3 +1,4 @@ +! REQUIRES: x86_64-registered-target ! RUN: %python %S/test_symbols.py %s %flang_fc1 !DEF: /MainProgram1/jk1 ObjectEntity INTEGER(1) integer(kind=1) jk1 diff --git a/flang/test/Semantics/kinds02.f90 b/flang/test/Semantics/kinds02.f90 index 13dbb803de8e5..02b1e6c8c310a 100644 --- a/flang/test/Semantics/kinds02.f90 +++ b/flang/test/Semantics/kinds02.f90 @@ -1,3 +1,4 @@ +! REQUIRES: x86_64-registered-target ! RUN: %python %S/test_errors.py %s %flang_fc1 ! C712 The value of scalar-int-constant-expr shall be nonnegative and ! shall specify a representation method that exists on the processor. diff --git a/flang/test/Semantics/resolve41.f90 b/flang/test/Semantics/resolve41.f90 index d2a991c0a52dc..4d0b3a3d31e55 100644 --- a/flang/test/Semantics/resolve41.f90 +++ b/flang/test/Semantics/resolve41.f90 @@ -21,7 +21,7 @@ module m integer :: ff = 2_f !ERROR: REAL(KIND=23) is not a supported type real(d/2) :: g - !ERROR: REAL*47 is not a supported type + !ERROR: REAL(KIND=47) is not a supported type real*47 :: h !ERROR: COMPLEX*47 is not a supported type complex*47 :: i