diff --git a/flang-rt/lib/runtime/CMakeLists.txt b/flang-rt/lib/runtime/CMakeLists.txt index a678055430233..f96ba2f4553a2 100644 --- a/flang-rt/lib/runtime/CMakeLists.txt +++ b/flang-rt/lib/runtime/CMakeLists.txt @@ -87,7 +87,6 @@ set(host_sources ieee_exceptions.f90 ieee_features.f90 iso_c_binding.f90 - iso_fortran_env_impl.f90 iso_fortran_env.f90 command.cpp diff --git a/flang-rt/lib/runtime/iso_fortran_env.f90 b/flang-rt/lib/runtime/iso_fortran_env.f90 index 3729b95a339f3..a43dcbd3534b5 100644 --- a/flang-rt/lib/runtime/iso_fortran_env.f90 +++ b/flang-rt/lib/runtime/iso_fortran_env.f90 @@ -8,7 +8,7 @@ ! See Fortran 2023, subclause 16.10.2 -#include '../include/flang/Runtime/magic-numbers.h' +#include '../../../flang/include/flang/Runtime/magic-numbers.h' module iso_fortran_env @@ -22,26 +22,6 @@ module iso_fortran_env compiler_options => __builtin_compiler_options, & compiler_version => __builtin_compiler_version - use iso_fortran_env_impl, only: & - selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, & - safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, & - int8, int16, int32, int64, int128, & - selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, & - safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, & - uint8, uint16, uint32, uint64, uint128, & - logical8, logical16, logical32, logical64, & - selectedReal16, selectedBfloat16, selectedReal32, & - selectedReal64, selectedReal80, selectedReal64x2, & - selectedReal128, & - safeReal16, safeBfloat16, safeReal32, & - safeReal64, safeReal80, safeReal64x2, & - safeReal128, & - real16, bfloat16, real32, real64, & - real80, real64x2, real128, & - integer_kinds => __builtin_integer_kinds, & - real_kinds => __builtin_real_kinds, & - logical_kinds => __builtin_logical_kinds - implicit none private @@ -58,26 +38,125 @@ module iso_fortran_env pack([selectedUCS_2], selectedUCS_2 >= 0), & pack([selectedUnicode], selectedUnicode >= 0)] - public :: selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, & - safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, & - int8, int16, int32, int64, int128 - - public :: selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, & - safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, & - uint8, uint16, uint32, uint64, uint128 + integer, parameter :: & + selectedInt8 = selected_int_kind(2), & + selectedInt16 = selected_int_kind(4), & + selectedInt32 = selected_int_kind(9), & + selectedInt64 = selected_int_kind(18),& + selectedInt128 = selected_int_kind(38), & + safeInt8 = merge(selectedInt8, selected_int_kind(0), & + selectedInt8 >= 0), & + safeInt16 = merge(selectedInt16, selected_int_kind(0), & + selectedInt16 >= 0), & + safeInt32 = merge(selectedInt32, selected_int_kind(0), & + selectedInt32 >= 0), & + safeInt64 = merge(selectedInt64, selected_int_kind(0), & + selectedInt64 >= 0), & + safeInt128 = merge(selectedInt128, selected_int_kind(0), & + selectedInt128 >= 0) + integer, parameter, public :: & + int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), & + digits(int(0,kind=safeInt8)) == 7), & + int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), & + digits(int(0,kind=safeInt16)) == 15), & + int32 = merge(selectedInt32, merge(-2, -1, selectedInt32 >= 0), & + digits(int(0,kind=safeInt32)) == 31), & + int64 = merge(selectedInt64, merge(-2, -1, selectedInt64 >= 0), & + digits(int(0,kind=safeInt64)) == 63), & + int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), & + digits(int(0,kind=safeInt128)) == 127) + + ! UNSIGNED types + integer, parameter, public :: & + selectedUInt8 = selected_unsigned_kind(2), & + selectedUInt16 = selected_unsigned_kind(4), & + selectedUInt32 = selected_unsigned_kind(9), & + selectedUInt64 = selected_unsigned_kind(18),& + selectedUInt128 = selected_unsigned_kind(38), & + safeUInt8 = merge(selectedUInt8, selected_unsigned_kind(0), & + selectedUInt8 >= 0), & + safeUInt16 = merge(selectedUInt16, selected_unsigned_kind(0), & + selectedUInt16 >= 0), & + safeUInt32 = merge(selectedUInt32, selected_unsigned_kind(0), & + selectedUInt32 >= 0), & + safeUInt64 = merge(selectedUInt64, selected_unsigned_kind(0), & + selectedUInt64 >= 0), & + safeUInt128 = merge(selectedUInt128, selected_unsigned_kind(0), & + selectedUInt128 >= 0) - public :: logical8, logical16, logical32, logical64 + integer, parameter, public :: & + uint8 = merge(selectedUInt8, merge(-2, -1, selectedUInt8 >= 0), & + digits(uint(0,kind=safeUInt8)) == 8), & + uint16 = merge(selectedUInt16, merge(-2, -1, selectedUInt16 >= 0), & + digits(uint(0,kind=safeUInt16)) == 16), & + uint32 = merge(selectedUInt32, merge(-2, -1, selectedUInt32 >= 0), & + digits(uint(0,kind=safeUInt32)) == 32), & + uint64 = merge(selectedUInt64, merge(-2, -1, selectedUInt64 >= 0), & + digits(uint(0,kind=safeUInt64)) == 64), & + uint128 = merge(selectedUInt128, merge(-2, -1, selectedUInt128 >= 0), & + digits(uint(0,kind=safeUInt128)) == 128) + + integer, parameter, public :: integer_kinds(*) = [ & + selected_int_kind(0), & + [(pack([selected_int_kind(k)], & + selected_int_kind(k) >= 0 .and. & + selected_int_kind(k) /= selected_int_kind(k-1)), & + integer :: k=1, 39)]] - public :: selectedReal16, selectedBfloat16, selectedReal32, & - selectedReal64, selectedReal80, selectedReal64x2, & - selectedReal128, & - safeReal16, safeBfloat16, safeReal32, & - safeReal64, safeReal80, safeReal64x2, & - safeReal128, & - real16, bfloat16, real32, real64, & - real80, real64x2, real128 + integer, parameter, public :: & + logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64 + integer, parameter, public :: logical_kinds(*) = [ & + pack([logical8], logical8 >= 0), & + pack([logical16], logical16 >= 0), & + pack([logical32], logical32 >= 0), & + pack([logical64], logical64 >= 0)] - public :: integer_kinds, real_kinds, logical_kinds + integer, parameter :: & + selectedReal16 = selected_real_kind(3, 4), & ! IEEE half + selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single + selectedReal32 = selected_real_kind(6, 37), & ! IEEE single + selectedReal64 = selected_real_kind(15, 307), & ! IEEE double + selectedReal80 = selected_real_kind(18, 4931), & ! 80x87 extended + selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double" + selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad + safeReal16 = merge(selectedReal16, selected_real_kind(0,0), & + selectedReal16 >= 0), & + safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), & + selectedBfloat16 >= 0), & + safeReal32 = merge(selectedReal32, selected_real_kind(0,0), & + selectedReal32 >= 0), & + safeReal64 = merge(selectedReal64, selected_real_kind(0,0), & + selectedReal64 >= 0), & + safeReal80 = merge(selectedReal80, selected_real_kind(0,0), & + selectedReal80 >= 0), & + safeReal64x2 = merge(selectedReal64x2, selected_real_kind(0,0), & + selectedReal64x2 >= 0), & + safeReal128 = merge(selectedReal128, selected_real_kind(0,0), & + selectedReal128 >= 0) + integer, parameter, public :: & + real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), & + digits(real(0,kind=safeReal16)) == 11), & + bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), & + digits(real(0,kind=safeBfloat16)) == 8), & + real32 = merge(selectedReal32, merge(-2, -1, selectedReal32 >= 0), & + digits(real(0,kind=safeReal32)) == 24), & + real64 = merge(selectedReal64, merge(-2, -1, selectedReal64 >= 0), & + digits(real(0,kind=safeReal64)) == 53), & + real80 = merge(selectedReal80, merge(-2, -1, selectedReal80 >= 0), & + digits(real(0,kind=safeReal80)) == 64), & + real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), & + digits(real(0,kind=safeReal64x2)) == 106), & + real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), & + digits(real(0,kind=safeReal128)) == 113) + + integer, parameter, public :: real_kinds(*) = [ & + pack([real16], real16 >= 0), & + pack([bfloat16], bfloat16 >= 0), & + pack([real32], real32 >= 0), & + pack([real64], real64 >= 0), & + pack([real80], real80 >= 0), & + pack([real64x2], real64x2 >= 0), & + pack([real128], real128 >= 0)] integer, parameter, public :: current_team = -1, & initial_team = -2, & diff --git a/flang-rt/lib/runtime/iso_fortran_env_impl.f90 b/flang-rt/lib/runtime/iso_fortran_env_impl.f90 deleted file mode 100644 index 5408e7de37001..0000000000000 --- a/flang-rt/lib/runtime/iso_fortran_env_impl.f90 +++ /dev/null @@ -1,144 +0,0 @@ -!===-- module/iso_fortran_env_impl.f90 --=--------------------------------===! -! -! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -! See https://llvm.org/LICENSE.txt for license information. -! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -! -!===------------------------------------------------------------------------===! - -! This MODULE implements part of the ISO_FORTRAN_ENV module file, which -! partially requires linkable symbols for some entities defined -! (e.g., real_kinds). - -module iso_fortran_env_impl - implicit none - private - - ! INTEGER types - integer, parameter, public :: & - selectedInt8 = selected_int_kind(2), & - selectedInt16 = selected_int_kind(4), & - selectedInt32 = selected_int_kind(9), & - selectedInt64 = selected_int_kind(18),& - selectedInt128 = selected_int_kind(38), & - safeInt8 = merge(selectedInt8, selected_int_kind(0), & - selectedInt8 >= 0), & - safeInt16 = merge(selectedInt16, selected_int_kind(0), & - selectedInt16 >= 0), & - safeInt32 = merge(selectedInt32, selected_int_kind(0), & - selectedInt32 >= 0), & - safeInt64 = merge(selectedInt64, selected_int_kind(0), & - selectedInt64 >= 0), & - safeInt128 = merge(selectedInt128, selected_int_kind(0), & - selectedInt128 >= 0) - - integer, parameter, public :: & - int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), & - digits(int(0,kind=safeInt8)) == 7), & - int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), & - digits(int(0,kind=safeInt16)) == 15), & - int32 = merge(selectedInt32, merge(-2, -1, selectedInt32 >= 0), & - digits(int(0,kind=safeInt32)) == 31), & - int64 = merge(selectedInt64, merge(-2, -1, selectedInt64 >= 0), & - digits(int(0,kind=safeInt64)) == 63), & - int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), & - digits(int(0,kind=safeInt128)) == 127) - - ! UNSIGNED types - integer, parameter, public :: & - selectedUInt8 = selected_unsigned_kind(2), & - selectedUInt16 = selected_unsigned_kind(4), & - selectedUInt32 = selected_unsigned_kind(9), & - selectedUInt64 = selected_unsigned_kind(18),& - selectedUInt128 = selected_unsigned_kind(38), & - safeUInt8 = merge(selectedUInt8, selected_unsigned_kind(0), & - selectedUInt8 >= 0), & - safeUInt16 = merge(selectedUInt16, selected_unsigned_kind(0), & - selectedUInt16 >= 0), & - safeUInt32 = merge(selectedUInt32, selected_unsigned_kind(0), & - selectedUInt32 >= 0), & - safeUInt64 = merge(selectedUInt64, selected_unsigned_kind(0), & - selectedUInt64 >= 0), & - safeUInt128 = merge(selectedUInt128, selected_unsigned_kind(0), & - selectedUInt128 >= 0) - - integer, parameter, public :: & - uint8 = merge(selectedUInt8, merge(-2, -1, selectedUInt8 >= 0), & - digits(uint(0,kind=safeUInt8)) == 8), & - uint16 = merge(selectedUInt16, merge(-2, -1, selectedUInt16 >= 0), & - digits(uint(0,kind=safeUInt16)) == 16), & - uint32 = merge(selectedUInt32, merge(-2, -1, selectedUInt32 >= 0), & - digits(uint(0,kind=safeUInt32)) == 32), & - uint64 = merge(selectedUInt64, merge(-2, -1, selectedUInt64 >= 0), & - digits(uint(0,kind=safeUInt64)) == 64), & - uint128 = merge(selectedUInt128, merge(-2, -1, selectedUInt128 >= 0), & - digits(uint(0,kind=safeUInt128)) == 128) - - integer, parameter, dimension(*), public :: __builtin_integer_kinds = [ & - selected_int_kind(0), & - [(pack([selected_int_kind(k)], & - selected_int_kind(k) >= 0 .and. & - selected_int_kind(k) /= selected_int_kind(k-1)), & - integer :: k=1, 39)]] - - ! LOGICAL TYPES - integer, parameter, public :: & - logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64 - - integer, parameter, dimension(*), public :: __builtin_logical_kinds = [ & - pack([logical8], logical8 >= 0), & - pack([logical16], logical16 >= 0), & - pack([logical32], logical32 >= 0), & - pack([logical64], logical64 >= 0) & - ] - - ! REAL types - integer, parameter, public :: & - selectedReal16 = selected_real_kind(3, 4), & ! IEEE half - selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single - selectedReal32 = selected_real_kind(6, 37), & ! IEEE single - selectedReal64 = selected_real_kind(15, 307), & ! IEEE double - selectedReal80 = selected_real_kind(18, 4931), & ! 80x87 extended - selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double" - selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad - safeReal16 = merge(selectedReal16, selected_real_kind(0,0), & - selectedReal16 >= 0), & - safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), & - selectedBfloat16 >= 0), & - safeReal32 = merge(selectedReal32, selected_real_kind(0,0), & - selectedReal32 >= 0), & - safeReal64 = merge(selectedReal64, selected_real_kind(0,0), & - selectedReal64 >= 0), & - safeReal80 = merge(selectedReal80, selected_real_kind(0,0), & - selectedReal80 >= 0), & - safeReal64x2 = merge(selectedReal64x2, selected_real_kind(0,0), & - selectedReal64x2 >= 0), & - safeReal128 = merge(selectedReal128, selected_real_kind(0,0), & - selectedReal128 >= 0) - - integer, parameter, public :: & - real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), & - digits(real(0,kind=safeReal16)) == 11), & - bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), & - digits(real(0,kind=safeBfloat16)) == 8), & - real32 = merge(selectedReal32, merge(-2, -1, selectedReal32 >= 0), & - digits(real(0,kind=safeReal32)) == 24), & - real64 = merge(selectedReal64, merge(-2, -1, selectedReal64 >= 0), & - digits(real(0,kind=safeReal64)) == 53), & - real80 = merge(selectedReal80, merge(-2, -1, selectedReal80 >= 0), & - digits(real(0,kind=safeReal80)) == 64), & - real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), & - digits(real(0,kind=safeReal64x2)) == 106), & - real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), & - digits(real(0,kind=safeReal128)) == 113) - - integer, parameter, dimension(*), public :: __builtin_real_kinds = [ & - pack([real16], real16 >= 0), & - pack([bfloat16], bfloat16 >= 0), & - pack([real32], real32 >= 0), & - pack([real64], real64 >= 0), & - pack([real80], real80 >= 0), & - pack([real64x2], real64x2 >= 0), & - pack([real128], real128 >= 0) & - ] -end module iso_fortran_env_impl