//===- TestDialect.h - MLIR Dialect for testing -----------------*- 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 // //===----------------------------------------------------------------------===// // // This file defines a fake 'test' dialect that can be used for testing things // that do not have a respective counterpart in the main source directories. // //===----------------------------------------------------------------------===// #ifndef MLIR_TESTDIALECT_H #define MLIR_TESTDIALECT_H #include "TestAttributes.h" #include "TestInterfaces.h" #include "TestTypes.h" #include "mlir/Bytecode/BytecodeImplementation.h" #include "mlir/Dialect/DLTI/DLTI.h" #include "mlir/Dialect/DLTI/Traits.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Traits.h" #include "mlir/IR/AsmState.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/Dialect.h" #include "mlir/IR/DialectResourceBlobManager.h" #include "mlir/IR/ExtensibleDialect.h" #include "mlir/IR/OpDefinition.h" #include "mlir/IR/OpImplementation.h" #include "mlir/IR/RegionKindInterface.h" #include "mlir/IR/SymbolTable.h" #include "mlir/Interfaces/CallInterfaces.h" #include "mlir/Interfaces/ControlFlowInterfaces.h" #include "mlir/Interfaces/DerivedAttributeOpInterface.h" #include "mlir/Interfaces/InferIntRangeInterface.h" #include "mlir/Interfaces/InferTypeOpInterface.h" #include "mlir/Interfaces/LoopLikeInterface.h" #include "mlir/Interfaces/SideEffectInterfaces.h" #include "mlir/Interfaces/ValueBoundsOpInterface.h" #include "mlir/Interfaces/ViewLikeInterface.h" #include "llvm/ADT/SetVector.h" #include namespace mlir { class RewritePatternSet; } // end namespace mlir //===----------------------------------------------------------------------===// // TestDialect //===----------------------------------------------------------------------===// #include "TestOpsDialect.h.inc" namespace test { //===----------------------------------------------------------------------===// // TestDialect version utilities //===----------------------------------------------------------------------===// struct TestDialectVersion : public mlir::DialectVersion { TestDialectVersion() = default; TestDialectVersion(uint32_t majorVersion, uint32_t minorVersion) : major_(majorVersion), minor_(minorVersion){}; // We cannot use 'major' and 'minor' here because these identifiers may // already be used by on many POSIX systems including Linux and // FreeBSD. uint32_t major_ = 2; uint32_t minor_ = 0; }; } // namespace test namespace test { // Op deliberately defined in C++ code rather than ODS to test that C++ // Ops can still use the old `fold` method. class ManualCppOpWithFold : public mlir::Op { public: using Op::Op; static llvm::StringRef getOperationName() { return "test.manual_cpp_op_with_fold"; } static llvm::ArrayRef getAttributeNames() { return {}; } mlir::OpFoldResult fold(llvm::ArrayRef attributes); }; void registerTestDialect(::mlir::DialectRegistry ®istry); void populateTestReductionPatterns(::mlir::RewritePatternSet &patterns); void testSideEffectOpGetEffect( mlir::Operation *op, llvm::SmallVectorImpl< mlir::SideEffects::EffectInstance> &effects); } // namespace test #endif // MLIR_TESTDIALECT_H