| // Copyright 2019 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "third_party/mlir_edge/iree/compiler/IR/Dialect.h" |
| |
| #include "third_party/llvm/llvm/include/llvm/Support/SourceMgr.h" |
| #include "third_party/mlir_edge/iree/compiler/IR/ConfigOps.h" |
| #include "third_party/mlir_edge/iree/compiler/IR/Ops.h" |
| #include "third_party/mlir_edge/iree/compiler/IR/StructureOps.h" |
| #include "third_party/mlir_edge/iree/compiler/IR/Types.h" |
| |
| namespace mlir { |
| namespace iree_compiler { |
| |
| static DialectRegistration<IREEDialect> iree_dialect; |
| |
| IREEDialect::IREEDialect(MLIRContext *context) |
| : Dialect(getDialectNamespace(), context) { |
| #define IREE_ADD_TYPE(NAME, KIND, TYPE) addTypes<TYPE>(); |
| IREE_TYPE_TABLE(IREE_ADD_TYPE); |
| |
| #define GET_OP_LIST |
| addOperations< |
| #include "third_party/mlir_edge/iree/compiler/IR/Ops.cpp.inc" |
| >(); |
| #define GET_OP_LIST |
| addOperations< |
| #include "third_party/mlir_edge/iree/compiler/IR/ConfigOps.cpp.inc" |
| >(); |
| #define GET_OP_LIST |
| addOperations< |
| #include "third_party/mlir_edge/iree/compiler/IR/StructureOps.cpp.inc" |
| >(); |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // Type Parsing |
| //===----------------------------------------------------------------------===// |
| |
| #define IREE_TYPE_PARSER(NAME, KIND, TYPE) \ |
| static Type parse##TYPE(IREEDialect const &dialect, StringRef spec, \ |
| Location loc) { \ |
| spec.consume_front(NAME); \ |
| return TYPE::get(dialect.getContext()); \ |
| } |
| IREE_TYPE_TABLE(IREE_TYPE_PARSER); |
| |
| #define IREE_PARSE_TYPE(NAME, KIND, TYPE) \ |
| if (spec.startswith(NAME)) { \ |
| return parse##TYPE(*this, spec, loc); \ |
| } |
| Type IREEDialect::parseType(StringRef spec, Location loc) const { |
| IREE_TYPE_TABLE(IREE_PARSE_TYPE); |
| emitError(loc, "unknown IREE type: ") << spec; |
| return Type(); |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // Type Printing |
| //===----------------------------------------------------------------------===// |
| |
| #define IREE_TYPE_PRINTER(NAME, KIND, TYPE) \ |
| static void print##TYPE(TYPE type, llvm::raw_ostream &os) { os << NAME; } |
| IREE_TYPE_TABLE(IREE_TYPE_PRINTER); |
| |
| #define IREE_PRINT_TYPE(NAME, KIND, TYPE) \ |
| case KIND: \ |
| print##TYPE(type.cast<TYPE>(), os); \ |
| return; |
| void IREEDialect::printType(Type type, llvm::raw_ostream &os) const { |
| switch (type.getKind()) { |
| IREE_TYPE_TABLE(IREE_PRINT_TYPE); |
| default: |
| llvm_unreachable("unhandled IREE type"); |
| } |
| } |
| |
| } // namespace iree_compiler |
| } // namespace mlir |