From 4b57fe65fdc6b8d7163f36440386d1e707d89381 Mon Sep 17 00:00:00 2001 From: Peter Klausler <35819229+klausler@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:46:15 -0700 Subject: [flang] Fold IEEE_SUPPORT_xxx() intrinsic functions (#95866) All of the IEEE_SUPPORT_xxx() intrinsic functions must fold to constant logical values when they have constant arguments; and since they fold to .TRUE. for currently support architectures, always fold them. But also put in the infrastructure whereby a driver can initialize Evaluate's target information to set some of them to .FALSE. if that becomes necessary. --- flang/include/flang/Common/Fortran.h | 8 +- flang/include/flang/Evaluate/common.h | 6 +- flang/include/flang/Evaluate/target.h | 15 ++ flang/include/flang/Evaluate/tools.h | 4 + flang/lib/Evaluate/fold-logical.cpp | 69 ++++++-- flang/lib/Evaluate/intrinsics.cpp | 25 +++ flang/lib/Evaluate/tools.cpp | 39 ++++- flang/module/__fortran_builtins.f90 | 46 +++++- flang/module/__fortran_ieee_exceptions.f90 | 53 ++----- flang/module/ieee_arithmetic.f90 | 48 +++--- flang/test/Evaluate/fold-ieee.f90 | 64 ++++++++ flang/test/Lower/Intrinsics/ieee_femodes.f90 | 60 +++---- flang/test/Lower/Intrinsics/ieee_festatus.f90 | 52 +++--- flang/test/Lower/Intrinsics/ieee_flag.f90 | 193 +++++++++++------------ flang/test/Lower/Intrinsics/ieee_logb.f90 | 12 +- flang/test/Lower/Intrinsics/ieee_max_min.f90 | 68 ++++---- flang/test/Lower/Intrinsics/ieee_operator_eq.f90 | 36 ++--- flang/test/Lower/Intrinsics/ieee_rounding.f90 | 34 ++-- 18 files changed, 498 insertions(+), 334 deletions(-) create mode 100644 flang/test/Evaluate/fold-ieee.f90 diff --git a/flang/include/flang/Common/Fortran.h b/flang/include/flang/Common/Fortran.h index 0701e3e..5b2ed43 100644 --- a/flang/include/flang/Common/Fortran.h +++ b/flang/include/flang/Common/Fortran.h @@ -67,12 +67,14 @@ ENUM_CLASS( const char *AsFortran(DefinedIo); // Floating-point rounding modes; these are packed into a byte to save -// room in the runtime's format processing context structure. +// room in the runtime's format processing context structure. These +// enumerators are defined with the corresponding values returned from +// llvm.get.rounding. enum class RoundingMode : std::uint8_t { - TiesToEven, // ROUND=NEAREST, RN - default IEEE rounding ToZero, // ROUND=ZERO, RZ - truncation - Down, // ROUND=DOWN, RD + TiesToEven, // ROUND=NEAREST, RN - default IEEE rounding Up, // ROUND=UP, RU + Down, // ROUND=DOWN, RD TiesAwayFromZero, // ROUND=COMPATIBLE, RC - ties round away from zero }; diff --git a/flang/include/flang/Evaluate/common.h b/flang/include/flang/Evaluate/common.h index c2c7711..d493e5f 100644 --- a/flang/include/flang/Evaluate/common.h +++ b/flang/include/flang/Evaluate/common.h @@ -128,9 +128,9 @@ static constexpr bool Satisfies(RelationalOperator op, Relation relation) { return false; // silence g++ warning } -ENUM_CLASS( - RealFlag, Overflow, DivideByZero, InvalidArgument, Underflow, Inexact) - +// These are ordered like the bits in a common fenv.h header file. +ENUM_CLASS(RealFlag, InvalidArgument, Denorm, DivideByZero, Overflow, Underflow, + Inexact) using RealFlags = common::EnumSet; template struct ValueWithRealFlags { diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h index 10033d0..d076fcb 100644 --- a/flang/include/flang/Evaluate/target.h +++ b/flang/include/flang/Evaluate/target.h @@ -13,6 +13,8 @@ #define FORTRAN_EVALUATE_TARGET_H_ #include "flang/Common/Fortran.h" +#include "flang/Common/enum-class.h" +#include "flang/Common/enum-set.h" #include "flang/Evaluate/common.h" #include @@ -32,6 +34,11 @@ struct Rounding { #endif }; +ENUM_CLASS(IeeeFeature, Denormal, Divide, Flags, Halting, Inf, Io, NaN, + Rounding, Sqrt, Standard, Subnormal, UnderflowControl) + +using IeeeFeatures = common::EnumSet; + class TargetCharacteristics { public: TargetCharacteristics(); @@ -95,6 +102,9 @@ public: bool isPPC() const { return isPPC_; } void set_isPPC(bool isPPC = false); + IeeeFeatures &ieeeFeatures() { return ieeeFeatures_; } + const IeeeFeatures &ieeeFeatures() const { return ieeeFeatures_; } + private: static constexpr int maxKind{32}; std::uint8_t byteSize_[common::TypeCategory_enumSize][maxKind]{}; @@ -110,6 +120,11 @@ private: std::size_t maxAlignment_{8 /*at least*/}; std::string compilerOptionsString_; std::string compilerVersionString_; + IeeeFeatures ieeeFeatures_{IeeeFeature::Denormal, IeeeFeature::Divide, + IeeeFeature::Flags, IeeeFeature::Halting, IeeeFeature::Inf, + IeeeFeature::Io, IeeeFeature::NaN, IeeeFeature::Rounding, + IeeeFeature::Sqrt, IeeeFeature::Standard, IeeeFeature::Subnormal, + IeeeFeature::UnderflowControl}; }; } // namespace Fortran::evaluate diff --git a/flang/include/flang/Evaluate/tools.h b/flang/include/flang/Evaluate/tools.h index ea56a20..9c3dfb7 100644 --- a/flang/include/flang/Evaluate/tools.h +++ b/flang/include/flang/Evaluate/tools.h @@ -1320,6 +1320,10 @@ bool IsBuiltinCPtr(const Symbol &); bool IsEventType(const DerivedTypeSpec *); bool IsLockType(const DerivedTypeSpec *); bool IsNotifyType(const DerivedTypeSpec *); +// Is this derived type IEEE_FLAG_TYPE from module ISO_IEEE_EXCEPTIONS? +bool IsIeeeFlagType(const DerivedTypeSpec *); +// Is this derived type IEEE_ROUND_TYPE from module ISO_IEEE_ARITHMETIC? +bool IsIeeeRoundType(const DerivedTypeSpec *); // Is this derived type TEAM_TYPE from module ISO_FORTRAN_ENV? bool IsTeamType(const DerivedTypeSpec *); // Is this derived type TEAM_TYPE, C_PTR, or C_FUNPTR? diff --git a/flang/lib/Evaluate/fold-logical.cpp b/flang/lib/Evaluate/fold-logical.cpp index a7c655b..ee6655f 100644 --- a/flang/lib/Evaluate/fold-logical.cpp +++ b/flang/lib/Evaluate/fold-logical.cpp @@ -620,6 +620,24 @@ static Expr> RewriteOutOfRange( return AsExpr(std::move(funcRef)); } +static std::optional GetRoundingMode( + const std::optional &arg) { + if (arg) { + if (const auto *cst{UnwrapExpr>(*arg)}) { + if (auto constr{cst->GetScalarValue()}) { + if (StructureConstructorValues & values{constr->values()}; + values.size() == 1) { + const Expr &value{values.begin()->second.value()}; + if (auto code{ToInt64(value)}) { + return static_cast(*code); + } + } + } + } + } + return std::nullopt; +} + template Expr> FoldIntrinsicFunction( FoldingContext &context, @@ -831,17 +849,48 @@ Expr> FoldIntrinsicFunction( } } } - } else if (name == "__builtin_ieee_support_datatype" || - name == "__builtin_ieee_support_denormal" || - name == "__builtin_ieee_support_divide" || - name == "__builtin_ieee_support_inf" || - name == "__builtin_ieee_support_io" || - name == "__builtin_ieee_support_nan" || - name == "__builtin_ieee_support_sqrt" || - name == "__builtin_ieee_support_standard" || - name == "__builtin_ieee_support_subnormal" || - name == "__builtin_ieee_support_underflow_control") { + } else if (name == "__builtin_ieee_support_datatype") { return Expr{true}; + } else if (name == "__builtin_ieee_support_denormal") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Denormal)}; + } else if (name == "__builtin_ieee_support_divide") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Divide)}; + } else if (name == "__builtin_ieee_support_flag") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Flags)}; + } else if (name == "__builtin_ieee_support_halting") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Halting)}; + } else if (name == "__builtin_ieee_support_inf") { + return Expr{ + context.targetCharacteristics().ieeeFeatures().test(IeeeFeature::Inf)}; + } else if (name == "__builtin_ieee_support_io") { + return Expr{ + context.targetCharacteristics().ieeeFeatures().test(IeeeFeature::Io)}; + } else if (name == "__builtin_ieee_support_nan") { + return Expr{ + context.targetCharacteristics().ieeeFeatures().test(IeeeFeature::NaN)}; + } else if (name == "__builtin_ieee_support_rounding") { + if (context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Rounding)) { + if (auto mode{GetRoundingMode(args[0])}) { + return Expr{mode != common::RoundingMode::TiesAwayFromZero}; + } + } + } else if (name == "__builtin_ieee_support_sqrt") { + return Expr{ + context.targetCharacteristics().ieeeFeatures().test(IeeeFeature::Sqrt)}; + } else if (name == "__builtin_ieee_support_standard") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Standard)}; + } else if (name == "__builtin_ieee_support_subnormal") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::Subnormal)}; + } else if (name == "__builtin_ieee_support_underflow_control") { + return Expr{context.targetCharacteristics().ieeeFeatures().test( + IeeeFeature::UnderflowControl)}; } return Expr{std::move(funcRef)}; } diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp index 1bba541..2733f99 100644 --- a/flang/lib/Evaluate/intrinsics.cpp +++ b/flang/lib/Evaluate/intrinsics.cpp @@ -88,6 +88,8 @@ ENUM_CLASS(KindCode, none, defaultIntegerKind, sameKind, operand, // match any kind, with promotion (non-standard) typeless, // BOZ literals are INTEGER with this kind + ieeeFlagType, // IEEE_FLAG_TYPE from ISO_FORTRAN_EXCEPTION + ieeeRoundType, // IEEE_ROUND_TYPE from ISO_FORTRAN_ARITHMETIC teamType, // TEAM_TYPE from module ISO_FORTRAN_ENV (for coarrays) kindArg, // this argument is KIND= effectiveKind, // for function results: "kindArg" value, possibly defaulted @@ -121,6 +123,9 @@ static constexpr TypePattern DefaultChar{CharType, KindCode::defaultCharKind}; static constexpr TypePattern DefaultLogical{ LogicalType, KindCode::defaultLogicalKind}; static constexpr TypePattern BOZ{IntType, KindCode::typeless}; +static constexpr TypePattern IeeeFlagType{DerivedType, KindCode::ieeeFlagType}; +static constexpr TypePattern IeeeRoundType{ + DerivedType, KindCode::ieeeRoundType}; static constexpr TypePattern TeamType{DerivedType, KindCode::teamType}; static constexpr TypePattern DoublePrecision{ RealType, KindCode::doublePrecision}; @@ -940,6 +945,12 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ {"__builtin_ieee_support_divide", {{"x", AnyReal, Rank::elemental, Optionality::optional}}, DefaultLogical}, + {"__builtin_ieee_support_flag", + {{"flag", IeeeFlagType, Rank::scalar}, + {"x", AnyReal, Rank::elemental, Optionality::optional}}, + DefaultLogical}, + {"__builtin_ieee_support_halting", {{"flag", IeeeFlagType, Rank::scalar}}, + DefaultLogical}, {"__builtin_ieee_support_inf", {{"x", AnyReal, Rank::elemental, Optionality::optional}}, DefaultLogical}, @@ -949,6 +960,10 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ {"__builtin_ieee_support_nan", {{"x", AnyReal, Rank::elemental, Optionality::optional}}, DefaultLogical}, + {"__builtin_ieee_support_rounding", + {{"round_value", IeeeRoundType, Rank::scalar}, + {"x", AnyReal, Rank::elemental, Optionality::optional}}, + DefaultLogical}, {"__builtin_ieee_support_sqrt", {{"x", AnyReal, Rank::elemental, Optionality::optional}}, DefaultLogical}, @@ -1851,6 +1866,16 @@ std::optional IntrinsicInterface::Match( case KindCode::typeless: argOk = false; break; + case KindCode::ieeeFlagType: + argOk = !type->IsUnlimitedPolymorphic() && + type->category() == TypeCategory::Derived && + semantics::IsIeeeFlagType(&type->GetDerivedTypeSpec()); + break; + case KindCode::ieeeRoundType: + argOk = !type->IsUnlimitedPolymorphic() && + type->category() == TypeCategory::Derived && + semantics::IsIeeeRoundType(&type->GetDerivedTypeSpec()); + break; case KindCode::teamType: argOk = !type->IsUnlimitedPolymorphic() && type->category() == TypeCategory::Derived && diff --git a/flang/lib/Evaluate/tools.cpp b/flang/lib/Evaluate/tools.cpp index 4699c53..b2a50ab 100644 --- a/flang/lib/Evaluate/tools.cpp +++ b/flang/lib/Evaluate/tools.cpp @@ -1754,13 +1754,34 @@ bool IsSequenceOrBindCType(const DerivedTypeSpec *derived) { derived->typeSymbol().get().sequence()); } +static bool IsSameModule(const Scope *x, const Scope *y) { + if (x == y) { + return true; + } else if (x && y) { + // Allow for a builtin module to be read from distinct paths + const Symbol *xSym{x->symbol()}; + const Symbol *ySym{y->symbol()}; + if (xSym && ySym && xSym->name() == ySym->name()) { + const auto *xMod{xSym->detailsIf()}; + const auto *yMod{ySym->detailsIf()}; + if (xMod && yMod) { + auto xHash{xMod->moduleFileHash()}; + auto yHash{yMod->moduleFileHash()}; + return xHash && yHash && *xHash == *yHash; + } + } + } + return false; +} + bool IsBuiltinDerivedType(const DerivedTypeSpec *derived, const char *name) { - if (!derived) { - return false; - } else { + if (derived) { const auto &symbol{derived->typeSymbol()}; - return &symbol.owner() == symbol.owner().context().GetBuiltinsScope() && - symbol.name() == "__builtin_"s + name; + const Scope &scope{symbol.owner()}; + return symbol.name() == "__builtin_"s + name && + IsSameModule(&scope, scope.context().GetBuiltinsScope()); + } else { + return false; } } @@ -1790,6 +1811,14 @@ bool IsNotifyType(const DerivedTypeSpec *derived) { return IsBuiltinDerivedType(derived, "notify_type"); } +bool IsIeeeFlagType(const DerivedTypeSpec *derived) { + return IsBuiltinDerivedType(derived, "ieee_flag_type"); +} + +bool IsIeeeRoundType(const DerivedTypeSpec *derived) { + return IsBuiltinDerivedType(derived, "ieee_round_type"); +} + bool IsTeamType(const DerivedTypeSpec *derived) { return IsBuiltinDerivedType(derived, "team_type"); } diff --git a/flang/module/__fortran_builtins.f90 b/flang/module/__fortran_builtins.f90 index 4746ca2..b33d843 100644 --- a/flang/module/__fortran_builtins.f90 +++ b/flang/module/__fortran_builtins.f90 @@ -6,6 +6,8 @@ ! !===------------------------------------------------------------------------===! +include '../include/flang/Runtime/magic-numbers.h' + ! These naming shenanigans prevent names from Fortran intrinsic modules ! from being usable on INTRINSIC statements, and force the program ! to USE the standard intrinsic modules in order to access the @@ -49,6 +51,42 @@ module __fortran_builtins integer(kind=int64), private :: __count end type + type, public :: __builtin_ieee_flag_type + integer(kind=1), private :: flag = 0 + end type + + type(__builtin_ieee_flag_type), parameter, public :: & + __builtin_ieee_invalid = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INVALID), & + __builtin_ieee_overflow = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_OVERFLOW), & + __builtin_ieee_divide_by_zero = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DIVIDE_BY_ZERO), & + __builtin_ieee_underflow = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_UNDERFLOW), & + __builtin_ieee_inexact = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INEXACT), & + __builtin_ieee_denorm = & ! extension + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DENORM) + + type, public :: __builtin_ieee_round_type + integer(kind=1), private :: mode = 0 + end type + + type(__builtin_ieee_round_type), parameter, public :: & + __builtin_ieee_to_zero = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_TO_ZERO), & + __builtin_ieee_nearest = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_NEAREST), & + __builtin_ieee_up = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_UP), & + __builtin_ieee_down = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_DOWN), & + __builtin_ieee_away = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_AWAY), & + __builtin_ieee_other = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_OTHER) + type, public :: __builtin_team_type integer(kind=int64), private :: __id end type @@ -74,8 +112,10 @@ module __fortran_builtins intrinsic :: __builtin_ieee_selected_real_kind intrinsic :: __builtin_ieee_support_datatype, & __builtin_ieee_support_denormal, __builtin_ieee_support_divide, & + __builtin_ieee_support_flag, __builtin_ieee_support_halting, & __builtin_ieee_support_inf, __builtin_ieee_support_io, & - __builtin_ieee_support_nan, __builtin_ieee_support_sqrt, & + __builtin_ieee_support_nan, __builtin_ieee_support_rounding, & + __builtin_ieee_support_sqrt, & __builtin_ieee_support_standard, __builtin_ieee_support_subnormal, & __builtin_ieee_support_underflow_control public :: __builtin_fma @@ -87,8 +127,10 @@ module __fortran_builtins public :: __builtin_ieee_selected_real_kind public :: __builtin_ieee_support_datatype, & __builtin_ieee_support_denormal, __builtin_ieee_support_divide, & + __builtin_ieee_support_flag, __builtin_ieee_support_halting, & __builtin_ieee_support_inf, __builtin_ieee_support_io, & - __builtin_ieee_support_nan, __builtin_ieee_support_sqrt, & + __builtin_ieee_support_nan, __builtin_ieee_support_rounding, & + __builtin_ieee_support_sqrt, & __builtin_ieee_support_standard, __builtin_ieee_support_subnormal, & __builtin_ieee_support_underflow_control diff --git a/flang/module/__fortran_ieee_exceptions.f90 b/flang/module/__fortran_ieee_exceptions.f90 index afcd183..810a2b0 100644 --- a/flang/module/__fortran_ieee_exceptions.f90 +++ b/flang/module/__fortran_ieee_exceptions.f90 @@ -14,25 +14,22 @@ include '../include/flang/Runtime/magic-numbers.h' module __fortran_ieee_exceptions + use __fortran_builtins, only: & + ieee_flag_type => __builtin_ieee_flag_type, & + ieee_support_flag => __builtin_ieee_support_flag, & + ieee_support_halting => __builtin_ieee_support_halting, & + ieee_invalid => __builtin_ieee_invalid, & + ieee_overflow => __builtin_ieee_overflow, & + ieee_divide_by_zero => __builtin_ieee_divide_by_zero, & + ieee_underflow => __builtin_ieee_underflow, & + ieee_inexact => __builtin_ieee_inexact, & + ieee_denorm => __builtin_ieee_denorm implicit none - - ! Set PRIVATE by default to explicitly only export what is meant - ! to be exported by this MODULE. private - type, public :: ieee_flag_type ! Fortran 2018, 17.2 & 17.3 - private - integer(kind=1) :: flag = 0 - end type ieee_flag_type - - type(ieee_flag_type), parameter, public :: & - ieee_invalid = ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INVALID), & - ieee_overflow = ieee_flag_type(_FORTRAN_RUNTIME_IEEE_OVERFLOW), & - ieee_divide_by_zero = & - ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DIVIDE_BY_ZERO), & - ieee_underflow = ieee_flag_type(_FORTRAN_RUNTIME_IEEE_UNDERFLOW), & - ieee_inexact = ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INEXACT), & - ieee_denorm = ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DENORM) ! extension + public :: ieee_flag_type, ieee_support_flag, ieee_support_halting + public :: ieee_invalid, ieee_overflow, ieee_divide_by_zero, ieee_underflow, & + ieee_inexact, ieee_denorm type(ieee_flag_type), parameter, public :: & ieee_usual(*) = [ ieee_overflow, ieee_divide_by_zero, ieee_invalid ], & @@ -139,28 +136,4 @@ module __fortran_ieee_exceptions end interface public :: ieee_set_status -#define IEEE_SUPPORT_FLAG_R(XKIND) \ - pure logical function ieee_support_flag_a##XKIND(flag, x); \ - import ieee_flag_type; \ - type(ieee_flag_type), intent(in) :: flag; \ - real(XKIND), intent(in) :: x(..); \ - end function ieee_support_flag_a##XKIND; - interface ieee_support_flag - pure logical function ieee_support_flag_0(flag) - import ieee_flag_type - type(ieee_flag_type), intent(in) :: flag - end function ieee_support_flag_0 - SPECIFICS_R(IEEE_SUPPORT_FLAG_R) - end interface ieee_support_flag - public :: ieee_support_flag -#undef IEEE_SUPPORT_FLAG_R - - interface ieee_support_halting - pure logical function ieee_support_halting_0(flag) - import ieee_flag_type - type(ieee_flag_type), intent(in) :: flag - end function ieee_support_halting_0 - end interface - public :: ieee_support_halting - end module __fortran_ieee_exceptions diff --git a/flang/module/ieee_arithmetic.f90 b/flang/module/ieee_arithmetic.f90 index 1da5610..7c7721d 100644 --- a/flang/module/ieee_arithmetic.f90 +++ b/flang/module/ieee_arithmetic.f90 @@ -18,13 +18,18 @@ module ieee_arithmetic use __fortran_ieee_exceptions use __fortran_builtins, only: & + ieee_away => __builtin_ieee_away, & + ieee_down => __builtin_ieee_down, & ieee_fma => __builtin_fma, & ieee_is_nan => __builtin_ieee_is_nan, & ieee_is_negative => __builtin_ieee_is_negative, & ieee_is_normal => __builtin_ieee_is_normal, & + ieee_nearest => __builtin_ieee_nearest, & ieee_next_after => __builtin_ieee_next_after, & ieee_next_down => __builtin_ieee_next_down, & ieee_next_up => __builtin_ieee_next_up, & + ieee_other => __builtin_ieee_other, & + ieee_round_type => __builtin_ieee_round_type, & ieee_scalb => scale, & ieee_selected_real_kind => __builtin_ieee_selected_real_kind, & ieee_support_datatype => __builtin_ieee_support_datatype, & @@ -33,10 +38,14 @@ module ieee_arithmetic ieee_support_inf => __builtin_ieee_support_inf, & ieee_support_io => __builtin_ieee_support_io, & ieee_support_nan => __builtin_ieee_support_nan, & + ieee_support_rounding => __builtin_ieee_support_rounding, & ieee_support_sqrt => __builtin_ieee_support_sqrt, & ieee_support_standard => __builtin_ieee_support_standard, & ieee_support_subnormal => __builtin_ieee_support_subnormal, & - ieee_support_underflow_control => __builtin_ieee_support_underflow_control + ieee_support_underflow_control => __builtin_ieee_support_underflow_control, & + ieee_to_zero => __builtin_ieee_to_zero, & + ieee_up => __builtin_ieee_up + implicit none @@ -45,13 +54,18 @@ module ieee_arithmetic private ! Explicitly export the symbols from __fortran_builtins + public :: ieee_away + public :: ieee_down public :: ieee_fma public :: ieee_is_nan public :: ieee_is_negative public :: ieee_is_normal + public :: ieee_nearest + public :: ieee_other public :: ieee_next_after public :: ieee_next_down public :: ieee_next_up + public :: ieee_round_type public :: ieee_scalb public :: ieee_selected_real_kind public :: ieee_support_datatype @@ -60,10 +74,13 @@ module ieee_arithmetic public :: ieee_support_inf public :: ieee_support_io public :: ieee_support_nan + public :: ieee_support_rounding public :: ieee_support_sqrt public :: ieee_support_standard public :: ieee_support_subnormal public :: ieee_support_underflow_control + public :: ieee_to_zero + public :: ieee_up ! Explicitly export the symbols from __fortran_ieee_exceptions public :: ieee_flag_type @@ -114,19 +131,6 @@ module ieee_arithmetic ieee_negative_denormal = ieee_negative_subnormal, & ieee_positive_denormal = ieee_positive_subnormal - type, public :: ieee_round_type - private - integer(kind=1) :: mode = 0 - end type ieee_round_type - - type(ieee_round_type), parameter, public :: & - ieee_to_zero = ieee_round_type(_FORTRAN_RUNTIME_IEEE_TO_ZERO), & - ieee_nearest = ieee_round_type(_FORTRAN_RUNTIME_IEEE_NEAREST), & - ieee_up = ieee_round_type(_FORTRAN_RUNTIME_IEEE_UP), & - ieee_down = ieee_round_type(_FORTRAN_RUNTIME_IEEE_DOWN), & - ieee_away = ieee_round_type(_FORTRAN_RUNTIME_IEEE_AWAY), & - ieee_other = ieee_round_type(_FORTRAN_RUNTIME_IEEE_OTHER) - interface operator(==) elemental logical function ieee_class_eq(x, y) import ieee_class_type @@ -586,22 +590,6 @@ module ieee_arithmetic public :: ieee_signbit #undef IEEE_SIGNBIT_R -#define IEEE_SUPPORT_ROUNDING_R(XKIND) \ - pure logical function ieee_support_rounding_a##XKIND(round_value, x); \ - import ieee_round_type; \ - type(ieee_round_type), intent(in) :: round_value; \ - real(XKIND), intent(in) :: x(..); \ - end function ieee_support_rounding_a##XKIND; - interface ieee_support_rounding - pure logical function ieee_support_rounding_0(round_value) - import ieee_round_type - type(ieee_round_type), intent(in) :: round_value - end function ieee_support_rounding_0 - SPECIFICS_R(IEEE_SUPPORT_ROUNDING_R) - end interface ieee_support_rounding - public :: ieee_support_rounding -#undef IEEE_SUPPORT_ROUNDING_R - #define IEEE_UNORDERED_RR(XKIND, YKIND) \ elemental logical function ieee_unordered_a##XKIND##_a##YKIND(x, y); \ real(XKIND), intent(in) :: x; \ diff --git a/flang/test/Evaluate/fold-ieee.f90 b/flang/test/Evaluate/fold-ieee.f90 new file mode 100644 index 0000000..536db64 --- /dev/null +++ b/flang/test/Evaluate/fold-ieee.f90 @@ -0,0 +1,64 @@ +! RUN: %python %S/test_folding.py %s %flang_fc1 +module m + use ieee_arithmetic + use ieee_exceptions + logical, parameter :: test_dt_all = ieee_support_datatype() + logical, parameter :: test_dt_4 = ieee_support_datatype(1.) + logical, parameter :: test_dt_8 = ieee_support_datatype(1.d0) + logical, parameter :: test_de_all = ieee_support_denormal() + logical, parameter :: test_de_4 = ieee_support_denormal(1.) + logical, parameter :: test_de_8 = ieee_support_denormal(1.d0) + logical, parameter :: test_di_all = ieee_support_divide() + logical, parameter :: test_di_4 = ieee_support_divide(1.) + logical, parameter :: test_di_8 = ieee_support_divide(1.d0) + logical, parameter :: test_fl_in_all = ieee_support_flag(ieee_invalid) + logical, parameter :: test_fl_in_4 = ieee_support_flag(ieee_invalid, 1.) + logical, parameter :: test_fl_in_8 = ieee_support_flag(ieee_invalid, 1.d0) + logical, parameter :: test_fl_ov_all = ieee_support_flag(ieee_overflow) + logical, parameter :: test_fl_ov_4 = ieee_support_flag(ieee_overflow, 1.) + logical, parameter :: test_fl_ov_8 = ieee_support_flag(ieee_overflow, 1.d0) + logical, parameter :: test_fl_d0_all = ieee_support_flag(ieee_divide_by_zero) + logical, parameter :: test_fl_d0_4 = ieee_support_flag(ieee_divide_by_zero, 1.) + logical, parameter :: test_fl_d0_8 = ieee_support_flag(ieee_divide_by_zero, 1.d0) + logical, parameter :: test_fl_un_all = ieee_support_flag(ieee_underflow) + logical, parameter :: test_fl_un_4 = ieee_support_flag(ieee_underflow, 1.) + logical, parameter :: test_fl_un_8 = ieee_support_flag(ieee_underflow, 1.d0) + logical, parameter :: test_fl_ix_all = ieee_support_flag(ieee_inexact) + logical, parameter :: test_fl_ix_4 = ieee_support_flag(ieee_inexact, 1.) + logical, parameter :: test_fl_ix_8 = ieee_support_flag(ieee_inexact, 1.d0) + logical, parameter :: test_halt_in = ieee_support_halting(ieee_invalid) + logical, parameter :: test_halt_ov = ieee_support_halting(ieee_overflow) + logical, parameter :: test_halt_d0 = ieee_support_halting(ieee_divide_by_zero) + logical, parameter :: test_halt_un = ieee_support_halting(ieee_underflow) + logical, parameter :: test_halt_ix = ieee_support_halting(ieee_inexact) + logical, parameter :: test_inf_all = ieee_support_inf() + logical, parameter :: test_inf_4 = ieee_support_inf(1.) + logical, parameter :: test_inf_8 = ieee_support_inf(1.d0) + logical, parameter :: test_io_all = ieee_support_io() + logical, parameter :: test_io_4 = ieee_support_io(1.) + logical, parameter :: test_io_8 = ieee_support_io(1.d0) + logical, parameter :: test_rd_0_all = ieee_support_rounding(ieee_to_zero) + logical, parameter :: test_rd_0_4 = ieee_support_rounding(ieee_to_zero, 1.) + logical, parameter :: test_rd_0_8 = ieee_support_rounding(ieee_to_zero, 1.d0) + logical, parameter :: test_rd_n_all = ieee_support_rounding(ieee_nearest) + logical, parameter :: test_rd_n_4 = ieee_support_rounding(ieee_nearest, 1.) + logical, parameter :: test_rd_n_8 = ieee_support_rounding(ieee_nearest, 1.d0) + logical, parameter :: test_rd_d_all = ieee_support_rounding(ieee_down) + logical, parameter :: test_rd_d_4 = ieee_support_rounding(ieee_down, 1.) + logical, parameter :: test_rd_d_8 = ieee_support_rounding(ieee_down, 1.d0) + logical, parameter :: test_rd_u_all = ieee_support_rounding(ieee_up) + logical, parameter :: test_rd_u_4 = ieee_support_rounding(ieee_up, 1.) + logical, parameter :: test_rd_u_8 = ieee_support_rounding(ieee_up, 1.d0) + logical, parameter :: test_sq_all = ieee_support_sqrt() + logical, parameter :: test_sq_4 = ieee_support_sqrt(1.) + logical, parameter :: test_sq_8 = ieee_support_sqrt(1.d0) + logical, parameter :: test_std_all = ieee_support_standard() + logical, parameter :: test_std_4 = ieee_support_standard(1.) + logical, parameter :: test_std_8 = ieee_support_standard(1.d0) + logical, parameter :: test_sn_all = ieee_support_subnormal() + logical, parameter :: test_sn_4 = ieee_support_subnormal(1.) + logical, parameter :: test_sn_8 = ieee_support_subnormal(1.d0) + logical, parameter :: test_uc_all = ieee_support_underflow_control() + logical, parameter :: test_uc_4 = ieee_support_underflow_control(1.) + logical, parameter :: test_uc_8 = ieee_support_underflow_control(1.d0) +end diff --git a/flang/test/Lower/Intrinsics/ieee_femodes.f90 b/flang/test/Lower/Intrinsics/ieee_femodes.f90 index 75ff829..abb264c 100644 --- a/flang/test/Lower/Intrinsics/ieee_femodes.f90 +++ b/flang/test/Lower/Intrinsics/ieee_femodes.f90 @@ -5,57 +5,57 @@ program m use ieee_arithmetic use ieee_exceptions - ! CHECK: %[[V_59:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_ieee_exceptionsTieee_modes_type{_QM__fortran_ieee_exceptionsTieee_modes_type.__data:!fir.array<2xi32>}> {bindc_name = "modes", uniq_name = "_QFEmodes"} - ! CHECK: %[[V_60:[0-9]+]] = fir.declare %[[V_59]] {uniq_name = "_QFEmodes"} : (!fir.ref}>>) -> !fir.ref}>> + ! CHECK: %[[VAL_69:.*]] = fir.alloca !fir.type<_QM__fortran_ieee_exceptionsTieee_modes_type{_QM__fortran_ieee_exceptionsTieee_modes_type.__data:!fir.array<2xi32>}> {bindc_name = "modes", uniq_name = "_QFEmodes"} + ! CHECK: %[[VAL_70:.*]] = fir.declare %[[VAL_69]] {uniq_name = "_QFEmodes"} : (!fir.ref}>>) -> !fir.ref}>> type(ieee_modes_type) :: modes - ! CHECK: %[[V_61:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> {bindc_name = "round", uniq_name = "_QFEround"} - ! CHECK: %[[V_62:[0-9]+]] = fir.declare %[[V_61]] {uniq_name = "_QFEround"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[VAL_71:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> {bindc_name = "round", uniq_name = "_QFEround"} + ! CHECK: %[[VAL_72:.*]] = fir.declare %[[VAL_71]] {uniq_name = "_QFEround"} : (!fir.ref>) -> !fir.ref> type(ieee_round_type) :: round - ! CHECK: %[[V_68:[0-9]+]] = fir.address_of(@_QQro._QMieee_arithmeticTieee_round_type.0) : !fir.ref> - ! CHECK: %[[V_69:[0-9]+]] = fir.declare %[[V_68]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QMieee_arithmeticTieee_round_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[VAL_78:.*]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.0) : !fir.ref> + ! CHECK: %[[VAL_79:.*]] = fir.declare %[[VAL_78]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_70:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_71:[0-9]+]] = fir.coordinate_of %[[V_69]], %[[V_70]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_72:[0-9]+]] = fir.load %[[V_71]] : !fir.ref - ! CHECK: %[[V_73:[0-9]+]] = fir.convert %[[V_72]] : (i8) -> i32 - ! CHECK: fir.call @llvm.set.rounding(%[[V_73]]) fastmath : (i32) -> () + ! CHECK: %[[VAL_80:.*]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[VAL_81:.*]] = fir.coordinate_of %[[VAL_79]], %[[VAL_80]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[VAL_82:.*]] = fir.load %[[VAL_81]] : !fir.ref + ! CHECK: %[[VAL_83:.*]] = fir.convert %[[VAL_82]] : (i8) -> i32 + ! CHECK: fir.call @llvm.set.rounding(%[[VAL_83]]) fastmath : (i32) -> () call ieee_set_rounding_mode(ieee_up) - ! CHECK: %[[V_74:[0-9]+]] = fir.coordinate_of %[[V_62]], %[[V_70]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_75:[0-9]+]] = fir.call @llvm.get.rounding() fastmath : () -> i32 - ! CHECK: %[[V_76:[0-9]+]] = fir.convert %[[V_75]] : (i32) -> i8 - ! CHECK: fir.store %[[V_76]] to %[[V_74]] : !fir.ref + ! CHECK: %[[VAL_84:.*]] = fir.coordinate_of %[[VAL_72]], %[[VAL_80]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[VAL_85:.*]] = fir.call @llvm.get.rounding() fastmath : () -> i32 + ! CHECK: %[[VAL_86:.*]] = fir.convert %[[VAL_85]] : (i32) -> i8 + ! CHECK: fir.store %[[VAL_86]] to %[[VAL_84]] : !fir.ref call ieee_get_rounding_mode(round) print*, 'rounding_mode [up ] : ', mode_name(round) - ! CHECK: %[[V_93:[0-9]+]] = fir.convert %[[V_60]] : (!fir.ref}>>) -> !fir.ref - ! CHECK: %[[V_94:[0-9]+]] = fir.call @fegetmode(%[[V_93]]) fastmath : (!fir.ref) -> i32 + ! CHECK: %[[VAL_103:.*]] = fir.convert %[[VAL_70]] : (!fir.ref}>>) -> !fir.ref + ! CHECK: %[[VAL_104:.*]] = fir.call @fegetmode(%[[VAL_103]]) fastmath : (!fir.ref) -> i32 call ieee_get_modes(modes) - ! CHECK: %[[V_95:[0-9]+]] = fir.address_of(@_QQro._QMieee_arithmeticTieee_round_type.1) : !fir.ref> - ! CHECK: %[[V_96:[0-9]+]] = fir.declare %[[V_95]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QMieee_arithmeticTieee_round_type.1"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_97:[0-9]+]] = fir.coordinate_of %[[V_96]], %[[V_70]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_98:[0-9]+]] = fir.load %[[V_97]] : !fir.ref - ! CHECK: %[[V_99:[0-9]+]] = fir.convert %[[V_98]] : (i8) -> i32 - ! CHECK: fir.call @llvm.set.rounding(%[[V_99]]) fastmath : (i32) -> () + ! CHECK: %[[VAL_105:.*]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.1) : !fir.ref> + ! CHECK: %[[VAL_106:.*]] = fir.declare %[[VAL_105]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.1"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[VAL_107:.*]] = fir.coordinate_of %[[VAL_106]], %[[VAL_80]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[VAL_108:.*]] = fir.load %[[VAL_107]] : !fir.ref + ! CHECK: %[[VAL_109:.*]] = fir.convert %[[VAL_108]] : (i8) -> i32 + ! CHECK: fir.call @llvm.set.rounding(%[[VAL_109]]) fastmath : (i32) -> () call ieee_set_rounding_mode(ieee_to_zero) - ! CHECK: %[[V_100:[0-9]+]] = fir.call @llvm.get.rounding() fastmath : () -> i32 - ! CHECK: %[[V_101:[0-9]+]] = fir.convert %[[V_100]] : (i32) -> i8 - ! CHECK: fir.store %[[V_101]] to %[[V_74]] : !fir.ref + ! CHECK: %[[VAL_110:.*]] = fir.call @llvm.get.rounding() fastmath : () -> i32 + ! CHECK: %[[VAL_111:.*]] = fir.convert %[[VAL_110]] : (i32) -> i8 + ! CHECK: fir.store %[[VAL_111]] to %[[VAL_84]] : !fir.ref call ieee_get_rounding_mode(round) print*, 'rounding_mode [to_zero] : ', mode_name(round) - ! CHECK: %[[V_116:[0-9]+]] = fir.call @fesetmode(%[[V_93]]) fastmath : (!fir.ref) -> i32 + ! CHECK: %[[VAL_126:.*]] = fir.call @fesetmode(%[[VAL_103]]) fastmath : (!fir.ref) -> i32 call ieee_set_modes(modes) - ! CHECK: %[[V_117:[0-9]+]] = fir.call @llvm.get.rounding() fastmath : () -> i32 - ! CHECK: %[[V_118:[0-9]+]] = fir.convert %[[V_117]] : (i32) -> i8 - ! CHECK: fir.store %[[V_118]] to %[[V_74]] : !fir.ref + ! CHECK: %[[VAL_127:.*]] = fir.call @llvm.get.rounding() fastmath : () -> i32 + ! CHECK: %[[VAL_128:.*]] = fir.convert %[[VAL_127]] : (i32) -> i8 + ! CHECK: fir.store %[[VAL_128]] to %[[VAL_84]] : !fir.ref call ieee_get_rounding_mode(round) print*, 'rounding_mode [up ] : ', mode_name(round) diff --git a/flang/test/Lower/Intrinsics/ieee_festatus.f90 b/flang/test/Lower/Intrinsics/ieee_festatus.f90 index 0fbaf2f..66b1472 100644 --- a/flang/test/Lower/Intrinsics/ieee_festatus.f90 +++ b/flang/test/Lower/Intrinsics/ieee_festatus.f90 @@ -4,12 +4,12 @@ program s use ieee_arithmetic - ! CHECK: %[[V_0:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_all) : !fir.ref>> + ! CHECK: %[[V_0:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_all) : !fir.ref>> ! CHECK: %[[V_1:[0-9]+]] = fir.shape %c5{{.*}} : (index) -> !fir.shape<1> - ! CHECK: %[[V_2:[0-9]+]] = fir.declare %[[V_0]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_all"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> - ! CHECK: %[[V_53:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_usual) : !fir.ref>> + ! CHECK: %[[V_2:[0-9]+]] = fir.declare %[[V_0]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_all"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_53:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_usual) : !fir.ref>> ! CHECK: %[[V_54:[0-9]+]] = fir.shape %c3{{.*}} : (index) -> !fir.shape<1> - ! CHECK: %[[V_55:[0-9]+]] = fir.declare %[[V_53]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_usual"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_55:[0-9]+]] = fir.declare %[[V_53]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_usual"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> use ieee_exceptions ! CHECK: %[[V_56:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_ieee_exceptionsTieee_status_type{_QM__fortran_ieee_exceptionsTieee_status_type.__data:!fir.array<8xi32>}> {bindc_name = "status", uniq_name = "_QFEstatus"} @@ -20,12 +20,12 @@ program s ! CHECK: %[[V_59:[0-9]+]] = fir.declare %[[V_58]](%[[V_1]]) {uniq_name = "_QFEv"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> logical :: v(size(ieee_all)) - ! CHECK: %[[V_60:[0-9]+]] = fir.address_of(@_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.0) : !fir.ref>> - ! CHECK: %[[V_61:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_60:[0-9]+]] = fir.address_of(@_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.0) : !fir.ref>> + ! CHECK: %[[V_61:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_61]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_96:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_97:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_96]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_61]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_96:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_97:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_96]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_98:[0-9]+]] = fir.load %[[V_97]] : !fir.ref ! CHECK: %[[V_99:[0-9]+]] = fir.convert %[[V_98]] : (i8) -> i32 ! CHECK: %[[V_100:[0-9]+]] = fir.call @_FortranAMapException(%[[V_99]]) fastmath : (i32) -> i32 @@ -37,12 +37,12 @@ program s ! CHECK: } call ieee_set_halting_mode(ieee_all, .true.) - ! CHECK: %[[V_62:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_62:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_62]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_62]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_96:[0-9]+]] = fir.array_coor %[[V_59]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_99:[0-9]+]] = fir.load %[[V_98]] : !fir.ref ! CHECK: %[[V_100:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_101:[0-9]+]] = fir.convert %[[V_99]] : (i8) -> i32 @@ -60,12 +60,12 @@ program s ! CHECK: %[[V_76:[0-9]+]] = fir.call @fegetenv(%[[V_75]]) fastmath : (!fir.ref) -> i32 call ieee_get_status(status) - ! CHECK: %[[V_77:[0-9]+]] = fir.address_of(@_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.1) : !fir.ref>> - ! CHECK: %[[V_78:[0-9]+]] = fir.declare %[[V_77]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_77:[0-9]+]] = fir.address_of(@_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.1) : !fir.ref>> + ! CHECK: %[[V_78:[0-9]+]] = fir.declare %[[V_77]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_78]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_96:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_97:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_96]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_78]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_96:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_97:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_96]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_98:[0-9]+]] = fir.load %[[V_97]] : !fir.ref ! CHECK: %[[V_99:[0-9]+]] = fir.convert %[[V_98]] : (i8) -> i32 ! CHECK: %[[V_100:[0-9]+]] = fir.call @_FortranAMapException(%[[V_99]]) fastmath : (i32) -> i32 @@ -77,12 +77,12 @@ program s ! CHECK: } call ieee_set_halting_mode(ieee_usual, .false.) - ! CHECK: %[[V_79:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_79:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_79]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_79]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_96:[0-9]+]] = fir.array_coor %[[V_59]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_99:[0-9]+]] = fir.load %[[V_98]] : !fir.ref ! CHECK: %[[V_100:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_101:[0-9]+]] = fir.convert %[[V_99]] : (i8) -> i32 @@ -97,14 +97,14 @@ program s print*, 'halting_mode [F F F T T] :', v ! CHECK: %[[V_87:[0-9]+]] = fir.call @fesetenv(%[[V_75]]) fastmath : (!fir.ref) -> i32 - ! CHECK: %[[V_88:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_88:[0-9]+]] = fir.declare %[[V_60]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> call ieee_set_status(status) ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_88]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_95:[0-9]+]] = fir.array_coor %[[V_88]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_96:[0-9]+]] = fir.array_coor %[[V_59]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_97:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_98:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_97]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_99:[0-9]+]] = fir.load %[[V_98]] : !fir.ref ! CHECK: %[[V_100:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_101:[0-9]+]] = fir.convert %[[V_99]] : (i8) -> i32 diff --git a/flang/test/Lower/Intrinsics/ieee_flag.f90 b/flang/test/Lower/Intrinsics/ieee_flag.f90 index 424f8d5..862cfbd 100644 --- a/flang/test/Lower/Intrinsics/ieee_flag.f90 +++ b/flang/test/Lower/Intrinsics/ieee_flag.f90 @@ -2,12 +2,12 @@ ! CHECK-LABEL: c.func @_QQmain - ! CHECK: %[[V_0:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_all) : !fir.ref>> + ! CHECK: %[[V_0:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_all) : !fir.ref>> ! CHECK: %[[V_1:[0-9]+]] = fir.shape %c5{{.*}} : (index) -> !fir.shape<1> - ! CHECK: %[[V_2:[0-9]+]] = fir.declare %[[V_0]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_all"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> - ! CHECK: %[[V_53:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_usual) : !fir.ref>> + ! CHECK: %[[V_2:[0-9]+]] = fir.declare %[[V_0]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_all"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_53:[0-9]+]] = fir.address_of(@_QM__fortran_ieee_exceptionsECieee_usual) : !fir.ref>> ! CHECK: %[[V_54:[0-9]+]] = fir.shape %c3{{.*}} : (index) -> !fir.shape<1> - ! CHECK: %[[V_55:[0-9]+]] = fir.declare %[[V_53]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_usual"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_55:[0-9]+]] = fir.declare %[[V_53]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_ieee_exceptionsECieee_usual"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> use ieee_arithmetic ! CHECK: %[[V_56:[0-9]+]] = fir.alloca !fir.logical<4> {bindc_name = "v", uniq_name = "_QFEv"} @@ -26,25 +26,15 @@ print*, 'Flag' ! CHECK: %[[V_74:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput - ! CHECK: %[[V_80:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0) : !fir.ref> - ! CHECK: %[[V_81:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_82:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_83:[0-9]+]] = fir.coordinate_of %[[V_81]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_84:[0-9]+]] = fir.load %[[V_83]] : !fir.ref - ! CHECK: %[[V_85:[0-9]+]] = arith.andi %[[V_84]], %c61{{.*}} : i8 - ! CHECK: %[[V_86:[0-9]+]] = arith.cmpi ne, %[[V_85]], %c0{{.*}} : i8 - ! CHECK: %[[V_87:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_74]], %[[V_86]]) fastmath : (!fir.ref, i1) -> i1 - ! CHECK: %[[V_88:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_89:[0-9]+]] = fir.coordinate_of %[[V_88]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_90:[0-9]+]] = fir.load %[[V_89]] : !fir.ref - ! CHECK: %[[V_91:[0-9]+]] = arith.andi %[[V_90]], %c61{{.*}} : i8 - ! CHECK: %[[V_92:[0-9]+]] = arith.cmpi ne, %[[V_91]], %c0{{.*}} : i8 - ! CHECK: %[[V_93:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_74]], %[[V_92]]) fastmath : (!fir.ref, i1) -> i1 + ! CHECK: %[[V_87:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_74]], %true) fastmath : (!fir.ref, i1) -> i1 + ! CHECK: %[[V_93:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_74]], %true) fastmath : (!fir.ref, i1) -> i1 print*, 'support invalid: ', & ieee_support_flag(ieee_invalid), ieee_support_flag(ieee_invalid, x) - ! CHECK: %[[V_95:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_96:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_80:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0) : !fir.ref> + ! CHECK: %[[V_95:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_82:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_96:[0-9]+]] = fir.coordinate_of %[[V_95]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_97:[0-9]+]] = fir.load %[[V_96]] : !fir.ref ! CHECK: %[[V_98:[0-9]+]] = fir.convert %[[V_97]] : (i8) -> i32 ! CHECK: %[[V_99:[0-9]+]] = fir.call @_FortranAMapException(%[[V_98]]) fastmath : (i32) -> i32 @@ -55,8 +45,8 @@ ! CHECK: } call ieee_set_flag(ieee_invalid, .false.) - ! CHECK: %[[V_100:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_101:[0-9]+]] = fir.coordinate_of %[[V_100]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_100:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_101:[0-9]+]] = fir.coordinate_of %[[V_100]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_102:[0-9]+]] = fir.load %[[V_101]] : !fir.ref ! CHECK: %[[V_103:[0-9]+]] = fir.convert %[[V_102]] : (i8) -> i32 ! CHECK: %[[V_104:[0-9]+]] = fir.call @_FortranAMapException(%[[V_103]]) fastmath : (i32) -> i32 @@ -69,8 +59,8 @@ ! CHECK: %[[V_108:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, 'invalid[F]: ', v - ! CHECK: %[[V_118:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_119:[0-9]+]] = fir.coordinate_of %[[V_118]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_118:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_119:[0-9]+]] = fir.coordinate_of %[[V_118]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_120:[0-9]+]] = fir.load %[[V_119]] : !fir.ref ! CHECK: %[[V_121:[0-9]+]] = fir.convert %[[V_120]] : (i8) -> i32 ! CHECK: %[[V_122:[0-9]+]] = fir.call @_FortranAMapException(%[[V_121]]) fastmath : (i32) -> i32 @@ -81,8 +71,8 @@ ! CHECK: } call ieee_set_flag(ieee_invalid, .true.) - ! CHECK: %[[V_123:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_124:[0-9]+]] = fir.coordinate_of %[[V_123]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_123:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_124:[0-9]+]] = fir.coordinate_of %[[V_123]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_125:[0-9]+]] = fir.load %[[V_124]] : !fir.ref ! CHECK: %[[V_126:[0-9]+]] = fir.convert %[[V_125]] : (i8) -> i32 ! CHECK: %[[V_127:[0-9]+]] = fir.call @_FortranAMapException(%[[V_126]]) fastmath : (i32) -> i32 @@ -95,11 +85,11 @@ ! CHECK: %[[V_131:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, 'invalid[T]: ', v - ! CHECK: %[[V_140:[0-9]+]] = fir.address_of(@_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.1) : !fir.ref>> - ! CHECK: %[[V_141:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_140:[0-9]+]] = fir.address_of(@_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.1) : !fir.ref>> + ! CHECK: %[[V_141:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_141]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_141]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -111,12 +101,12 @@ ! CHECK: } call ieee_set_flag([ieee_invalid, ieee_overflow], .false.) - ! CHECK: %[[V_142:[0-9]+]] = fir.address_of(@_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.2) : !fir.ref>> - ! CHECK: %[[V_143:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_142:[0-9]+]] = fir.address_of(@_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.2) : !fir.ref>> + ! CHECK: %[[V_143:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_143]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_143]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_60]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.call @_FortranAMapException(%[[V_314]]) fastmath : (i32) -> i32 @@ -130,14 +120,14 @@ ! CHECK: %[[V_144:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[F], invalid[F]]: ', v2 - ! CHECK: %[[V_154:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_154:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: %[[V_155:[0-9]+]] = fir.address_of(@_QQro.2xl4.3) : !fir.ref>> ! CHECK: %[[V_156:[0-9]+]] = fir.declare %[[V_155]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2xl4.3"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_154]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_154]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_156]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref> - ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.load %[[V_313]] : !fir.ref ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_314]] : (i8) -> i32 ! CHECK: %[[V_316:[0-9]+]] = fir.call @_FortranAMapException(%[[V_315]]) fastmath : (i32) -> i32 @@ -150,11 +140,11 @@ ! CHECK: } call ieee_set_flag([ieee_invalid, ieee_overflow], [.false., .true.]) - ! CHECK: %[[V_157:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_157:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_157]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_157]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_60]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.call @_FortranAMapException(%[[V_314]]) fastmath : (i32) -> i32 @@ -168,11 +158,11 @@ ! CHECK: %[[V_158:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], invalid[F]]: ', v2 - ! CHECK: %[[V_165:[0-9]+]] = fir.address_of(@_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4) : !fir.ref>> - ! CHECK: %[[V_166:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_165:[0-9]+]] = fir.address_of(@_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4) : !fir.ref>> + ! CHECK: %[[V_166:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_166]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_166]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -184,11 +174,11 @@ ! CHECK: } call ieee_set_flag(ieee_usual, .true.) - ! CHECK: %[[V_167:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_167:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_167]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_167]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_64]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.call @_FortranAMapException(%[[V_314]]) fastmath : (i32) -> i32 @@ -202,14 +192,14 @@ ! CHECK: %[[V_168:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], divide_by_zero[T], invalid[T]]: ', v_usual - ! CHECK: %[[V_178:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_178:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: %[[V_179:[0-9]+]] = fir.address_of(@_QQro.3xl4.5) : !fir.ref>> ! CHECK: %[[V_180:[0-9]+]] = fir.declare %[[V_179]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3xl4.5"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_178]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_178]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_180]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref> - ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.load %[[V_313]] : !fir.ref ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_314]] : (i8) -> i32 ! CHECK: %[[V_316:[0-9]+]] = fir.call @_FortranAMapException(%[[V_315]]) fastmath : (i32) -> i32 @@ -222,11 +212,11 @@ ! CHECK: } call ieee_set_flag(ieee_usual, [.true., .false., .true.]) - ! CHECK: %[[V_181:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_181:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_181]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_181]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_64]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.call @_FortranAMapException(%[[V_314]]) fastmath : (i32) -> i32 @@ -240,11 +230,11 @@ ! CHECK: %[[V_182:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], divide_by_zero[F], invalid[T]]: ', v_usual - ! CHECK: %[[V_189:[0-9]+]] = fir.address_of(@_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.6) : !fir.ref>> - ! CHECK: %[[V_190:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_189:[0-9]+]] = fir.address_of(@_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.6) : !fir.ref>> + ! CHECK: %[[V_190:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_190]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_190]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -256,11 +246,11 @@ ! CHECK: } call ieee_set_flag(ieee_all, .false.) - ! CHECK: %[[V_191:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_191:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_191]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_191]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_62]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.call @_FortranAMapException(%[[V_314]]) fastmath : (i32) -> i32 @@ -281,16 +271,11 @@ print*, 'Halting' ! CHECK: %[[V_211:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput - ! CHECK: %[[V_215:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_216:[0-9]+]] = fir.coordinate_of %[[V_215]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_217:[0-9]+]] = fir.load %[[V_216]] : !fir.ref - ! CHECK: %[[V_218:[0-9]+]] = arith.andi %[[V_217]], %c61{{.*}} : i8 - ! CHECK: %[[V_219:[0-9]+]] = arith.cmpi ne, %[[V_218]], %c0{{.*}} : i8 - ! CHECK: %[[V_220:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_211]], %[[V_219]]) fastmath : (!fir.ref, i1) -> i1 + ! CHECK: %[[V_220:[0-9]+]] = fir.call @_FortranAioOutputLogical(%[[V_211]], %true) fastmath : (!fir.ref, i1) -> i1 print*, 'support invalid: ', ieee_support_halting(ieee_invalid) - ! CHECK: %[[V_222:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_223:[0-9]+]] = fir.coordinate_of %[[V_222]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_222:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_223:[0-9]+]] = fir.coordinate_of %[[V_222]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_224:[0-9]+]] = fir.load %[[V_223]] : !fir.ref ! CHECK: %[[V_225:[0-9]+]] = fir.convert %[[V_224]] : (i8) -> i32 ! CHECK: %[[V_226:[0-9]+]] = fir.call @_FortranAMapException(%[[V_225]]) fastmath : (i32) -> i32 @@ -301,8 +286,8 @@ ! CHECK: } call ieee_set_halting_mode(ieee_invalid, .false.) - ! CHECK: %[[V_227:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_228:[0-9]+]] = fir.coordinate_of %[[V_227]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_227:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_228:[0-9]+]] = fir.coordinate_of %[[V_227]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_229:[0-9]+]] = fir.load %[[V_228]] : !fir.ref ! CHECK: %[[V_230:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_231:[0-9]+]] = fir.convert %[[V_229]] : (i8) -> i32 @@ -316,8 +301,8 @@ ! CHECK: %[[V_236:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, 'invalid[F]: ', v - ! CHECK: %[[V_244:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_245:[0-9]+]] = fir.coordinate_of %[[V_244]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_244:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_245:[0-9]+]] = fir.coordinate_of %[[V_244]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_246:[0-9]+]] = fir.load %[[V_245]] : !fir.ref ! CHECK: %[[V_247:[0-9]+]] = fir.convert %[[V_246]] : (i8) -> i32 ! CHECK: %[[V_248:[0-9]+]] = fir.call @_FortranAMapException(%[[V_247]]) fastmath : (i32) -> i32 @@ -328,8 +313,8 @@ ! CHECK: } call ieee_set_halting_mode(ieee_invalid, .true.) - ! CHECK: %[[V_249:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_250:[0-9]+]] = fir.coordinate_of %[[V_249]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_249:[0-9]+]] = fir.declare %[[V_80]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_250:[0-9]+]] = fir.coordinate_of %[[V_249]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_251:[0-9]+]] = fir.load %[[V_250]] : !fir.ref ! CHECK: %[[V_252:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_253:[0-9]+]] = fir.convert %[[V_251]] : (i8) -> i32 @@ -343,10 +328,10 @@ ! CHECK: %[[V_258:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, 'invalid[T]: ', v - ! CHECK: %[[V_266:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_266:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_266]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_266]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -358,11 +343,11 @@ ! CHECK: } call ieee_set_halting_mode([ieee_invalid, ieee_overflow], .false.) - ! CHECK: %[[V_267:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_267:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_267]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_267]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_60]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 @@ -377,13 +362,13 @@ ! CHECK: %[[V_268:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[F], invalid[F]]: ', v2 - ! CHECK: %[[V_274:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_274:[0-9]+]] = fir.declare %[[V_140]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.1"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: %[[V_275:[0-9]+]] = fir.declare %[[V_155]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2xl4.3"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_274]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_274]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_275]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref> - ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.load %[[V_313]] : !fir.ref ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_314]] : (i8) -> i32 ! CHECK: %[[V_316:[0-9]+]] = fir.call @_FortranAMapException(%[[V_315]]) fastmath : (i32) -> i32 @@ -396,11 +381,11 @@ ! CHECK: } call ieee_set_halting_mode([ieee_invalid, ieee_overflow], [.false., .true.]) - ! CHECK: %[[V_276:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_ieee_exceptionsTieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_276:[0-9]+]] = fir.declare %[[V_142]](%[[V_59]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.2x_QM__fortran_builtinsT__builtin_ieee_flag_type.2"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c2{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_276]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_276]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_60]](%[[V_59]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 @@ -415,10 +400,10 @@ ! CHECK: %[[V_277:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], invalid[F]]: ', v2 - ! CHECK: %[[V_283:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_283:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_283]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_283]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -430,11 +415,11 @@ ! CHECK: } call ieee_set_halting_mode(ieee_usual, .true.) - ! CHECK: %[[V_284:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_284:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_284]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_284]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_64]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 @@ -449,13 +434,13 @@ ! CHECK: %[[V_285:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], divide_by_zero[T], invalid[T]]: ', v_usual - ! CHECK: %[[V_291:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_291:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: %[[V_292:[0-9]+]] = fir.declare %[[V_179]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3xl4.5"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_291]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_291]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_292]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref> - ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_313:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.load %[[V_313]] : !fir.ref ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_314]] : (i8) -> i32 ! CHECK: %[[V_316:[0-9]+]] = fir.call @_FortranAMapException(%[[V_315]]) fastmath : (i32) -> i32 @@ -468,11 +453,11 @@ ! CHECK: } call ieee_set_halting_mode(ieee_usual, [.true., .false., .true.]) - ! CHECK: %[[V_293:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_ieee_exceptionsTieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_293:[0-9]+]] = fir.declare %[[V_165]](%[[V_54]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.3x_QM__fortran_builtinsT__builtin_ieee_flag_type.4"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c3{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_293]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_293]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_64]](%[[V_54]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 @@ -487,10 +472,10 @@ ! CHECK: %[[V_294:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput print*, '[overflow[T], divide_by_zero[F], invalid[T]]: ', v_usual - ! CHECK: %[[V_300:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_300:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_300]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_300]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_311:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_312:[0-9]+]] = fir.load %[[V_311]] : !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.convert %[[V_312]] : (i8) -> i32 ! CHECK: %[[V_314:[0-9]+]] = fir.call @_FortranAMapException(%[[V_313]]) fastmath : (i32) -> i32 @@ -502,11 +487,11 @@ ! CHECK: } call ieee_set_halting_mode(ieee_all, .true.) - ! CHECK: %[[V_301:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_ieee_exceptionsTieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> + ! CHECK: %[[V_301:[0-9]+]] = fir.declare %[[V_189]](%[[V_1]]) {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro.5x_QM__fortran_builtinsT__builtin_ieee_flag_type.6"} : (!fir.ref>>, !fir.shape<1>) -> !fir.ref>> ! CHECK: fir.do_loop %arg0 = %c1{{.*}} to %c5{{.*}} step %c1{{.*}} { - ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_301]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> + ! CHECK: %[[V_310:[0-9]+]] = fir.array_coor %[[V_301]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> ! CHECK: %[[V_311:[0-9]+]] = fir.array_coor %[[V_62]](%[[V_1]]) %arg0 : (!fir.ref>>, !fir.shape<1>, index) -> !fir.ref> - ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_312:[0-9]+]] = fir.coordinate_of %[[V_310]], %[[V_82]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_313:[0-9]+]] = fir.load %[[V_312]] : !fir.ref ! CHECK: %[[V_314:[0-9]+]] = fir.call @fegetexcept() fastmath : () -> i32 ! CHECK: %[[V_315:[0-9]+]] = fir.convert %[[V_313]] : (i8) -> i32 diff --git a/flang/test/Lower/Intrinsics/ieee_logb.f90 b/flang/test/Lower/Intrinsics/ieee_logb.f90 index 4195ac7..bbc65e6 100644 --- a/flang/test/Lower/Intrinsics/ieee_logb.f90 +++ b/flang/test/Lower/Intrinsics/ieee_logb.f90 @@ -13,10 +13,10 @@ subroutine out(x) real(k) :: x, r logical :: L - ! CHECK: %[[V_65:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0) : !fir.ref> - ! CHECK: %[[V_66:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_67:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_68:[0-9]+]] = fir.coordinate_of %[[V_66]], %[[V_67]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_65:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0) : !fir.ref> + ! CHECK: %[[V_66:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_67:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_68:[0-9]+]] = fir.coordinate_of %[[V_66]], %[[V_67]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_69:[0-9]+]] = fir.load %[[V_68]] : !fir.ref ! CHECK: %[[V_70:[0-9]+]] = fir.convert %[[V_69]] : (i8) -> i32 ! CHECK: %[[V_71:[0-9]+]] = fir.call @_FortranAMapException(%[[V_70]]) fastmath : (i32) -> i32 @@ -52,8 +52,8 @@ subroutine out(x) ! CHECK: fir.store %[[V_75]] to %[[V_63]] : !fir.ref r = ieee_logb(x) - ! CHECK: %[[V_76:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_77:[0-9]+]] = fir.coordinate_of %[[V_76]], %[[V_67]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_76:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_77:[0-9]+]] = fir.coordinate_of %[[V_76]], %[[V_67]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_78:[0-9]+]] = fir.load %[[V_77]] : !fir.ref ! CHECK: %[[V_79:[0-9]+]] = fir.convert %[[V_78]] : (i8) -> i32 ! CHECK: %[[V_80:[0-9]+]] = fir.call @_FortranAMapException(%[[V_79]]) fastmath : (i32) -> i32 diff --git a/flang/test/Lower/Intrinsics/ieee_max_min.f90 b/flang/test/Lower/Intrinsics/ieee_max_min.f90 index aecfaf0..69ae05b 100644 --- a/flang/test/Lower/Intrinsics/ieee_max_min.f90 +++ b/flang/test/Lower/Intrinsics/ieee_max_min.f90 @@ -67,10 +67,10 @@ program p a = x(i) b = x(j) - ! CHECK: %[[V_201:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10) : !fir.ref> - ! CHECK: %[[V_202:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_203:[0-9]+]] = fir.field_index _QM__fortran_ieee_exceptionsTieee_flag_type.flag, !fir.type<_QM__fortran_ieee_exceptionsTieee_flag_type{_QM__fortran_ieee_exceptionsTieee_flag_type.flag:i8}> - ! CHECK: %[[V_204:[0-9]+]] = fir.coordinate_of %[[V_202]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_201:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10) : !fir.ref> + ! CHECK: %[[V_202:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_203:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_flag_type.flag, !fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}> + ! CHECK: %[[V_204:[0-9]+]] = fir.coordinate_of %[[V_202]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_205:[0-9]+]] = fir.load %[[V_204]] : !fir.ref ! CHECK: %[[V_206:[0-9]+]] = fir.convert %[[V_205]] : (i8) -> i32 ! CHECK: %[[V_207:[0-9]+]] = fir.call @_FortranAMapException(%[[V_206]]) fastmath : (i32) -> i32 @@ -112,8 +112,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_211]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_212:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_213:[0-9]+]] = fir.coordinate_of %[[V_212]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_212:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_213:[0-9]+]] = fir.coordinate_of %[[V_212]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_214:[0-9]+]] = fir.load %[[V_213]] : !fir.ref ! CHECK: %[[V_215:[0-9]+]] = fir.convert %[[V_214]] : (i8) -> i32 ! CHECK: %[[V_216:[0-9]+]] = fir.call @_FortranAMapException(%[[V_215]]) fastmath : (i32) -> i32 @@ -126,8 +126,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'max ', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_268:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_269:[0-9]+]] = fir.coordinate_of %[[V_268]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_268:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_269:[0-9]+]] = fir.coordinate_of %[[V_268]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_270:[0-9]+]] = fir.load %[[V_269]] : !fir.ref ! CHECK: %[[V_271:[0-9]+]] = fir.convert %[[V_270]] : (i8) -> i32 ! CHECK: %[[V_272:[0-9]+]] = fir.call @_FortranAMapException(%[[V_271]]) fastmath : (i32) -> i32 @@ -171,8 +171,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_278]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_279:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_280:[0-9]+]] = fir.coordinate_of %[[V_279]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_279:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_280:[0-9]+]] = fir.coordinate_of %[[V_279]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_281:[0-9]+]] = fir.load %[[V_280]] : !fir.ref ! CHECK: %[[V_282:[0-9]+]] = fir.convert %[[V_281]] : (i8) -> i32 ! CHECK: %[[V_283:[0-9]+]] = fir.call @_FortranAMapException(%[[V_282]]) fastmath : (i32) -> i32 @@ -185,8 +185,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'mag ', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_329:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_330:[0-9]+]] = fir.coordinate_of %[[V_329]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_329:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_330:[0-9]+]] = fir.coordinate_of %[[V_329]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_331:[0-9]+]] = fir.load %[[V_330]] : !fir.ref ! CHECK: %[[V_332:[0-9]+]] = fir.convert %[[V_331]] : (i8) -> i32 ! CHECK: %[[V_333:[0-9]+]] = fir.call @_FortranAMapException(%[[V_332]]) fastmath : (i32) -> i32 @@ -232,8 +232,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_337]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_338:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_339:[0-9]+]] = fir.coordinate_of %[[V_338]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_338:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_339:[0-9]+]] = fir.coordinate_of %[[V_338]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_340:[0-9]+]] = fir.load %[[V_339]] : !fir.ref ! CHECK: %[[V_341:[0-9]+]] = fir.convert %[[V_340]] : (i8) -> i32 ! CHECK: %[[V_342:[0-9]+]] = fir.call @_FortranAMapException(%[[V_341]]) fastmath : (i32) -> i32 @@ -246,8 +246,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'max_num', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_388:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_389:[0-9]+]] = fir.coordinate_of %[[V_388]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_388:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_389:[0-9]+]] = fir.coordinate_of %[[V_388]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_390:[0-9]+]] = fir.load %[[V_389]] : !fir.ref ! CHECK: %[[V_391:[0-9]+]] = fir.convert %[[V_390]] : (i8) -> i32 ! CHECK: %[[V_392:[0-9]+]] = fir.call @_FortranAMapException(%[[V_391]]) fastmath : (i32) -> i32 @@ -295,8 +295,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_398]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_399:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_400:[0-9]+]] = fir.coordinate_of %[[V_399]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_399:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_400:[0-9]+]] = fir.coordinate_of %[[V_399]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_401:[0-9]+]] = fir.load %[[V_400]] : !fir.ref ! CHECK: %[[V_402:[0-9]+]] = fir.convert %[[V_401]] : (i8) -> i32 ! CHECK: %[[V_403:[0-9]+]] = fir.call @_FortranAMapException(%[[V_402]]) fastmath : (i32) -> i32 @@ -309,8 +309,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'mag_num', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_449:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_450:[0-9]+]] = fir.coordinate_of %[[V_449]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_449:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_450:[0-9]+]] = fir.coordinate_of %[[V_449]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_451:[0-9]+]] = fir.load %[[V_450]] : !fir.ref ! CHECK: %[[V_452:[0-9]+]] = fir.convert %[[V_451]] : (i8) -> i32 ! CHECK: %[[V_453:[0-9]+]] = fir.call @_FortranAMapException(%[[V_452]]) fastmath : (i32) -> i32 @@ -352,8 +352,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_457]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_458:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_459:[0-9]+]] = fir.coordinate_of %[[V_458]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_458:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_459:[0-9]+]] = fir.coordinate_of %[[V_458]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_460:[0-9]+]] = fir.load %[[V_459]] : !fir.ref ! CHECK: %[[V_461:[0-9]+]] = fir.convert %[[V_460]] : (i8) -> i32 ! CHECK: %[[V_462:[0-9]+]] = fir.call @_FortranAMapException(%[[V_461]]) fastmath : (i32) -> i32 @@ -366,8 +366,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'min ', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_508:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_509:[0-9]+]] = fir.coordinate_of %[[V_508]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_508:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_509:[0-9]+]] = fir.coordinate_of %[[V_508]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_510:[0-9]+]] = fir.load %[[V_509]] : !fir.ref ! CHECK: %[[V_511:[0-9]+]] = fir.convert %[[V_510]] : (i8) -> i32 ! CHECK: %[[V_512:[0-9]+]] = fir.call @_FortranAMapException(%[[V_511]]) fastmath : (i32) -> i32 @@ -411,8 +411,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_518]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_519:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_520:[0-9]+]] = fir.coordinate_of %[[V_519]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_519:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_520:[0-9]+]] = fir.coordinate_of %[[V_519]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_521:[0-9]+]] = fir.load %[[V_520]] : !fir.ref ! CHECK: %[[V_522:[0-9]+]] = fir.convert %[[V_521]] : (i8) -> i32 ! CHECK: %[[V_523:[0-9]+]] = fir.call @_FortranAMapException(%[[V_522]]) fastmath : (i32) -> i32 @@ -425,8 +425,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'mig ', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_569:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_570:[0-9]+]] = fir.coordinate_of %[[V_569]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_569:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_570:[0-9]+]] = fir.coordinate_of %[[V_569]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_571:[0-9]+]] = fir.load %[[V_570]] : !fir.ref ! CHECK: %[[V_572:[0-9]+]] = fir.convert %[[V_571]] : (i8) -> i32 ! CHECK: %[[V_573:[0-9]+]] = fir.call @_FortranAMapException(%[[V_572]]) fastmath : (i32) -> i32 @@ -472,8 +472,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_577]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_578:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_579:[0-9]+]] = fir.coordinate_of %[[V_578]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_578:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_579:[0-9]+]] = fir.coordinate_of %[[V_578]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_580:[0-9]+]] = fir.load %[[V_579]] : !fir.ref ! CHECK: %[[V_581:[0-9]+]] = fir.convert %[[V_580]] : (i8) -> i32 ! CHECK: %[[V_582:[0-9]+]] = fir.call @_FortranAMapException(%[[V_581]]) fastmath : (i32) -> i32 @@ -486,8 +486,8 @@ program p call ieee_get_flag(ieee_invalid, flag_value) write(*, 4) 'min_num', a, a, b, b, r, flag_value, trim(tag(r)) - ! CHECK: %[[V_628:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_629:[0-9]+]] = fir.coordinate_of %[[V_628]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_628:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_629:[0-9]+]] = fir.coordinate_of %[[V_628]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_630:[0-9]+]] = fir.load %[[V_629]] : !fir.ref ! CHECK: %[[V_631:[0-9]+]] = fir.convert %[[V_630]] : (i8) -> i32 ! CHECK: %[[V_632:[0-9]+]] = fir.call @_FortranAMapException(%[[V_631]]) fastmath : (i32) -> i32 @@ -535,8 +535,8 @@ program p ! CHECK: fir.result %[[V_693]] : f32 ! CHECK: } ! CHECK: fir.store %[[V_638]] to %[[V_83]] : !fir.ref - ! CHECK: %[[V_639:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_ieee_exceptionsTieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> - ! CHECK: %[[V_640:[0-9]+]] = fir.coordinate_of %[[V_639]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_639:[0-9]+]] = fir.declare %[[V_201]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.10"} : (!fir.ref>) -> !fir.ref> + ! CHECK: %[[V_640:[0-9]+]] = fir.coordinate_of %[[V_639]], %[[V_203]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_641:[0-9]+]] = fir.load %[[V_640]] : !fir.ref ! CHECK: %[[V_642:[0-9]+]] = fir.convert %[[V_641]] : (i8) -> i32 ! CHECK: %[[V_643:[0-9]+]] = fir.call @_FortranAMapException(%[[V_642]]) fastmath : (i32) -> i32 diff --git a/flang/test/Lower/Intrinsics/ieee_operator_eq.f90 b/flang/test/Lower/Intrinsics/ieee_operator_eq.f90 index 1a655ef..d206760 100644 --- a/flang/test/Lower/Intrinsics/ieee_operator_eq.f90 +++ b/flang/test/Lower/Intrinsics/ieee_operator_eq.f90 @@ -4,10 +4,10 @@ subroutine s(r1,r2) use ieee_arithmetic, only: ieee_round_type, operator(==) type(ieee_round_type) :: r1, r2 - ! CHECK: %[[V_3:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_4:[0-9]+]] = fir.coordinate_of %arg0, %[[V_3]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_5:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_6:[0-9]+]] = fir.coordinate_of %arg1, %[[V_5]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_3:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_4:[0-9]+]] = fir.coordinate_of %arg0, %[[V_3]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_5:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_6:[0-9]+]] = fir.coordinate_of %arg1, %[[V_5]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_7:[0-9]+]] = fir.load %[[V_4]] : !fir.ref ! CHECK: %[[V_8:[0-9]+]] = fir.load %[[V_6]] : !fir.ref ! CHECK: %[[V_9:[0-9]+]] = arith.cmpi eq, %[[V_7]], %[[V_8]] : i8 @@ -26,26 +26,26 @@ end end end interface - ! CHECK: %[[V_0:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_1:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_2:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_3:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_9:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_10:[0-9]+]] = fir.coordinate_of %[[V_3]], %[[V_9]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_0:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_1:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_2:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_3:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_9:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_10:[0-9]+]] = fir.coordinate_of %[[V_3]], %[[V_9]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: fir.store %c0{{.*}} to %[[V_10]] : !fir.ref - ! CHECK: %[[V_16:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_17:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_16]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_16:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_17:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_16]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: fir.store %c1{{.*}} to %[[V_17]] : !fir.ref - ! CHECK: fir.call @_QPs(%[[V_3]], %[[V_2]]) {{.*}} : (!fir.ref>, !fir.ref>) -> () + ! CHECK: fir.call @_QPs(%[[V_3]], %[[V_2]]) {{.*}} : (!fir.ref>, !fir.ref>) -> () call s(ieee_to_zero, ieee_nearest) - ! CHECK: %[[V_23:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_24:[0-9]+]] = fir.coordinate_of %[[V_1]], %[[V_23]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_23:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_24:[0-9]+]] = fir.coordinate_of %[[V_1]], %[[V_23]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: fir.store %c1{{.*}} to %[[V_24]] : !fir.ref - ! CHECK: %[[V_30:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_31:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_30]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_30:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_31:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_30]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: fir.store %c1{{.*}} to %[[V_31]] : !fir.ref - ! CHECK: fir.call @_QPs(%[[V_1]], %[[V_0]]) {{.*}} : (!fir.ref>, !fir.ref>) -> () + ! CHECK: fir.call @_QPs(%[[V_1]], %[[V_0]]) {{.*}} : (!fir.ref>, !fir.ref>) -> () call s(ieee_nearest, ieee_nearest) end diff --git a/flang/test/Lower/Intrinsics/ieee_rounding.f90 b/flang/test/Lower/Intrinsics/ieee_rounding.f90 index 6b2427f..be99ffb 100644 --- a/flang/test/Lower/Intrinsics/ieee_rounding.f90 +++ b/flang/test/Lower/Intrinsics/ieee_rounding.f90 @@ -3,44 +3,32 @@ ! CHECK-LABEL: c.func @_QQmain program r use ieee_arithmetic - ! CHECK-DAG: %[[V_0:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK-DAG: %[[V_1:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK-DAG: %[[V_2:[0-9]+]] = fir.alloca !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> {bindc_name = "round_value", uniq_name = "_QFEround_value"} + ! CHECK-DAG: %[[V_0:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK-DAG: %[[V_2:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> {bindc_name = "round_value", uniq_name = "_QFEround_value"} type(ieee_round_type) :: round_value - ! CHECK: %[[V_13:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_14:[0-9]+]] = fir.coordinate_of %[[V_1]], %[[V_13]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: fir.store %c3{{.*}} to %[[V_14]] : !fir.ref - ! CHECK: %[[V_15:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_16:[0-9]+]] = fir.coordinate_of %[[V_1]], %[[V_15]] : (!fir.ref>, !fir.field) -> !fir.ref - ! CHECK: %[[V_17:[0-9]+]] = fir.load %[[V_16]] : !fir.ref - ! CHECK: %[[V_18:[0-9]+]] = arith.cmpi sge, %[[V_17]], %c0{{.*}} : i8 - ! CHECK: %[[V_19:[0-9]+]] = arith.cmpi sle, %[[V_17]], %c3{{.*}} : i8 - ! CHECK: %[[V_20:[0-9]+]] = arith.andi %[[V_18]], %[[V_19]] : i1 - ! CHECK: %[[V_21:[0-9]+]] = fir.convert %[[V_20]] : (i1) -> !fir.logical<4> - ! CHECK: %[[V_22:[0-9]+]] = fir.convert %[[V_21]] : (!fir.logical<4>) -> i1 - ! CHECK: fir.if %[[V_22]] { + ! CHECK: fir.if %true { if (ieee_support_rounding(ieee_down)) then - ! CHECK: %[[V_23:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_24:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_23]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_23:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_24:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_23]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_25:[0-9]+]] = fir.call @llvm.get.rounding() {{.*}} : () -> i32 ! CHECK: %[[V_26:[0-9]+]] = fir.convert %[[V_25]] : (i32) -> i8 ! CHECK: fir.store %[[V_26]] to %[[V_24]] : !fir.ref call ieee_get_rounding_mode(round_value) - ! CHECK: %[[V_32:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_33:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_32]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_32:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_33:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_32]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: fir.store %c3{{.*}} to %[[V_33]] : !fir.ref - ! CHECK: %[[V_34:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_35:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_34]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_34:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_35:[0-9]+]] = fir.coordinate_of %[[V_0]], %[[V_34]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_36:[0-9]+]] = fir.load %[[V_35]] : !fir.ref ! CHECK: %[[V_37:[0-9]+]] = fir.convert %[[V_36]] : (i8) -> i32 ! CHECK: fir.call @llvm.set.rounding(%[[V_37]]) {{.*}} : (i32) -> () call ieee_set_rounding_mode(ieee_down) print*, 'ok' - ! CHECK: %[[V_46:[0-9]+]] = fir.field_index _QMieee_arithmeticTieee_round_type.mode, !fir.type<_QMieee_arithmeticTieee_round_type{_QMieee_arithmeticTieee_round_type.mode:i8}> - ! CHECK: %[[V_47:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_46]] : (!fir.ref>, !fir.field) -> !fir.ref + ! CHECK: %[[V_46:[0-9]+]] = fir.field_index _QM__fortran_builtinsT__builtin_ieee_round_type.mode, !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}> + ! CHECK: %[[V_47:[0-9]+]] = fir.coordinate_of %[[V_2]], %[[V_46]] : (!fir.ref>, !fir.field) -> !fir.ref ! CHECK: %[[V_48:[0-9]+]] = fir.load %[[V_47]] : !fir.ref ! CHECK: %[[V_49:[0-9]+]] = fir.convert %[[V_48]] : (i8) -> i32 ! CHECK: fir.call @llvm.set.rounding(%[[V_49]]) {{.*}} : (i32) -> () -- cgit v1.1