//===- TypeParser.h - Quantization Type Parser ------------------*- 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 // //===----------------------------------------------------------------------===// #include "mlir/Dialect/Quant/QuantOps.h" #include "mlir/Dialect/Quant/QuantTypes.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/DialectImplementation.h" #include "mlir/IR/Location.h" #include "mlir/IR/Types.h" #include "llvm/ADT/APFloat.h" #include "llvm/Support/Format.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" usingnamespacemlir; usingnamespacequant; static IntegerType parseStorageType(DialectAsmParser &parser, bool &isSigned) { … } static ParseResult parseStorageRange(DialectAsmParser &parser, IntegerType storageType, bool isSigned, int64_t &storageTypeMin, int64_t &storageTypeMax) { … } static FloatType parseExpressedTypeAndRange(DialectAsmParser &parser, double &min, double &max) { … } /// Parses an AnyQuantizedType. /// /// any ::= `any<` storage-spec (expressed-type-spec)?`>` /// storage-spec ::= storage-type (`<` storage-range `>`)? /// storage-range ::= integer-literal `:` integer-literal /// storage-type ::= (`i` | `u`) integer-literal /// expressed-type-spec ::= `:` `f` integer-literal static Type parseAnyType(DialectAsmParser &parser) { … } static ParseResult parseQuantParams(DialectAsmParser &parser, double &scale, int64_t &zeroPoint) { … } /// Parses a UniformQuantizedType. /// /// uniform_type ::= uniform_per_layer /// | uniform_per_axis /// uniform_per_layer ::= `uniform<` storage-spec expressed-type-spec /// `,` scale-zero `>` /// uniform_per_axis ::= `uniform<` storage-spec expressed-type-spec /// axis-spec `,` scale-zero-list `>` /// storage-spec ::= storage-type (`<` storage-range `>`)? /// storage-range ::= integer-literal `:` integer-literal /// storage-type ::= (`i` | `u`) integer-literal /// expressed-type-spec ::= `:` `f` integer-literal /// axis-spec ::= `:` integer-literal /// scale-zero ::= float-literal `:` integer-literal /// scale-zero-list ::= `{` scale-zero (`,` scale-zero)* `}` static Type parseUniformType(DialectAsmParser &parser) { … } /// Parses an CalibratedQuantizedType. /// /// calibrated ::= `calibrated<` expressed-spec `>` /// expressed-spec ::= expressed-type `<` calibrated-range `>` /// expressed-type ::= `f` integer-literal /// calibrated-range ::= float-literal `:` float-literal static Type parseCalibratedType(DialectAsmParser &parser) { … } /// Parse a type registered to this dialect. Type QuantizationDialect::parseType(DialectAsmParser &parser) const { … } static void printStorageType(QuantizedType type, DialectAsmPrinter &out) { … } static void printQuantParams(double scale, int64_t zeroPoint, DialectAsmPrinter &out) { … } /// Helper that prints a AnyQuantizedType. static void printAnyQuantizedType(AnyQuantizedType type, DialectAsmPrinter &out) { … } /// Helper that prints a UniformQuantizedType. static void printUniformQuantizedType(UniformQuantizedType type, DialectAsmPrinter &out) { … } /// Helper that prints a UniformQuantizedPerAxisType. static void printUniformQuantizedPerAxisType(UniformQuantizedPerAxisType type, DialectAsmPrinter &out) { … } /// Helper that prints a CalibratedQuantizedType. static void printCalibratedQuantizedType(CalibratedQuantizedType type, DialectAsmPrinter &out) { … } /// Print a type registered to this dialect. void QuantizationDialect::printType(Type type, DialectAsmPrinter &os) const { … }