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