From: Stella Laurenzo Date: Sat, 7 Nov 2020 17:35:49 +0000 (-0800) Subject: Revert "NFC: Fix some post-review nits for the Tosa dialect." X-Git-Tag: llvmorg-13-init~6796 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=330398052d049f90e6cfac80ab8b765b158a3e61;p=platform%2Fupstream%2Fllvm.git Revert "NFC: Fix some post-review nits for the Tosa dialect." * Introduced issue in debug builds. This reverts commit b5fcd06105dec2a7b0e4114d6ad4524fc54498c5. --- diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaInterfaces.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaInterfaces.td index 5dfa1e6..df4aa70 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaInterfaces.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaInterfaces.td @@ -17,7 +17,8 @@ include "mlir/IR/OpBase.td" def TosaOpInterface : OpInterface<"TosaOp"> { let description = [{ - Implemented by ops that correspond to the Tosa specification. + Implements interfaces implemented by ops that correspond to the Tosa + specification. }]; } diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td index 5701e6e..74c60b7 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td @@ -114,9 +114,9 @@ def Tosa_ConvOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$input, "Value":$weight, "Value":$bias, "ArrayAttr":$pad, "ArrayAttr":$stride, "ArrayAttr":$dilation), [{ - buildConvOpWithQuantInfo($_builder, $_state, outputType, - input, weight, bias, - pad, stride, dilation); + ::buildConvOpWithQuantInfo($_builder, $_state, outputType, + input, weight, bias, + pad, stride, dilation); }]>; // Handles tosa.transpose_conv2d which has an outpad and output shape attribute. @@ -125,10 +125,10 @@ def Tosa_TransConvOpQuantInfoBuilder : OpBuilderDAG< "ArrayAttr":$outpad, "ArrayAttr":$stride, "ArrayAttr":$dilation, "ArrayAttr":$outputShape), [{ - buildTransConvOpWithQuantInfo($_builder, $_state, outputType, - input, weight, bias, - outpad, stride, dilation, - outputShape); + ::buildTransConvOpWithQuantInfo($_builder, $_state, outputType, + input, weight, bias, + outpad, stride, dilation, + outputShape); }]>; // The tosa.fully_connected op has its own builder as it does not have @@ -136,8 +136,8 @@ def Tosa_TransConvOpQuantInfoBuilder : OpBuilderDAG< def Tosa_FCOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$input, "Value":$weight, "Value":$bias), [{ - buildFCOpWithQuantInfo($_builder, $_state, outputType, - input, weight, bias); + ::buildFCOpWithQuantInfo($_builder, $_state, outputType, + input, weight, bias); }]>; // The tosa.matmul op is also intended to be generated where a fully_connected @@ -147,8 +147,8 @@ def Tosa_FCOpQuantInfoBuilder : OpBuilderDAG< def Tosa_MatMulOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$a, "Value":$b), [{ - buildMatMulOpWithQuantInfo($_builder, $_state, outputType, - a, b); + ::buildMatMulOpWithQuantInfo($_builder, $_state, outputType, + a, b); }]>; // Both the tosa.avg_pool2d and unary ops use the same @@ -158,8 +158,8 @@ def Tosa_AvgPool2dOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$input, "ArrayAttr":$kernel, "ArrayAttr":$stride, "ArrayAttr":$pad), [{ - buildAvgPool2dOpWithQuantInfo($_builder, $_state, outputType, - input, kernel, stride, pad); + ::buildAvgPool2dOpWithQuantInfo($_builder, $_state, outputType, + input, kernel, stride, pad); }]>; // This builder is called on single-parameter unary operators that have a scale @@ -168,7 +168,7 @@ def Tosa_AvgPool2dOpQuantInfoBuilder : OpBuilderDAG< def Tosa_UnaryOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$input), [{ - buildUnaryOpWithQuantInfo($_builder, $_state, outputType, input); + ::buildUnaryOpWithQuantInfo($_builder, $_state, outputType, input); }]>; // This builder is called on the TOSA pad operator that needs to create its own @@ -177,8 +177,8 @@ def Tosa_UnaryOpQuantInfoBuilder : OpBuilderDAG< def Tosa_PadOpQuantInfoBuilder : OpBuilderDAG< (ins "Type":$outputType, "Value":$input, "Value":$paddings), [{ - buildPadOpWithQuantInfo($_builder, $_state, outputType, - input, paddings); + ::buildPadOpWithQuantInfo($_builder, $_state, outputType, + input, paddings); }]>; //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td index 43e8bfa..e9dc5eb 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td @@ -104,7 +104,7 @@ def Tosa_Conv2DOp : Tosa_Op<"conv2d", [NoSideEffect]> { let builders = [Tosa_ConvOpQuantInfoBuilder]; - let verifier = [{ return verifyConvOp(*this); }]; + let verifier = [{ return ::verifyConvOp(*this); }]; } //===----------------------------------------------------------------------===// @@ -134,7 +134,7 @@ def Tosa_Conv3DOp : Tosa_Op<"conv3d", [NoSideEffect]> { let builders = [Tosa_ConvOpQuantInfoBuilder]; - let verifier = [{ return verifyConvOp(*this); }]; + let verifier = [{ return ::verifyConvOp(*this); }]; } //===----------------------------------------------------------------------===// @@ -165,7 +165,7 @@ def Tosa_DepthwiseConv2DOp : Tosa_Op<"depthwise_conv2d", [NoSideEffect]> { let builders = [Tosa_ConvOpQuantInfoBuilder]; - let verifier = [{ return verifyConvOp(*this); }]; + let verifier = [{ return ::verifyConvOp(*this); }]; } //===----------------------------------------------------------------------===// @@ -191,7 +191,7 @@ def Tosa_FullyConnectedOp : Tosa_Op<"fully_connected", [NoSideEffect]> { let builders = [Tosa_FCOpQuantInfoBuilder]; - let verifier = [{ return verifyConvOp(*this); }]; + let verifier = [{ return ::verifyConvOp(*this); }]; } //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h b/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h index b9032df..7742281 100644 --- a/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/Tosa/Transforms/Passes.h @@ -16,6 +16,7 @@ #include "mlir/Pass/Pass.h" namespace mlir { + namespace tosa { std::unique_ptr createTosaMakeBroadcastablePass(); diff --git a/mlir/include/mlir/Dialect/Tosa/Utils/QuantUtils.h b/mlir/include/mlir/Dialect/Tosa/Utils/QuantUtils.h index 0ebec4e..d4e2016 100644 --- a/mlir/include/mlir/Dialect/Tosa/Utils/QuantUtils.h +++ b/mlir/include/mlir/Dialect/Tosa/Utils/QuantUtils.h @@ -19,8 +19,8 @@ #include "mlir/Dialect/Quant/FakeQuantSupport.h" #include "mlir/Dialect/Quant/UniformSupport.h" -namespace mlir { -namespace tosa { +using namespace mlir; +using namespace mlir::tosa; //===----------------------------------------------------------------------===// // Utililty functions to support quantization handling in Tosa. @@ -65,7 +65,4 @@ TypeAttr buildQTypeAttrFromMinMax(OpBuilder builder, Type inputDType, IntegerAttr quantBits, int filterQuantDim, bool isSigned, BoolAttr narrowRange); -} // namespace tosa -} // namespace mlir - #endif // DIALECT_TOSA_UTILS_QUANT_UTILS_H diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp index daf10b2..9e27cbe 100644 --- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp +++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp @@ -93,8 +93,7 @@ void TosaDialect::initialize() { // TOSA Operator Verifiers. //===----------------------------------------------------------------------===// -template -static LogicalResult verifyConvOp(T op) { +template static LogicalResult verifyConvOp(T op) { // All TOSA conv ops have an input() and weight(). auto inputType = op.input().getType().template dyn_cast(); auto weightType = op.weight().getType().template dyn_cast(); @@ -128,10 +127,10 @@ static LogicalResult verifyConvOp(T op) { /// This builder is called on all convolution operators except TransposeConv, /// which has specialized output shape semantics. The builder also defines the /// bitwidth of the output given the bit width of the input & weight content. -static void buildConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, - Type outputType, Value input, Value weight, - Value bias, ArrayAttr pad, - ArrayAttr stride, ArrayAttr dilation) { +void buildConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input, Value weight, + Value bias, ArrayAttr pad, ArrayAttr stride, + ArrayAttr dilation) { result.addOperands({input, weight, bias}); result.addAttribute("pad", pad); @@ -149,11 +148,11 @@ static void buildConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, } /// Handles tosa.transpose_conv2d which has outpad and output shape attributes. -static void -buildTransConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, - Type outputType, Value input, Value weight, - Value bias, ArrayAttr outpad, ArrayAttr stride, - ArrayAttr dilation, ArrayAttr outputShape) { +void buildTransConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input, Value weight, + Value bias, ArrayAttr outpad, + ArrayAttr stride, ArrayAttr dilation, + ArrayAttr outputShape) { result.addOperands({input, weight, bias}); result.addAttribute("out_pad", outpad); result.addAttribute("stride", stride); @@ -172,9 +171,9 @@ buildTransConvOpWithQuantInfo(OpBuilder &builder, OperationState &result, /// The tosa.fully_connected op has its own builder as it does not have /// strides/dilation/padding. -static void buildFCOpWithQuantInfo(OpBuilder &builder, OperationState &result, - Type outputType, Value input, Value weight, - Value bias) { +void buildFCOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input, Value weight, + Value bias) { result.addOperands({input, weight, bias}); auto quantAttr = ::buildConvOpQuantizationAttr(builder, input, weight); @@ -191,9 +190,8 @@ static void buildFCOpWithQuantInfo(OpBuilder &builder, OperationState &result, /// op must be constructed where the weight is not a constant. In this case, /// the fully_connected op must be expressed using matmul. /// TODO: Add link to the leglization document explaining this. -static void buildMatMulOpWithQuantInfo(OpBuilder &builder, - OperationState &result, Type outputType, - Value a, Value b) { +void buildMatMulOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value a, Value b) { result.addOperands({a, b}); auto quantAttr = ::buildMatMulOpQuantizationAttr(builder, a, b); @@ -229,11 +227,10 @@ static void buildMatMulOpWithQuantInfo(OpBuilder &builder, /// Both the tosa.avg_pool2d and unary ops use the same UnaruOpQuantizationAttr /// but avg_pool operator has its own builder as it has additional parameters /// not part of the unary ops. -static void buildAvgPool2dOpWithQuantInfo(OpBuilder &builder, - OperationState &result, - Type outputType, Value input, - ArrayAttr kernel, ArrayAttr stride, - ArrayAttr pad) { +void buildAvgPool2dOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input, + ArrayAttr kernel, ArrayAttr stride, + ArrayAttr pad) { result.addOperands(input); result.addAttribute("kernel", kernel); result.addAttribute("stride", stride); @@ -247,9 +244,8 @@ static void buildAvgPool2dOpWithQuantInfo(OpBuilder &builder, /// This builder is called on single-parameter unary operators that have scale /// relationship between their input and output, expressed by the /// UnaryOpQuantizationAttr. -static void buildUnaryOpWithQuantInfo(OpBuilder &builder, - OperationState &result, Type outputType, - Value input) { +void buildUnaryOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input) { result.addOperands(input); auto quantAttr = buildUnaryOpQuantizationAttr(builder, input, outputType); if (quantAttr) @@ -260,9 +256,8 @@ static void buildUnaryOpWithQuantInfo(OpBuilder &builder, /// This builder is called on TOSA pad operator that needs to create its own /// OptionalAttr quantization_attr parameter to scale the padding values /// correctly. -static void buildPadOpWithQuantInfo(OpBuilder &builder, OperationState &result, - Type outputType, Value input, - Value paddings) { +void buildPadOpWithQuantInfo(OpBuilder &builder, OperationState &result, + Type outputType, Value input, Value paddings) { result.addOperands({input, paddings}); auto quantAttr = buildPadOpQuantizationAttr(builder, input); if (quantAttr) diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp index ff1be9f..95076eb 100644 --- a/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp @@ -128,6 +128,8 @@ static int reshapeLowerToHigher(PatternRewriter &rewriter, Location loc, } ArrayRef outputRankShape = outputType.getShape(); + ArrayRef higherRankShape = + higherTensorValue.getType().cast().getShape(); ArrayRef lowerRankShape = lowerTensorValue.getType().cast().getShape(); diff --git a/mlir/lib/Dialect/Tosa/Utils/QuantUtils.cpp b/mlir/lib/Dialect/Tosa/Utils/QuantUtils.cpp index af3d2be..16ddd9f 100644 --- a/mlir/lib/Dialect/Tosa/Utils/QuantUtils.cpp +++ b/mlir/lib/Dialect/Tosa/Utils/QuantUtils.cpp @@ -19,9 +19,8 @@ using namespace mlir::tosa; /// From a scale value, generates multiplier and shift values where /// mantissa is in [-1.0,-0.5] or [0.5, 1.0] such that /// multiplier = mantissa*2^shift for 16-bit scaling. -static void computeMultiplierAndShiftTosaScale16(double scale, - int32_t &multiplier, - int32_t &shift) { +void computeMultiplierAndShiftTosaScale16(double scale, int32_t &multiplier, + int32_t &shift) { const double mantissa = std::frexp(scale, &shift); auto shiftedM = std::round(mantissa * (int64_t(1) << 15)); @@ -48,9 +47,8 @@ static void computeMultiplierAndShiftTosaScale16(double scale, /// From a scale value, generates multiplier and shift values where /// mantissa is in [-1.0,-0.5] or [0.5, 1.0] such that /// multiplier = mantissa*2^shift for 32-bit scaling. -static void computeMultiplierAndShiftTosaScale32(double scale, - int32_t &multiplier, - int32_t &shift) { +void computeMultiplierAndShiftTosaScale32(double scale, int32_t &multiplier, + int32_t &shift) { const double mantissa = std::frexp(scale, &shift); auto shiftedM = std::round(mantissa * (int64_t(1) << 31)); @@ -74,8 +72,8 @@ static void computeMultiplierAndShiftTosaScale32(double scale, } /// Generates a quantized multiplier/shift from double. -void mlir::tosa::computeMultiplierAndShift(double scale, int32_t &multiplier, - int32_t &shift, int32_t scaleWidth) { +void computeMultiplierAndShift(double scale, int32_t &multiplier, + int32_t &shift, int32_t scaleWidth) { switch (scaleWidth) { case 16: @@ -98,9 +96,8 @@ void mlir::tosa::computeMultiplierAndShift(double scale, int32_t &multiplier, /// ConvOpQuantInfoBuilder/TransConvOpQuantInfoBuilder: /// input_zp: input zeropoint /// weight_zp: weight zeropoint. -ConvOpQuantizationAttr -mlir::tosa::buildConvOpQuantizationAttr(OpBuilder &builder, Value input, - Value weight) { +ConvOpQuantizationAttr buildConvOpQuantizationAttr(OpBuilder &builder, + Value input, Value weight) { auto inputType = input.getType().dyn_cast(); auto weightType = weight.getType().dyn_cast(); @@ -147,9 +144,8 @@ mlir::tosa::buildConvOpQuantizationAttr(OpBuilder &builder, Value input, /// MatMulOpQuantInfoBuilder: /// aZp: input a zeropoint /// bZp: input b zeropoint. -MatMulOpQuantizationAttr -mlir::tosa::buildMatMulOpQuantizationAttr(OpBuilder &builder, Value a, - Value b) { +MatMulOpQuantizationAttr buildMatMulOpQuantizationAttr(OpBuilder &builder, + Value a, Value b) { auto aType = a.getType().dyn_cast(); auto bType = b.getType().dyn_cast(); @@ -183,9 +179,9 @@ mlir::tosa::buildMatMulOpQuantizationAttr(OpBuilder &builder, Value a, /// UnaryOpQuantInfoBuilder: /// inputZp: input zeropoint /// outputZp: output zeropoint. -UnaryOpQuantizationAttr -mlir::tosa::buildUnaryOpQuantizationAttr(OpBuilder &builder, Value input, - Type outputRawType) { +UnaryOpQuantizationAttr buildUnaryOpQuantizationAttr(OpBuilder &builder, + Value input, + Type outputRawType) { auto inputType = input.getType().dyn_cast(); auto outputType = outputRawType.dyn_cast(); @@ -217,8 +213,8 @@ mlir::tosa::buildUnaryOpQuantizationAttr(OpBuilder &builder, Value input, /// Builds PadOpQuantizationAttr, called from PadOpQuantInfoBuilder: /// inputZp: input zeropoint. -PadOpQuantizationAttr mlir::tosa::buildPadOpQuantizationAttr(OpBuilder &builder, - Value input) { +PadOpQuantizationAttr buildPadOpQuantizationAttr(OpBuilder &builder, + Value input) { auto inputType = input.getType().dyn_cast(); @@ -242,8 +238,8 @@ PadOpQuantizationAttr mlir::tosa::buildPadOpQuantizationAttr(OpBuilder &builder, /// Builds output type for a quantized ConvOp with the right bitwidth. /// This is called by the builder when dealing with quantized content. -Type mlir::tosa::buildConvOpResultTypeInfo(OpBuilder &builder, Type outputType, - Value input, Value weight) { +Type buildConvOpResultTypeInfo(OpBuilder &builder, Type outputType, Value input, + Value weight) { auto inputType = input.getType().dyn_cast(); auto weightType = weight.getType().dyn_cast(); @@ -276,10 +272,10 @@ Type mlir::tosa::buildConvOpResultTypeInfo(OpBuilder &builder, Type outputType, } /// Builds Tosa quantization attributes from min/max values. -Type mlir::tosa::buildQTypeFromMinMax(OpBuilder builder, Type inputDType, - Attribute minAttr, Attribute maxAttr, - IntegerAttr quantBits, int filterQuantDim, - bool isSigned, BoolAttr narrowRange) { +Type buildQTypeFromMinMax(OpBuilder builder, Type inputDType, Attribute minAttr, + Attribute maxAttr, IntegerAttr quantBits, + int filterQuantDim, bool isSigned, + BoolAttr narrowRange) { quant::QuantizedType retType; @@ -343,11 +339,10 @@ Type mlir::tosa::buildQTypeFromMinMax(OpBuilder builder, Type inputDType, } /// Builds Tosa quantization attributes from min/max values. -TypeAttr -mlir::tosa::buildQTypeAttrFromMinMax(OpBuilder builder, Type inputDtype, - Attribute minAttr, Attribute maxAttr, - IntegerAttr quantBits, int filterQuantDim, - bool isSigned, BoolAttr narrowRange) { +TypeAttr buildQTypeAttrFromMinMax(OpBuilder builder, Type inputDtype, + Attribute minAttr, Attribute maxAttr, + IntegerAttr quantBits, int filterQuantDim, + bool isSigned, BoolAttr narrowRange) { return TypeAttr::get(buildQTypeFromMinMax(builder, inputDtype, minAttr, maxAttr, quantBits, filterQuantDim,