1 | //===- QuantDialectBytecode.cpp - Quant Bytecode Implementation |
---|---|
2 | //------------===// |
3 | // |
4 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
5 | // See https://llvm.org/LICENSE.txt for license information. |
6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | // |
8 | //===----------------------------------------------------------------------===// |
9 | |
10 | #include "QuantDialectBytecode.h" |
11 | #include "mlir/Bytecode/BytecodeImplementation.h" |
12 | #include "mlir/Dialect/Quant/QuantOps.h" |
13 | #include "mlir/Dialect/Quant/QuantTypes.h" |
14 | #include "mlir/IR/Diagnostics.h" |
15 | #include "mlir/Support/LogicalResult.h" |
16 | #include "llvm/ADT/APFloat.h" |
17 | #include "llvm/ADT/SmallVector.h" |
18 | #include "llvm/ADT/TypeSwitch.h" |
19 | |
20 | using namespace mlir; |
21 | using namespace mlir::quant; |
22 | |
23 | namespace { |
24 | |
25 | static LogicalResult readDoubleAPFloat(DialectBytecodeReader &reader, |
26 | double &val) { |
27 | auto valOr = |
28 | reader.readAPFloatWithKnownSemantics(semantics: llvm::APFloat::IEEEdouble()); |
29 | if (failed(result: valOr)) |
30 | return failure(); |
31 | val = valOr->convertToDouble(); |
32 | return success(); |
33 | } |
34 | |
35 | #include "mlir/Dialect/Quant/QuantDialectBytecode.cpp.inc" |
36 | |
37 | /// This class implements the bytecode interface for the Quant dialect. |
38 | struct QuantDialectBytecodeInterface : public BytecodeDialectInterface { |
39 | QuantDialectBytecodeInterface(Dialect *dialect) |
40 | : BytecodeDialectInterface(dialect) {} |
41 | |
42 | //===--------------------------------------------------------------------===// |
43 | // Attributes |
44 | |
45 | Attribute readAttribute(DialectBytecodeReader &reader) const override { |
46 | return ::readAttribute(getContext(), reader); |
47 | } |
48 | |
49 | LogicalResult writeAttribute(Attribute attr, |
50 | DialectBytecodeWriter &writer) const override { |
51 | return ::writeAttribute(attr, writer); |
52 | } |
53 | |
54 | //===--------------------------------------------------------------------===// |
55 | // Types |
56 | |
57 | Type readType(DialectBytecodeReader &reader) const override { |
58 | return ::readType(getContext(), reader); |
59 | } |
60 | |
61 | LogicalResult writeType(Type type, |
62 | DialectBytecodeWriter &writer) const override { |
63 | return ::writeType(type, writer); |
64 | } |
65 | }; |
66 | } // namespace |
67 | |
68 | void quant::detail::addBytecodeInterface(QuantizationDialect *dialect) { |
69 | dialect->addInterfaces<QuantDialectBytecodeInterface>(); |
70 | } |
71 |