diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -10,7 +10,6 @@ #include "flang/Optimizer/Dialect/FIRAttr.h" #include "flang/Optimizer/Dialect/FIROpsSupport.h" #include "flang/Optimizer/Dialect/FIRType.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/IR/Diagnostics.h" #include "mlir/IR/Function.h" @@ -18,6 +17,7 @@ #include "mlir/IR/StandardTypes.h" #include "mlir/IR/SymbolTable.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/ADT/TypeSwitch.h" using namespace fir; @@ -351,7 +351,7 @@ /// Get the element type of a reference like type; otherwise null static mlir::Type elementTypeOf(mlir::Type ref) { - return mlir::TypeSwitch(ref) + return llvm::TypeSwitch(ref) .Case( [](auto type) { return type.getEleTy(); }) .Default([](mlir::Type) { return mlir::Type{}; }); diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp --- a/flang/lib/Optimizer/Dialect/FIRType.cpp +++ b/flang/lib/Optimizer/Dialect/FIRType.cpp @@ -8,7 +8,6 @@ #include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/Dialect/FIRDialect.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Diagnostics.h" #include "mlir/IR/Dialect.h" @@ -17,6 +16,7 @@ #include "mlir/Parser.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringSet.h" +#include "llvm/ADT/TypeSwitch.h" using namespace fir; @@ -847,7 +847,7 @@ } mlir::Type dyn_cast_ptrEleTy(mlir::Type t) { - return mlir::TypeSwitch(t) + return llvm::TypeSwitch(t) .Case( [](auto p) { return p.getEleTy(); }) .Default([](mlir::Type) { return mlir::Type{}; }); diff --git a/mlir/include/mlir/ADT/TypeSwitch.h b/llvm/include/llvm/ADT/TypeSwitch.h rename from mlir/include/mlir/ADT/TypeSwitch.h rename to llvm/include/llvm/ADT/TypeSwitch.h --- a/mlir/include/mlir/ADT/TypeSwitch.h +++ b/llvm/include/llvm/ADT/TypeSwitch.h @@ -11,14 +11,14 @@ // //===-----------------------------------------------------------------------===/ -#ifndef MLIR_SUPPORT_TYPESWITCH_H -#define MLIR_SUPPORT_TYPESWITCH_H +#ifndef LLVM_ADT_TYPESWITCH_H +#define LLVM_ADT_TYPESWITCH_H -#include "mlir/Support/LLVM.h" -#include "mlir/Support/STLExtras.h" #include "llvm/ADT/Optional.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Support/Casting.h" -namespace mlir { +namespace llvm { namespace detail { template class TypeSwitchBase { @@ -46,7 +46,7 @@ /// Note: This inference rules for this overload are very simple: strip /// pointers and references. template DerivedT &Case(CallableT &&caseFn) { - using Traits = llvm::function_traits>; + using Traits = function_traits>; using CaseT = std::remove_cv_t>>>; @@ -64,22 +64,20 @@ /// Attempt to dyn_cast the given `value` to `CastT`. This overload is /// selected if `value` already has a suitable dyn_cast method. template - static auto - castValue(ValueT value, - typename std::enable_if_t< - llvm::is_detected::value> * = - nullptr) { + static auto castValue( + ValueT value, + typename std::enable_if_t< + is_detected::value> * = nullptr) { return value.template dyn_cast(); } /// Attempt to dyn_cast the given `value` to `CastT`. This overload is /// selected if llvm::dyn_cast should be used. template - static auto - castValue(ValueT value, - typename std::enable_if_t< - !llvm::is_detected::value> * = - nullptr) { + static auto castValue( + ValueT value, + typename std::enable_if_t< + !is_detected::value> * = nullptr) { return dyn_cast(value); } @@ -173,6 +171,6 @@ /// A flag detailing if we have already found a match. bool foundMatch = false; }; -} // end namespace mlir +} // end namespace llvm -#endif // MLIR_SUPPORT_TYPESWITCH_H +#endif // LLVM_ADT_TYPESWITCH_H diff --git a/llvm/unittests/ADT/CMakeLists.txt b/llvm/unittests/ADT/CMakeLists.txt --- a/llvm/unittests/ADT/CMakeLists.txt +++ b/llvm/unittests/ADT/CMakeLists.txt @@ -73,6 +73,7 @@ TinyPtrVectorTest.cpp TripleTest.cpp TwineTest.cpp + TypeSwitchTest.cpp TypeTraitsTest.cpp WaymarkingTest.cpp ) diff --git a/mlir/unittests/ADT/TypeSwitchTest.cpp b/llvm/unittests/ADT/TypeSwitchTest.cpp rename from mlir/unittests/ADT/TypeSwitchTest.cpp rename to llvm/unittests/ADT/TypeSwitchTest.cpp --- a/mlir/unittests/ADT/TypeSwitchTest.cpp +++ b/llvm/unittests/ADT/TypeSwitchTest.cpp @@ -6,10 +6,10 @@ // //===----------------------------------------------------------------------===// -#include "mlir/ADT/TypeSwitch.h" +#include "llvm/ADT/TypeSwitch.h" #include "gtest/gtest.h" -using namespace mlir; +using namespace llvm; namespace { /// Utility classes to setup casting functionality. @@ -28,7 +28,7 @@ struct DerivedE : public DerivedImpl {}; } // end anonymous namespace -TEST(StringSwitchTest, CaseResult) { +TEST(TypeSwitchTest, CaseResult) { auto translate = [](auto value) { return TypeSwitch(&value) .Case([](DerivedA *) { return 0; }) @@ -42,7 +42,7 @@ EXPECT_EQ(-1, translate(DerivedD())); } -TEST(StringSwitchTest, CasesResult) { +TEST(TypeSwitchTest, CasesResult) { auto translate = [](auto value) { return TypeSwitch(&value) .Case([](auto *) { return 0; }) @@ -56,7 +56,7 @@ EXPECT_EQ(-1, translate(DerivedE())); } -TEST(StringSwitchTest, CaseVoid) { +TEST(TypeSwitchTest, CaseVoid) { auto translate = [](auto value) { int result = -2; TypeSwitch(&value) @@ -72,7 +72,7 @@ EXPECT_EQ(-1, translate(DerivedD())); } -TEST(StringSwitchTest, CasesVoid) { +TEST(TypeSwitchTest, CasesVoid) { auto translate = [](auto value) { int result = -1; TypeSwitch(&value) diff --git a/mlir/examples/toy/Ch1/parser/AST.cpp b/mlir/examples/toy/Ch1/parser/AST.cpp --- a/mlir/examples/toy/Ch1/parser/AST.cpp +++ b/mlir/examples/toy/Ch1/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch2/parser/AST.cpp b/mlir/examples/toy/Ch2/parser/AST.cpp --- a/mlir/examples/toy/Ch2/parser/AST.cpp +++ b/mlir/examples/toy/Ch2/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch3/parser/AST.cpp b/mlir/examples/toy/Ch3/parser/AST.cpp --- a/mlir/examples/toy/Ch3/parser/AST.cpp +++ b/mlir/examples/toy/Ch3/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch4/parser/AST.cpp b/mlir/examples/toy/Ch4/parser/AST.cpp --- a/mlir/examples/toy/Ch4/parser/AST.cpp +++ b/mlir/examples/toy/Ch4/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch5/parser/AST.cpp b/mlir/examples/toy/Ch5/parser/AST.cpp --- a/mlir/examples/toy/Ch5/parser/AST.cpp +++ b/mlir/examples/toy/Ch5/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch6/parser/AST.cpp b/mlir/examples/toy/Ch6/parser/AST.cpp --- a/mlir/examples/toy/Ch6/parser/AST.cpp +++ b/mlir/examples/toy/Ch6/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -76,7 +76,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case( [&](auto *node) { this->dump(node); }) diff --git a/mlir/examples/toy/Ch7/parser/AST.cpp b/mlir/examples/toy/Ch7/parser/AST.cpp --- a/mlir/examples/toy/Ch7/parser/AST.cpp +++ b/mlir/examples/toy/Ch7/parser/AST.cpp @@ -12,9 +12,9 @@ #include "toy/AST.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/STLExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/raw_ostream.h" using namespace toy; @@ -78,7 +78,7 @@ /// Dispatch to a generic expressions to the appropriate subclass using RTTI void ASTDumper::dump(ExprAST *expr) { - mlir::TypeSwitch(expr) + llvm::TypeSwitch(expr) .Case([&](auto *node) { this->dump(node); }) diff --git a/mlir/include/mlir/Support/LLVM.h b/mlir/include/mlir/Support/LLVM.h --- a/mlir/include/mlir/Support/LLVM.h +++ b/mlir/include/mlir/Support/LLVM.h @@ -48,6 +48,7 @@ class DenseMap; template class function_ref; template class iterator_range; +template class TypeSwitch; // Other common classes. class raw_ostream; @@ -88,6 +89,8 @@ using llvm::StringRef; using llvm::TinyPtrVector; using llvm::Twine; +template +using TypeSwitch = llvm::TypeSwitch; // Other common classes. using llvm::APFloat; diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -12,7 +12,6 @@ //===----------------------------------------------------------------------===// #include "../PassDetail.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -27,6 +26,7 @@ #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/Passes.h" #include "mlir/Transforms/Utils.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Type.h" diff --git a/mlir/lib/Dialect/SPIRV/Serialization/Serializer.cpp b/mlir/lib/Dialect/SPIRV/Serialization/Serializer.cpp --- a/mlir/lib/Dialect/SPIRV/Serialization/Serializer.cpp +++ b/mlir/lib/Dialect/SPIRV/Serialization/Serializer.cpp @@ -12,7 +12,6 @@ #include "mlir/Dialect/SPIRV/Serialization.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Dialect/SPIRV/SPIRVAttributes.h" #include "mlir/Dialect/SPIRV/SPIRVBinaryUtils.h" #include "mlir/Dialect/SPIRV/SPIRVDialect.h" @@ -26,6 +25,7 @@ #include "llvm/ADT/Sequence.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/ADT/bit.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" diff --git a/mlir/lib/TableGen/Operator.cpp b/mlir/lib/TableGen/Operator.cpp --- a/mlir/lib/TableGen/Operator.cpp +++ b/mlir/lib/TableGen/Operator.cpp @@ -11,11 +11,11 @@ //===----------------------------------------------------------------------===// #include "mlir/TableGen/Operator.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/TableGen/OpTrait.h" #include "mlir/TableGen/Predicate.h" #include "mlir/TableGen/Type.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/Debug.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/TableGen/Error.h" diff --git a/mlir/lib/TableGen/Successor.cpp b/mlir/lib/TableGen/Successor.cpp --- a/mlir/lib/TableGen/Successor.cpp +++ b/mlir/lib/TableGen/Successor.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/TableGen/Successor.h" -#include "mlir/ADT/TypeSwitch.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/TableGen/Record.h" using namespace mlir; diff --git a/mlir/lib/TableGen/Type.cpp b/mlir/lib/TableGen/Type.cpp --- a/mlir/lib/TableGen/Type.cpp +++ b/mlir/lib/TableGen/Type.cpp @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #include "mlir/TableGen/Type.h" -#include "mlir/ADT/TypeSwitch.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/TableGen/Record.h" using namespace mlir; diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -14,13 +14,13 @@ #include "mlir/Target/LLVMIR/ModuleTranslation.h" #include "DebugTranslation.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/OpenMP/OpenMPDialect.h" #include "mlir/IR/Attributes.h" #include "mlir/IR/Module.h" #include "mlir/IR/StandardTypes.h" #include "mlir/Support/LLVM.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/ADT/SetVector.h" #include "llvm/Frontend/OpenMP/OMPIRBuilder.h" @@ -316,7 +316,7 @@ ompBuilder = std::make_unique(*llvmModule); ompBuilder->initialize(); } - return mlir::TypeSwitch(&opInst) + return llvm::TypeSwitch(&opInst) .Case([&](omp::BarrierOp) { ompBuilder->CreateBarrier(builder.saveIP(), llvm::omp::OMPD_barrier); return success(); diff --git a/mlir/lib/Transforms/Utils/Utils.cpp b/mlir/lib/Transforms/Utils/Utils.cpp --- a/mlir/lib/Transforms/Utils/Utils.cpp +++ b/mlir/lib/Transforms/Utils/Utils.cpp @@ -13,7 +13,6 @@ #include "mlir/Transforms/Utils.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/Dominance.h" @@ -24,6 +23,7 @@ #include "mlir/IR/Module.h" #include "mlir/Support/MathExtras.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/TypeSwitch.h" using namespace mlir; /// Return true if this operation dereferences one or more memref's. diff --git a/mlir/test/lib/Transforms/TestMemRefBoundCheck.cpp b/mlir/test/lib/Transforms/TestMemRefBoundCheck.cpp --- a/mlir/test/lib/Transforms/TestMemRefBoundCheck.cpp +++ b/mlir/test/lib/Transforms/TestMemRefBoundCheck.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Analysis/AffineAnalysis.h" #include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/Utils.h" @@ -19,6 +18,7 @@ #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/IR/Builders.h" #include "mlir/Pass/Pass.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/Debug.h" #define DEBUG_TYPE "memref-bound-check" diff --git a/mlir/tools/mlir-tblgen/OpFormatGen.cpp b/mlir/tools/mlir-tblgen/OpFormatGen.cpp --- a/mlir/tools/mlir-tblgen/OpFormatGen.cpp +++ b/mlir/tools/mlir-tblgen/OpFormatGen.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "OpFormatGen.h" -#include "mlir/ADT/TypeSwitch.h" #include "mlir/Support/LogicalResult.h" #include "mlir/Support/STLExtras.h" #include "mlir/TableGen/Format.h" @@ -20,6 +19,7 @@ #include "llvm/ADT/Sequence.h" #include "llvm/ADT/SmallBitVector.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Signals.h" #include "llvm/TableGen/Error.h" diff --git a/mlir/unittests/ADT/CMakeLists.txt b/mlir/unittests/ADT/CMakeLists.txt deleted file mode 100644 --- a/mlir/unittests/ADT/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_mlir_unittest(MLIRADTTests - TypeSwitchTest.cpp -) - -target_link_libraries(MLIRADTTests PRIVATE MLIRSupport LLVMSupport) diff --git a/mlir/unittests/CMakeLists.txt b/mlir/unittests/CMakeLists.txt --- a/mlir/unittests/CMakeLists.txt +++ b/mlir/unittests/CMakeLists.txt @@ -5,7 +5,6 @@ add_unittest(MLIRUnitTests ${test_dirname} ${ARGN}) endfunction() -add_subdirectory(ADT) add_subdirectory(Dialect) add_subdirectory(IR) add_subdirectory(Pass)