diff options
author | Slava Zakharin <szakharin@nvidia.com> | 2022-11-02 01:12:43 +0300 |
---|---|---|
committer | Slava Zakharin <szakharin@nvidia.com> | 2022-11-03 07:10:22 +0300 |
commit | 8cdee2eadabfaada866a69ed7d0eda96b9567465 (patch) | |
tree | dc61dd6c66d1d74e219a160862a4b4ed5f9043e1 /flang | |
parent | 5adb090795914a4122492117f3af8dacaf69301f (diff) |
[NFC][flang] Lowering options clean-up.
This change-set defines the LoweringOptions the same way
other options are defined in Flang.
Differential Revision: https://reviews.llvm.org/D137207
Diffstat (limited to 'flang')
-rw-r--r-- | flang/include/flang/Lower/LoweringOptions.def | 35 | ||||
-rw-r--r-- | flang/include/flang/Lower/LoweringOptions.h | 48 | ||||
-rw-r--r-- | flang/lib/Lower/CMakeLists.txt | 1 | ||||
-rw-r--r-- | flang/lib/Lower/CallInterface.cpp | 2 | ||||
-rw-r--r-- | flang/lib/Lower/ConvertType.cpp | 3 | ||||
-rw-r--r-- | flang/lib/Lower/LoweringOptions.cpp | 23 | ||||
-rw-r--r-- | flang/unittests/Frontend/CMakeLists.txt | 1 |
7 files changed, 82 insertions, 31 deletions
diff --git a/flang/include/flang/Lower/LoweringOptions.def b/flang/include/flang/Lower/LoweringOptions.def new file mode 100644 index 000000000000..2a89308467fd --- /dev/null +++ b/flang/include/flang/Lower/LoweringOptions.def @@ -0,0 +1,35 @@ +//===--- LoweringOptions.def - Lowering options database ---------- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file defines the lowering options. Users of this file must define +/// LOWERINGOPT macro to make use of this information. +/// +//===----------------------------------------------------------------------===// + +#ifndef LOWERINGOPT +# error Define the LOWERINGOPT macro to handle lowering options +#endif + +#ifndef ENUM_LOWERINGOPT +# define ENUM_LOWERINGOPT(Name, Type, Bits, Default) \ +LOWERINGOPT(Name, Bits, Default) +#endif + +/// If true, lower transpose without a runtime call. +ENUM_LOWERINGOPT(OptimizeTranspose, unsigned, 1, 1) + +/// If true, enable polymorphic type lowering feature. Off by default. +ENUM_LOWERINGOPT(PolymorphicTypeImpl, unsigned, 1, 0) + +/// If true, lower to High level FIR before lowering to FIR. +/// Off by default until fully ready. +ENUM_LOWERINGOPT(LowerToHighLevelFIR, unsigned, 1, 0) + +#undef LOWERINGOPT +#undef ENUM_LOWERINGOPT diff --git a/flang/include/flang/Lower/LoweringOptions.h b/flang/include/flang/Lower/LoweringOptions.h index d882ff0fb233..dd297e41bded 100644 --- a/flang/include/flang/Lower/LoweringOptions.h +++ b/flang/include/flang/Lower/LoweringOptions.h @@ -17,39 +17,31 @@ namespace Fortran::lower { -class LoweringOptions { - /// If true, lower transpose without a runtime call. - unsigned optimizeTranspose : 1; - - /// If true, enable polymorphic type lowering feature. Off by default. - unsigned polymorphicTypeImpl : 1; +class LoweringOptionsBase { +public: +#define LOWERINGOPT(Name, Bits, Default) unsigned Name : Bits; +#define ENUM_LOWERINGOPT(Name, Type, Bits, Default) +#include "flang/Lower/LoweringOptions.def" + +protected: +#define LOWERINGOPT(Name, Bits, Default) +#define ENUM_LOWERINGOPT(Name, Type, Bits, Default) unsigned Name : Bits; +#include "flang/Lower/LoweringOptions.def" +}; - /// If true, lower to High level FIR before lowering to FIR. - /// Off by default until fully ready. - unsigned lowerToHighLevelFIR : 1; +class LoweringOptions : public LoweringOptionsBase { public: - LoweringOptions() - : optimizeTranspose(true), polymorphicTypeImpl(false), - lowerToHighLevelFIR(false) {} - - bool getOptimizeTranspose() const { return optimizeTranspose; } - LoweringOptions &setOptimizeTranspose(bool v) { - optimizeTranspose = v; - return *this; +#define LOWERINGOPT(Name, Bits, Default) +#define ENUM_LOWERINGOPT(Name, Type, Bits, Default) \ + Type get##Name() const { return static_cast<Type>(Name); } \ + LoweringOptions &set##Name(Type Value) { \ + Name = static_cast<unsigned>(Value); \ + return *this; \ } +#include "flang/Lower/LoweringOptions.def" - bool isPolymorphicTypeImplEnabled() const { return polymorphicTypeImpl; } - LoweringOptions &setPolymorphicTypeImpl(bool v) { - polymorphicTypeImpl = v; - return *this; - } - - bool getLowerToHighLevelFIR() const { return lowerToHighLevelFIR; } - LoweringOptions &setLowerToHighLevelFIR(bool v) { - lowerToHighLevelFIR = v; - return *this; - } + LoweringOptions(); }; } // namespace Fortran::lower diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt index cfc2e28aee34..183bf6478e75 100644 --- a/flang/lib/Lower/CMakeLists.txt +++ b/flang/lib/Lower/CMakeLists.txt @@ -17,6 +17,7 @@ add_flang_library(FortranLower IntrinsicCall.cpp IO.cpp IterationSpace.cpp + LoweringOptions.cpp Mangler.cpp OpenACC.cpp OpenMP.cpp diff --git a/flang/lib/Lower/CallInterface.cpp b/flang/lib/Lower/CallInterface.cpp index 190c5619dfac..20258f37a812 100644 --- a/flang/lib/Lower/CallInterface.cpp +++ b/flang/lib/Lower/CallInterface.cpp @@ -829,7 +829,7 @@ private: if (cat == Fortran::common::TypeCategory::Derived) { // TODO is kept under experimental flag until feature is complete. if (dynamicType.IsPolymorphic() && - !getConverter().getLoweringOptions().isPolymorphicTypeImplEnabled()) + !getConverter().getLoweringOptions().getPolymorphicTypeImpl()) TODO(interface.converter.getCurrentLocation(), "support for polymorphic types"); diff --git a/flang/lib/Lower/ConvertType.cpp b/flang/lib/Lower/ConvertType.cpp index 1d838df2022a..e9a2e339e787 100644 --- a/flang/lib/Lower/ConvertType.cpp +++ b/flang/lib/Lower/ConvertType.cpp @@ -234,8 +234,7 @@ struct TypeBuilder { translateLenParameters(params, tySpec->category(), ultimate); ty = genFIRType(context, tySpec->category(), kind, params); } else if (type->IsPolymorphic() && - !converter.getLoweringOptions() - .isPolymorphicTypeImplEnabled()) { + !converter.getLoweringOptions().getPolymorphicTypeImpl()) { // TODO is kept under experimental flag until feature is complete. TODO(loc, "support for polymorphic types"); } else if (type->IsUnlimitedPolymorphic()) { diff --git a/flang/lib/Lower/LoweringOptions.cpp b/flang/lib/Lower/LoweringOptions.cpp new file mode 100644 index 000000000000..22247faa4cab --- /dev/null +++ b/flang/lib/Lower/LoweringOptions.cpp @@ -0,0 +1,23 @@ +//===--- LoweringOptions.cpp ----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/ +// +//===----------------------------------------------------------------------===// + +#include "flang/Lower/LoweringOptions.h" + +namespace Fortran::lower { + +LoweringOptions::LoweringOptions() { +#define LOWERINGOPT(Name, Bits, Default) Name = Default; +#define ENUM_LOWERINGOPT(Name, Type, Bits, Default) set##Name(Default); +#include "flang/Lower/LoweringOptions.def" +} + +} // namespace Fortran::lower diff --git a/flang/unittests/Frontend/CMakeLists.txt b/flang/unittests/Frontend/CMakeLists.txt index 739412c7888c..0a05b3ffd743 100644 --- a/flang/unittests/Frontend/CMakeLists.txt +++ b/flang/unittests/Frontend/CMakeLists.txt @@ -12,6 +12,7 @@ target_link_libraries(FlangFrontendTests clangBasic flangFrontend flangFrontendTool + FortranLower FortranParser FortranSemantics FortranCommon |