//===- FakeQuantSupport.cpp - Support utilities for FakeQuant ops ---------===// // // 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/IR/QuantTypes.h" #include "mlir/Dialect/Quant/Utils/FakeQuantSupport.h" usingnamespacemlir; usingnamespacemlir::quant; static bool getDefaultStorageParams(unsigned numBits, bool narrowRange, bool isSigned, MLIRContext *ctx, Type &storageType, int64_t &qmin, int64_t &qmax) { … } // This is a specific implementation of nudging: // If 0.0 < rmin < rmax or rmin < rmax < 0.0, the range will be shifted // to include 0.0, but the range width size (rmax-rmin) isn't changed. The zero // point is derived from the shifted range, and the scale isn't changed. As // a consequence some values, which are supposed in the original [rmin, rmax] // range will be outside the shifted range and be clamped during quantization. // TODO: we should nudge the scale as well, but that requires the // fake quant op used in the training to use the nudged scale as well. static void getNudgedScaleAndZeroPoint(int64_t qmin, int64_t qmax, double rmin, double rmax, double &scale, int64_t &nudgedZeroPoint) { … } UniformQuantizedType mlir::quant::fakeQuantAttrsToType(Location loc, unsigned numBits, double rmin, double rmax, bool narrowRange, Type expressedType, bool isSigned) { … } UniformQuantizedPerAxisType mlir::quant::fakeQuantAttrsToType( Location loc, unsigned numBits, int32_t quantizedDimension, ArrayRef<double> rmins, ArrayRef<double> rmaxs, bool narrowRange, Type expressedType, bool isSigned) { … }