[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