xref: /llvm-project/mlir/lib/Dialect/Quant/IR/QuantDialectBytecode.cpp (revision 852b6486246141e44cc9f126f542a2ae0d73b3d6)
17732c97fSJacques Pienaar //===- QuantDialectBytecode.cpp - Quant Bytecode Implementation
27732c97fSJacques Pienaar //------------===//
37732c97fSJacques Pienaar //
47732c97fSJacques Pienaar // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
57732c97fSJacques Pienaar // See https://llvm.org/LICENSE.txt for license information.
67732c97fSJacques Pienaar // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
77732c97fSJacques Pienaar //
87732c97fSJacques Pienaar //===----------------------------------------------------------------------===//
97732c97fSJacques Pienaar 
107732c97fSJacques Pienaar #include "QuantDialectBytecode.h"
117732c97fSJacques Pienaar #include "mlir/Bytecode/BytecodeImplementation.h"
12*852b6486SRafael Ubal #include "mlir/Dialect/Quant/IR/Quant.h"
13*852b6486SRafael Ubal #include "mlir/Dialect/Quant/IR/QuantTypes.h"
147732c97fSJacques Pienaar #include "mlir/IR/Diagnostics.h"
157732c97fSJacques Pienaar #include "llvm/ADT/APFloat.h"
167732c97fSJacques Pienaar #include "llvm/ADT/SmallVector.h"
177732c97fSJacques Pienaar #include "llvm/ADT/TypeSwitch.h"
187732c97fSJacques Pienaar 
197732c97fSJacques Pienaar using namespace mlir;
207732c97fSJacques Pienaar using namespace mlir::quant;
217732c97fSJacques Pienaar 
227732c97fSJacques Pienaar namespace {
237732c97fSJacques Pienaar 
24f007bcbcSJacques Pienaar static LogicalResult readDoubleAPFloat(DialectBytecodeReader &reader,
25f007bcbcSJacques Pienaar                                        double &val) {
26f007bcbcSJacques Pienaar   auto valOr =
27f007bcbcSJacques Pienaar       reader.readAPFloatWithKnownSemantics(llvm::APFloat::IEEEdouble());
28f007bcbcSJacques Pienaar   if (failed(valOr))
29f007bcbcSJacques Pienaar     return failure();
30f007bcbcSJacques Pienaar   val = valOr->convertToDouble();
31f007bcbcSJacques Pienaar   return success();
32f007bcbcSJacques Pienaar }
337732c97fSJacques Pienaar 
34*852b6486SRafael Ubal #include "mlir/Dialect/Quant/IR/QuantDialectBytecode.cpp.inc"
357732c97fSJacques Pienaar 
367732c97fSJacques Pienaar /// This class implements the bytecode interface for the Quant dialect.
377732c97fSJacques Pienaar struct QuantDialectBytecodeInterface : public BytecodeDialectInterface {
387732c97fSJacques Pienaar   QuantDialectBytecodeInterface(Dialect *dialect)
397732c97fSJacques Pienaar       : BytecodeDialectInterface(dialect) {}
407732c97fSJacques Pienaar 
417732c97fSJacques Pienaar   //===--------------------------------------------------------------------===//
42f007bcbcSJacques Pienaar   // Attributes
43f007bcbcSJacques Pienaar 
44f007bcbcSJacques Pienaar   Attribute readAttribute(DialectBytecodeReader &reader) const override {
45f007bcbcSJacques Pienaar     return ::readAttribute(getContext(), reader);
46f007bcbcSJacques Pienaar   }
47f007bcbcSJacques Pienaar 
48f007bcbcSJacques Pienaar   LogicalResult writeAttribute(Attribute attr,
49f007bcbcSJacques Pienaar                                DialectBytecodeWriter &writer) const override {
50f007bcbcSJacques Pienaar     return ::writeAttribute(attr, writer);
51f007bcbcSJacques Pienaar   }
52f007bcbcSJacques Pienaar 
53f007bcbcSJacques Pienaar   //===--------------------------------------------------------------------===//
547732c97fSJacques Pienaar   // Types
557732c97fSJacques Pienaar 
56f007bcbcSJacques Pienaar   Type readType(DialectBytecodeReader &reader) const override {
57f007bcbcSJacques Pienaar     return ::readType(getContext(), reader);
58f007bcbcSJacques Pienaar   }
59f007bcbcSJacques Pienaar 
607732c97fSJacques Pienaar   LogicalResult writeType(Type type,
61f007bcbcSJacques Pienaar                           DialectBytecodeWriter &writer) const override {
62f007bcbcSJacques Pienaar     return ::writeType(type, writer);
63f007bcbcSJacques Pienaar   }
647732c97fSJacques Pienaar };
657732c97fSJacques Pienaar } // namespace
667732c97fSJacques Pienaar 
67*852b6486SRafael Ubal void quant::detail::addBytecodeInterface(QuantDialect *dialect) {
687732c97fSJacques Pienaar   dialect->addInterfaces<QuantDialectBytecodeInterface>();
697732c97fSJacques Pienaar }
70