Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/flang
diff options
context:
space:
mode:
authorSlava Zakharin <szakharin@nvidia.com>2022-11-02 01:12:43 +0300
committerSlava Zakharin <szakharin@nvidia.com>2022-11-03 07:10:22 +0300
commit8cdee2eadabfaada866a69ed7d0eda96b9567465 (patch)
treedc61dd6c66d1d74e219a160862a4b4ed5f9043e1 /flang
parent5adb090795914a4122492117f3af8dacaf69301f (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.def35
-rw-r--r--flang/include/flang/Lower/LoweringOptions.h48
-rw-r--r--flang/lib/Lower/CMakeLists.txt1
-rw-r--r--flang/lib/Lower/CallInterface.cpp2
-rw-r--r--flang/lib/Lower/ConvertType.cpp3
-rw-r--r--flang/lib/Lower/LoweringOptions.cpp23
-rw-r--r--flang/unittests/Frontend/CMakeLists.txt1
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