[flang-commits] [flang] 8cdee2e - [NFC][flang] Lowering options clean-up.
Slava Zakharin via flang-commits
flang-commits at lists.llvm.org
Wed Nov 2 21:10:34 PDT 2022
Author: Slava Zakharin
Date: 2022-11-02T21:10:22-07:00
New Revision: 8cdee2eadabfaada866a69ed7d0eda96b9567465
URL: https://github.com/llvm/llvm-project/commit/8cdee2eadabfaada866a69ed7d0eda96b9567465
DIFF: https://github.com/llvm/llvm-project/commit/8cdee2eadabfaada866a69ed7d0eda96b9567465.diff
LOG: [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
Added:
flang/include/flang/Lower/LoweringOptions.def
flang/lib/Lower/LoweringOptions.cpp
Modified:
flang/include/flang/Lower/LoweringOptions.h
flang/lib/Lower/CMakeLists.txt
flang/lib/Lower/CallInterface.cpp
flang/lib/Lower/ConvertType.cpp
flang/unittests/Frontend/CMakeLists.txt
Removed:
################################################################################
diff --git a/flang/include/flang/Lower/LoweringOptions.def b/flang/include/flang/Lower/LoweringOptions.def
new file mode 100644
index 0000000000000..2a89308467fd9
--- /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 d882ff0fb233a..dd297e41bded2 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 cfc2e28aee344..183bf6478e75c 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 190c5619dface..20258f37a8126 100644
--- a/flang/lib/Lower/CallInterface.cpp
+++ b/flang/lib/Lower/CallInterface.cpp
@@ -829,7 +829,7 @@ class Fortran::lower::CallInterfaceImpl {
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 1d838df2022a9..e9a2e339e7876 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 0000000000000..22247faa4cab9
--- /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 739412c7888c4..0a05b3ffd743e 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
More information about the flang-commits
mailing list