diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaComplianceData.h.inc b/mlir/include/mlir/Dialect/Tosa/IR/TosaComplianceData.h.inc index 3bdb3805dc6a2..7ea0d134941c7 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaComplianceData.h.inc +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaComplianceData.h.inc @@ -370,10 +370,16 @@ profileComplianceMap = { {{i16T, i32T, i16T}, SpecificationVersion::V_1_0}, {{i32T, i32T, i32T}, SpecificationVersion::V_1_0}}}, {{Profile::pro_fp}, - {{{fp16T, i32T, fp16T}, SpecificationVersion::V_1_0}, + {{{i8T, i32T, i8T}, SpecificationVersion::V_1_1_DRAFT}, + {{i16T, i32T, i16T}, SpecificationVersion::V_1_1_DRAFT}, + {{i32T, i32T, i32T}, SpecificationVersion::V_1_1_DRAFT}, + {{fp16T, i32T, fp16T}, SpecificationVersion::V_1_0}, {{fp32T, i32T, fp32T}, SpecificationVersion::V_1_0}}}, {{Profile::pro_fp, Profile::pro_int}, - {{{boolT, i32T, boolT}, SpecificationVersion::V_1_1_DRAFT}}, + {{{boolT, i32T, boolT}, SpecificationVersion::V_1_1_DRAFT}, + {{i8T, i64T, i8T}, SpecificationVersion::V_1_1_DRAFT}, + {{i16T, i64T, i16T}, SpecificationVersion::V_1_1_DRAFT}, + {{i32T, i64T, i32T}, SpecificationVersion::V_1_1_DRAFT}}, anyOf}}}, {"tosa.scatter", {{{Profile::pro_int}, @@ -381,12 +387,16 @@ profileComplianceMap = { {{i16T, i32T, i16T, i16T}, SpecificationVersion::V_1_0}, {{i32T, i32T, i32T, i32T}, SpecificationVersion::V_1_0}}}, {{Profile::pro_fp}, - {{{fp16T, i32T, fp16T, fp16T}, SpecificationVersion::V_1_0}, + {{{i8T, i32T, i8T, i8T}, SpecificationVersion::V_1_1_DRAFT}, + {{i16T, i32T, i16T, i16T}, SpecificationVersion::V_1_1_DRAFT}, + {{i32T, i32T, i32T, i32T}, SpecificationVersion::V_1_1_DRAFT}, + {{fp16T, i32T, fp16T, fp16T}, SpecificationVersion::V_1_0}, {{fp32T, i32T, fp32T, fp32T}, SpecificationVersion::V_1_0}}}, {{Profile::pro_fp, Profile::pro_int}, - { - {{boolT, i32T, boolT, boolT}, SpecificationVersion::V_1_1_DRAFT}, - }, + {{{boolT, i32T, boolT, boolT}, SpecificationVersion::V_1_1_DRAFT}, + {{i8T, i64T, i8T, i8T}, SpecificationVersion::V_1_1_DRAFT}, + {{i16T, i64T, i16T, i16T}, SpecificationVersion::V_1_1_DRAFT}, + {{i32T, i64T, i32T, i32T}, SpecificationVersion::V_1_1_DRAFT}}, anyOf}}}, {"tosa.resize", {{{Profile::pro_int}, diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaProfileCompliance.h b/mlir/include/mlir/Dialect/Tosa/IR/TosaProfileCompliance.h index 53372f56f2bf0..0135a651be481 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaProfileCompliance.h +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaProfileCompliance.h @@ -134,8 +134,8 @@ class TosaProfileCompliance { // Find the required profiles or extensions from the compliance info according // to the operand type combination. template - OpComplianceInfo - findMatchedEntry(Operation *op, SmallVector> compInfo); + SmallVector> + findMatchedEntries(Operation *op, SmallVector> compInfo); // Debug utilites. template @@ -149,7 +149,8 @@ class TosaProfileCompliance { private: template - FailureOr> getOperatorDefinition(Operation *op); + FailureOr>> + getOperatorMatchedEntries(Operation *op); OperationProfileComplianceMap profileComplianceMap; OperationExtensionComplianceMap extensionComplianceMap; diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaProfileCompliance.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaProfileCompliance.cpp index 1b824a4d32586..3368e70af2209 100644 --- a/mlir/lib/Dialect/Tosa/Transforms/TosaProfileCompliance.cpp +++ b/mlir/lib/Dialect/Tosa/Transforms/TosaProfileCompliance.cpp @@ -364,15 +364,15 @@ LogicalResult ProfileInfoDepot::populatationDispatch(Operation *op) { //===----------------------------------------------------------------------===// template -FailureOr> -TosaProfileCompliance::getOperatorDefinition(Operation *op) { +FailureOr>> +TosaProfileCompliance::getOperatorMatchedEntries(Operation *op) { const std::string opName = op->getName().getStringRef().str(); const auto complianceMap = getProfileComplianceMap(); const auto it = complianceMap.find(opName); if (it == complianceMap.end()) return {}; - return findMatchedEntry(op, it->second); + return findMatchedEntries(op, it->second); } template @@ -384,8 +384,8 @@ LogicalResult TosaProfileCompliance::checkProfileOrExtension( if (specRequiredModeSet.size() == 0) return success(); - const auto maybeOpDefinition = getOperatorDefinition(op); - if (failed(maybeOpDefinition)) { + const auto maybeOpEntries = getOperatorMatchedEntries(op); + if (failed(maybeOpEntries)) { // Operators such as control-flow and shape ops do not have an operand type // restriction. When the profile compliance information of operation is not // found, confirm if the target have enabled the profile required from the @@ -406,68 +406,76 @@ LogicalResult TosaProfileCompliance::checkProfileOrExtension( return failure(); } - // Find the required profiles or extensions according to the operand type - // combination. - const auto opDefinition = maybeOpDefinition.value(); - const SmallVector opRequiredMode = opDefinition.mode; - const CheckCondition condition = opDefinition.condition; - - if (opRequiredMode.size() == 0) { + const auto opEntries = maybeOpEntries.value(); + if (opEntries.size() == 0) { // No matched restriction found. return success(); } - if (condition == CheckCondition::allOf && - !targetEnv.allowsAllOf(opRequiredMode)) { - op->emitOpError() << "illegal: requires" - << (opRequiredMode.size() > 1 ? " all of " : " ") << "[" - << llvm::join(stringifyProfile(opRequiredMode), ", ") - << "] but not enabled in target\n"; - return failure(); - } + // Check the profile/extension requirement according to the current target + // profiles/extensions. + const auto isModeAllowed = [&](const OpComplianceInfo &info) -> bool { + if (info.condition == CheckCondition::allOf) + return targetEnv.allowsAllOf(info.mode); + return targetEnv.allowsAnyOf(info.mode); + }; - if (condition == CheckCondition::anyOf && - !targetEnv.allowsAnyOf(opRequiredMode)) { - op->emitOpError() << "illegal: requires" - << (opRequiredMode.size() > 1 ? " any of " : " ") << "[" - << llvm::join(stringifyProfile(opRequiredMode), ", ") - << "] but not enabled in target\n"; - return failure(); + // Check the matched op compliance version does not exceed the target + // specification version. + const TosaSpecificationVersion targetVersion{targetEnv.getSpecVersion()}; + const auto isVersionCompatible = + [&targetVersion](const OpComplianceInfo &info) -> bool { + const TosaSpecificationVersion complianceVersion{ + info.operandTypeInfoSet.front().second}; + return targetVersion.isBackwardsCompatibleWith(complianceVersion); + }; + + for (const auto &info : opEntries) { + // Ensure the profile compliance is compatible with the profile knowledge of + // the op definition. + assert(llvm::all_of(info.mode, + [&specRequiredModeSet](const T &mode) { + return llvm::is_contained(specRequiredModeSet.front(), + mode); + }) && + "the profile/extension requirement of the operator should be " + "included in the profile compliance information"); + + if (isModeAllowed(info) && isVersionCompatible(info)) + return success(); } - // Ensure the profile inference match the profile knowledge of the - // specification. - for (const auto &cands : specRequiredModeSet) { - for (const auto &mode : opRequiredMode) { - if (!llvm::is_contained(cands, mode)) { - op->emitOpError() << "illegal: requires [" - << llvm::join(stringifyProfile(opRequiredMode), - ", ") - << "] but not included in the profile compliance [" - << llvm::join( - stringifyProfile(specRequiredModeSet), ", ") - << "]\n"; - return failure(); - } + // No valid entry was found, now emit appropriate error message and return + // failure + std::string message; + llvm::raw_string_ostream os(message); + + os << "illegal: "; + const size_t numOpEntries = opEntries.size(); + for (const auto &[index, info] : llvm::enumerate(opEntries)) { + bool mismatchedVersion = false; + if (!isVersionCompatible(info)) { + mismatchedVersion = true; + os << "requires specification version compatible with " + << stringifyVersion(info.operandTypeInfoSet.front().second) << " (got " + << stringifyVersion(targetVersion) << ") "; } - } - // Ensure the matched op compliance version does not exceed the target - // specification version. - const VersionedTypeInfo versionedTypeInfo = - opDefinition.operandTypeInfoSet[0]; - const TosaSpecificationVersion complianceVersion{versionedTypeInfo.second}; - const TosaSpecificationVersion targetVersion{targetEnv.getSpecVersion()}; - if (!targetVersion.isBackwardsCompatibleWith(complianceVersion)) { - op->emitOpError() << "illegal: the target specification version (" - << stringifyVersion(targetVersion) - << ") is not backwards compatible with the op compliance " - "specification version (" - << stringifyVersion(complianceVersion) << ")\n"; - return failure(); + if (!isModeAllowed(info)) { + if (mismatchedVersion) + os << "and "; + os << "requires " + << (info.condition == CheckCondition::allOf ? "all of " : "any of ") + << "[" << llvm::join(stringifyProfile(info.mode), ", ") + << "] profiles/extensions "; + } + + if (index != numOpEntries - 1) + os << "OR "; } + os << "to be specified in the target environment"; - return success(); + return op->emitOpError(message); } LogicalResult @@ -491,14 +499,15 @@ TosaProfileCompliance::checkExtension(Operation *op, } LogicalResult TosaProfileCompliance::checkInvalid(Operation *op) { - const auto maybeProfDef = getOperatorDefinition(op); - const auto maybeExtDef = getOperatorDefinition(op); - if (failed(maybeProfDef) && failed(maybeExtDef)) + const auto maybeProfEntries = getOperatorMatchedEntries(op); + const auto maybeExtEntries = getOperatorMatchedEntries(op); + if (failed(maybeProfEntries) && failed(maybeExtEntries)) return success(); const bool hasEntry = - (succeeded(maybeProfDef) && !maybeProfDef->mode.empty()) || - (succeeded(maybeExtDef) && !maybeExtDef->mode.empty()); + (succeeded(maybeProfEntries) && !maybeProfEntries.value().empty()) || + (succeeded(maybeExtEntries) && !maybeExtEntries.value().empty()); + if (!hasEntry) { std::string message; llvm::raw_string_ostream os(message); @@ -552,7 +561,7 @@ LogicalResult TosaProfileCompliance::checkInvalid(Operation *op) { // Find the profiles or extensions requirement according to the signature of // type of the operand list. template -OpComplianceInfo TosaProfileCompliance::findMatchedEntry( +SmallVector> TosaProfileCompliance::findMatchedEntries( Operation *op, SmallVector> compInfo) { assert(compInfo.size() != 0 && "profile-based compliance information is empty"); @@ -563,6 +572,7 @@ OpComplianceInfo TosaProfileCompliance::findMatchedEntry( if (present.size() == 0) return {}; + SmallVector> matchedInfos; for (size_t i = 0; i < compInfo.size(); i++) { SmallVector sets = compInfo[i].operandTypeInfoSet; for (const auto &set : sets) { @@ -587,12 +597,12 @@ OpComplianceInfo TosaProfileCompliance::findMatchedEntry( SmallVector typeInfoSet{set}; OpComplianceInfo info{compInfo[i].mode, typeInfoSet, compInfo[i].condition}; - return info; + matchedInfos.push_back(info); } } } - return {}; + return matchedInfos; } // Debug utilites. diff --git a/mlir/test/Dialect/Tosa/invalid_extension.mlir b/mlir/test/Dialect/Tosa/invalid_extension.mlir index f0f001ec8511b..901d865f4caeb 100644 --- a/mlir/test/Dialect/Tosa/invalid_extension.mlir +++ b/mlir/test/Dialect/Tosa/invalid_extension.mlir @@ -6,189 +6,189 @@ // ----- func.func @test_argmax(%arg0: tensor<14x19xbf16>) -> tensor<14xi32> { - // expected-error@+1 {{'tosa.argmax' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.argmax' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.argmax %arg0 {axis = 1 : i32} : (tensor<14x19xbf16>) -> tensor<14xi32> return %0 : tensor<14xi32> } // ----- func.func @test_avg_pool2d(%arg0: tensor<1x7x7x9xbf16>, %arg1: tensor<1xbf16>, %arg2: tensor<1xbf16>) -> tensor<1x7x7x9xbf16> { - // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.avg_pool2d %arg0, %arg1, %arg2 {acc_type = f32, kernel = array, pad = array, stride = array} : (tensor<1x7x7x9xbf16>, tensor<1xbf16>, tensor<1xbf16>) -> tensor<1x7x7x9xbf16> return %0 : tensor<1x7x7x9xbf16> } // ----- func.func @test_conv2d(%arg0: tensor<1x4x4x4xi8>, %arg1: tensor<8x1x1x4xi4>, %arg2: tensor<8xi32>, %arg3: tensor<1xi8>, %arg4: tensor<1xi4>) -> tensor<1x4x4x8xi32> { - // expected-error@+1 {{'tosa.conv2d' op illegal: requires [int4] but not enabled in target}} + // expected-error@+1 {{'tosa.conv2d' op illegal: requires any of [int4] profiles/extensions to be specified in the target environment}} %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = i32, dilation = array, pad = array, stride = array, local_bound = true} : (tensor<1x4x4x4xi8>, tensor<8x1x1x4xi4>, tensor<8xi32>, tensor<1xi8>, tensor<1xi4>) -> tensor<1x4x4x8xi32> return %0 : tensor<1x4x4x8xi32> } // ----- func.func @test_conv3d(%arg0: tensor<1x4x8x21x17xi16>, %arg1: tensor<34x1x1x1x17xi8>, %arg2: tensor<34xi48>, %arg3: tensor<1xi16>, %arg4: tensor<1xi8>) -> tensor<1x4x8x21x34xi48> { - // expected-error@+1 {{'tosa.conv3d' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.conv3d' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = tosa.conv3d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = i48, dilation = array, pad = array, stride = array} : (tensor<1x4x8x21x17xi16>, tensor<34x1x1x1x17xi8>, tensor<34xi48>, tensor<1xi16>, tensor<1xi8>) -> tensor<1x4x8x21x34xi48> return %0 : tensor<1x4x8x21x34xi48> } // ----- func.func @test_depthwise_conv2d(%arg0: tensor<1x4x4x4xbf16>, %arg1: tensor<1x1x4x2xbf16>, %arg2: tensor<8xbf16>, %arg3: tensor<1xbf16>, %arg4: tensor<1xbf16>) -> tensor<1x4x4x8xbf16> { - // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.depthwise_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, dilation = array, pad = array, stride = array} : (tensor<1x4x4x4xbf16>, tensor<1x1x4x2xbf16>, tensor<8xbf16>, tensor<1xbf16>, tensor<1xbf16>) -> tensor<1x4x4x8xbf16> return %0 : tensor<1x4x4x8xbf16> } // ----- func.func @test_max_pool2d(%arg0: tensor<1x32x32x8xi16>) -> tensor<1x32x32x8xi16> { - // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = tosa.max_pool2d %arg0 {kernel = array, pad = array, stride = array} : (tensor<1x32x32x8xi16>) -> tensor<1x32x32x8xi16> return %0 : tensor<1x32x32x8xi16> } // ----- func.func @test_clamp(%arg0: tensor<13x21x3xi16>) -> tensor<13x21x3xi16> { - // expected-error@+1 {{'tosa.clamp' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.clamp' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = tosa.clamp %arg0 {min_val = 0 : i16, max_val = 1 : i16} : (tensor<13x21x3xi16>) -> tensor<13x21x3xi16> return %0 : tensor<13x21x3xi16> } // ----- func.func @test_sigmoid(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.sigmoid' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.sigmoid' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.sigmoid %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_tanh(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.tanh' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.tanh' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.tanh %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_add(%arg0: tensor<13x21x1xbf16>, %arg1: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.add' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.add' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.add %arg0, %arg1 : (tensor<13x21x1xbf16>, tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_max(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x21x1xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.maximum' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.maximum' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.maximum %arg0, %arg1 : (tensor<13x21x3xbf16>, tensor<13x21x1xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_mul(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x1x3xbf16>, %shift: tensor<1xi8>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.mul' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.mul' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.mul %arg0, %arg1, %shift : (tensor<13x21x3xbf16>, tensor<13x1x3xbf16>, tensor<1xi8>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_pow(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x21x1xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.pow' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.pow' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.pow %arg0, %arg1 : (tensor<13x21x3xbf16>, tensor<13x21x1xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_sub(%arg0: tensor<1x21x3xbf16>, %arg1: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.sub' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.sub' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.sub %arg0, %arg1 : (tensor<1x21x3xbf16>, tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_table(%arg0 : tensor<4x5xi16>, %arg1 : tensor<513xi16>) -> () { - // expected-error@+1 {{'tosa.table' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.table' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = tosa.table %arg0, %arg1 : (tensor<4x5xi16>, tensor<513xi16>) -> tensor return } // ----- func.func @test_abs(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.abs' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.abs' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.abs %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_cos(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.cos' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.cos' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.cos %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_exp(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.exp' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.exp' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.exp %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_floor(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.floor' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.floor' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.floor %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_log(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.log' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.log' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.log %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_negate(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<1xbf16>, %arg2: tensor<1xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.negate' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.negate' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.negate %arg0, %arg1, %arg2 : (tensor<13x21x3xbf16>, tensor<1xbf16>, tensor<1xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_reciprocal(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.reciprocal' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.reciprocal' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.reciprocal %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_rsqrt(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.rsqrt' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.rsqrt' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.rsqrt %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_equal(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x1x3xbf16>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.equal' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.equal' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.equal %arg0, %arg1 : (tensor<13x21x3xbf16>, tensor<13x1x3xbf16>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_reduce_max(%arg0: tensor<13x21x3xbf16>) -> tensor<1x21x3xbf16> { - // expected-error@+1 {{'tosa.reduce_max' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_max' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_max %arg0 {axis = 0 : i32} : (tensor<13x21x3xbf16>) -> tensor<1x21x3xbf16> return %0 : tensor<1x21x3xbf16> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x21x3xbf16>) -> tensor<26x21x3xbf16> { - // expected-error@+1 {{'tosa.concat' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xbf16>, tensor<13x21x3xbf16>) -> tensor<26x21x3xbf16> return %0 : tensor<26x21x3xbf16> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xi16>, %arg1: tensor<13x21x3xi16>) -> tensor<26x21x3xi16> { - // expected-error@+1 {{'tosa.concat' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xi16>, tensor<13x21x3xi16>) -> tensor<26x21x3xi16> return %0 : tensor<26x21x3xi16> } @@ -196,9 +196,9 @@ func.func @test_concat(%arg0: tensor<13x21x3xi16>, %arg1: tensor<13x21x3xi16>) - // ----- func.func @test_pad(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { %padding = tosa.const_shape {values = dense<0> : tensor<6xindex>} : () -> !tosa.shape<6> - // expected-error@+1 {{'tosa.const' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %pad_const = "tosa.const"() {values = dense<3.14> : tensor<1xbf16>} : () -> tensor<1xbf16> - // expected-error@+1 {{'tosa.pad' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.pad' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.pad %arg0, %padding, %pad_const : (tensor<13x21x3xbf16>, !tosa.shape<6>, tensor<1xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } @@ -206,14 +206,14 @@ func.func @test_pad(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { // ----- func.func @test_reshape(%arg0: tensor<13x21x3xbf16>) -> tensor<1x819xbf16> { %1 = tosa.const_shape {values = dense<[1, 819]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.reshape' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.reshape %arg0, %1 : (tensor<13x21x3xbf16>, !tosa.shape<2>) -> tensor<1x819xbf16> return %0 : tensor<1x819xbf16> } // ----- func.func @test_reverse(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.reverse' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.reverse %arg0 {axis = 0 : i32} : (tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } @@ -222,7 +222,7 @@ func.func @test_reverse(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> { func.func @test_slice(%arg0: tensor<13x21x3xbf16>) -> tensor<4x11x1xbf16> { %size = tosa.const_shape {values = dense<[4, 11, 1]> : tensor<3xindex>} : () -> !tosa.shape<3> %start = tosa.const_shape {values = dense<[6, 8, 0]> : tensor<3xindex>} : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.slice' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.slice' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.slice %arg0, %start, %size : (tensor<13x21x3xbf16>, !tosa.shape<3>, !tosa.shape<3>) -> tensor<4x11x1xbf16> return %0 : tensor<4x11x1xbf16> } @@ -230,28 +230,28 @@ func.func @test_slice(%arg0: tensor<13x21x3xbf16>) -> tensor<4x11x1xbf16> { // ----- func.func @test_tile(%arg0: tensor<13x21x3xbf16>) -> tensor<39x21x6xbf16> { %cst = tosa.const_shape { values = dense<[3, 1, 2]> : tensor<3xindex> } : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.tile' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.tile' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.tile %arg0, %cst: (tensor<13x21x3xbf16>, !tosa.shape<3>) -> tensor<39x21x6xbf16> return %0 : tensor<39x21x6xbf16> } // ----- func.func @test_transpose(%arg0: tensor<13x21x3xbf16>) -> tensor<3x13x21xbf16> { - // expected-error@+1 {{'tosa.transpose' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %1 = tosa.transpose %arg0 {perms = array} : (tensor<13x21x3xbf16>) -> tensor<3x13x21xbf16> return %1 : tensor<3x13x21xbf16> } // ----- func.func @test_gather(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xbf16> { - // expected-error@+1 {{'tosa.gather' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.gather' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xbf16>, tensor<13x26xi32>) -> tensor<13x26x3xbf16> return %0 : tensor<13x26x3xbf16> } // ----- func.func @test_scatter(%arg0: tensor<13x26x3xbf16>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xbf16>) -> tensor<13x26x3xbf16> { - // expected-error@+1 {{'tosa.scatter' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.scatter' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x26x3xbf16>, tensor<13x26xi32>, tensor<13x26x3xbf16>) -> tensor<13x26x3xbf16> return %0 : tensor<13x26x3xbf16> } @@ -261,49 +261,49 @@ func.func @test_resize(%arg0: tensor<1x32x32x8xbf16>) -> tensor<1x64x64x8xbf16> %scale = tosa.const_shape { values = dense<[4, 2, 4, 2]> : tensor<4xindex> } : () -> !tosa.shape<4> %offset = tosa.const_shape { values = dense<[-1, -1]> : tensor<2xindex> } : () -> !tosa.shape<2> %border = tosa.const_shape { values = dense<[1, 1]> : tensor<2xindex> } : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.resize' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.resize' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %1 = tosa.resize %arg0, %scale, %offset, %border { mode = BILINEAR } : (tensor<1x32x32x8xbf16>, !tosa.shape<4>, !tosa.shape<2>, !tosa.shape<2>) -> tensor<1x64x64x8xbf16> return %1 : tensor<1x64x64x8xbf16> } // ----- func.func @test_cast_i8_bf16(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi8>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_cast_bf16_i8(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } // ----- func.func @test_cast_f32_bf16(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xbf16> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xbf16> return %0 : tensor<13x21x3xbf16> } // ----- func.func @test_fft2d(%arg0: tensor<1x4x8xf32>, %arg1: tensor<1x4x8xf32>) -> (tensor<1x4x8xf32>, tensor<1x4x8xf32>) { - // expected-error@+1 {{'tosa.fft2d' op illegal: requires [fft] but not enabled in target}} + // expected-error@+1 {{'tosa.fft2d' op illegal: requires any of [fft] profiles/extensions to be specified in the target environment}} %0, %1 = tosa.fft2d %arg0, %arg1 {inverse = false} : (tensor<1x4x8xf32>, tensor<1x4x8xf32>) -> (tensor<1x4x8xf32>, tensor<1x4x8xf32>) return %0, %1 : tensor<1x4x8xf32>, tensor<1x4x8xf32> } // ----- func.func @test_const_i4() -> tensor<3x11x11x3xi4> { - // expected-error@+1 {{'tosa.const' op illegal: requires [int4] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [int4] profiles/extensions to be specified in the target environment}} %0 = "tosa.const"() {values = dense<0> : tensor<3x11x11x3xi4>} : () -> tensor<3x11x11x3xi4> return %0 : tensor<3x11x11x3xi4> } // ----- func.func @test_const_i48() -> tensor<3x11x11x3xi48> { - // expected-error@+1 {{'tosa.const' op illegal: requires [int16] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [int16] profiles/extensions to be specified in the target environment}} %0 = "tosa.const"() {values = dense<0> : tensor<3x11x11x3xi48>} : () -> tensor<3x11x11x3xi48> return %0 : tensor<3x11x11x3xi48> } @@ -311,18 +311,18 @@ func.func @test_const_i48() -> tensor<3x11x11x3xi48> { // ----- // CHECK-LABEL: identity func.func @test_identity(%arg0: tensor<13x21x3xi4>) -> tensor<13x21x3xi4> { - // expected-error@+1 {{'tosa.identity' op illegal: requires [int4] but not enabled in target}} + // expected-error@+1 {{'tosa.identity' op illegal: requires any of [int4] profiles/extensions to be specified in the target environment}} %0 = tosa.identity %arg0 : (tensor<13x21x3xi4>) -> tensor<13x21x3xi4> return %0 : tensor<13x21x3xi4> } // ----- module { - // expected-error@+1 {{'tosa.variable' op illegal: requires [variable] but not enabled in target}} + // expected-error@+1 {{'tosa.variable' op illegal: requires any of [variable] profiles/extensions to be specified in the target environment}} tosa.variable @stored_var = dense<-1> : tensor<2x4x8xi8> func.func @test_variable_read_type(%arg0: tensor<2x4x8xi8>) -> () { - // expected-error@+1 {{'tosa.variable_read' op illegal: requires [variable]}} + // expected-error@+1 {{'tosa.variable_read' op illegal: requires any of [variable] profiles/extensions to be specified in the target environment}} %0 = tosa.variable_read @stored_var : tensor<2x4x8xi8> return } @@ -330,11 +330,11 @@ module { // ----- module { - // expected-error@+1 {{'tosa.variable' op illegal: requires [variable] but not enabled in target}} + // expected-error@+1 {{'tosa.variable' op illegal: requires any of [variable] profiles/extensions to be specified in the target environment}} tosa.variable @stored_var = dense<-1> : tensor<2x4x8xi8> func.func @test_variable_write_type(%arg0: tensor<2x4x8xi8>) -> () { - // expected-error@+1 {{'tosa.variable_write' op illegal: requires [variable]}} + // expected-error@+1 {{'tosa.variable_write' op illegal: requires any of [variable] profiles/extensions to be specified in the target environment}} tosa.variable_write @stored_var, %arg0 : tensor<2x4x8xi8> return } @@ -342,14 +342,14 @@ module { // ----- func.func @test_cast_bf16_i32(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xbf16>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_cond_if(%arg0: tensor, %arg1: tensor, %arg2: tensor) -> tensor { - // expected-error@+1 {{'tosa.cond_if' op illegal: requires [controlflow]}} + // expected-error@+1 {{'tosa.cond_if' op illegal: requires [controlflow] but not enabled in target}} %0 = tosa.cond_if %arg2 : tensor -> tensor { %1 = tosa.add %arg0, %arg1 : (tensor, tensor) -> tensor tosa.yield %1 : tensor @@ -363,7 +363,7 @@ func.func @test_cond_if(%arg0: tensor, %arg1: tensor, %arg2: tensor, %arg1: tensor) { %0 = "tosa.const"() {values = dense<0> : tensor} : () -> tensor - // expected-error@+1 {{'tosa.while_loop' op illegal: requires [controlflow]}} + // expected-error@+1 {{'tosa.while_loop' op illegal: requires [controlflow] but not enabled in target}} %1:3 = tosa.while_loop (%arg2 = %0, %arg3 = %0, %arg4 = %arg0) : (tensor, tensor, tensor<10xi32>) -> (tensor, tensor, tensor<10xi32>) { %2 = tosa.greater_equal %arg3, %arg1 : (tensor, tensor) -> tensor %3 = tosa.logical_not %2 : (tensor) -> tensor @@ -549,7 +549,7 @@ func.func @test_avg_pool2d_non_const_output_zp(%arg0: tensor<1x32x32x8xf32>, %ou // ----- func.func @test_matmul_t_block_scaled(%arg0: tensor<4x8x32xf8E4M3FN>, %arg1: tensor<4x8x1xf8E8M0FNU>, %arg2: tensor<4x16x32xf8E4M3FN>, %arg3: tensor<4x16x1xf8E8M0FNU>) -> tensor<4x8x16xf32> { - // expected-error@+1 {{'tosa.matmul_t_block_scaled' op illegal: requires [mxfp] but not enabled in target}} + // expected-error@+1 {{'tosa.matmul_t_block_scaled' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [mxfp] profiles/extensions to be specified in the target environment}} %0 = tosa.matmul_t_block_scaled %arg0, %arg1, %arg2, %arg3 {block_size = #tosa.block_size} : (tensor<4x8x32xf8E4M3FN>, tensor<4x8x1xf8E8M0FNU>, tensor<4x16x32xf8E4M3FN>, tensor<4x16x1xf8E8M0FNU>) -> tensor<4x8x16xf32> return %0 : tensor<4x8x16xf32> } @@ -557,14 +557,14 @@ func.func @test_matmul_t_block_scaled(%arg0: tensor<4x8x32xf8E4M3FN>, %arg1: ten // ----- func.func @test_argmax_int64(%arg0: tensor<1x13x13x5xf32>) -> tensor<1x13x13xi64> { - // expected-error@+1 {{'tosa.argmax' op illegal: requires [int64] but not enabled in target}} + // expected-error@+1 {{'tosa.argmax' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [int64] profiles/extensions to be specified in the target environment}} %0 = tosa.argmax %arg0 {axis = 3 : i32} : (tensor<1x13x13x5xf32>) -> tensor<1x13x13xi64> return %0 : tensor<1x13x13xi64> } // ----- func.func @test_const_fp6e3m2(%arg0 : index) -> tensor<4xf6E3M2FN> { - // expected-error@+1 {{'tosa.const' op illegal: requires [mxfp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [mxfp] profiles/extensions to be specified in the target environment}} %0 = "tosa.const"() {values = dense<[0.0, 0.0, 0.0, 0.0]> : tensor<4xf6E3M2FN>} : () -> tensor<4xf6E3M2FN> return %0 : tensor<4xf6E3M2FN> } @@ -572,7 +572,7 @@ func.func @test_const_fp6e3m2(%arg0 : index) -> tensor<4xf6E3M2FN> { // ----- func.func @test_cast_from_block_scaled(%arg0: tensor<4x32xf8E5M2>, %arg1: tensor<4x1xf8E8M0FNU>) -> tensor<4x32xf32> { - // expected-error@+1 {{'tosa.cast_from_block_scaled' op illegal: requires [mxfp] but not enabled in target}} + // expected-error@+1 {{'tosa.cast_from_block_scaled' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [mxfp] profiles/extensions to be specified in the target environment}} %0 = tosa.cast_from_block_scaled %arg0, %arg1 {block_size = #tosa.block_size : i32} : (tensor<4x32xf8E5M2>, tensor<4x1xf8E8M0FNU>) -> tensor<4x32xf32> return %0 : tensor<4x32xf32> } @@ -580,7 +580,7 @@ func.func @test_cast_from_block_scaled(%arg0: tensor<4x32xf8E5M2>, %arg1: tensor // ----- func.func @test_cast_to_block_scaled(%arg0: tensor<4x32xf32>) -> (tensor<4x32xf6E3M2FN>, tensor<4x1xf8E8M0FNU>) { - // expected-error@+1 {{'tosa.cast_to_block_scaled' op illegal: requires [mxfp] but not enabled in target}} + // expected-error@+1 {{'tosa.cast_to_block_scaled' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [mxfp] profiles/extensions to be specified in the target environment}} %0:2 = tosa.cast_to_block_scaled %arg0 {block_size = #tosa.block_size} : (tensor<4x32xf32>) -> (tensor<4x32xf6E3M2FN>, tensor<4x1xf8E8M0FNU>) return %0#0, %0#1 : tensor<4x32xf6E3M2FN>, tensor<4x1xf8E8M0FNU> } @@ -621,7 +621,7 @@ func.func @test_conv2d_block_scaled(%arg0: tensor<*xf4E2M1FN>, %arg1: tensor<*xf %0 = tosa.const_shape {values = dense<[0, 0, 0, 0]> : tensor<4xindex>} : () -> !tosa.shape<4> %1 = tosa.const_shape {values = dense<[1, 1]> : tensor<2xindex>} : () -> !tosa.shape<2> %2 = tosa.const_shape {values = dense<[1, 1]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.conv2d_block_scaled' op illegal: requires [mxfp_conv] but not enabled in target}} + // expected-error@+1 {{'tosa.conv2d_block_scaled' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [mxfp_conv] profiles/extensions to be specified in the target environment}} %3 = tosa.conv2d_block_scaled %arg0, %arg1, %arg2, %arg3, %arg4, %0, %1, %2 {block_size = BLOCK_SIZE_32} : (tensor<*xf4E2M1FN>, tensor<*xf8E8M0FNU>, tensor<*xf4E2M1FN>, tensor<*xf8E8M0FNU>, tensor<*xf32>, !tosa.shape<4>, !tosa.shape<2>, !tosa.shape<2>) -> tensor<*xf32> return %3 : tensor<*xf32> } diff --git a/mlir/test/Dialect/Tosa/profile_all_unsupported.mlir b/mlir/test/Dialect/Tosa/profile_all_unsupported.mlir index 8e56c9c54446b..f9011766c885d 100644 --- a/mlir/test/Dialect/Tosa/profile_all_unsupported.mlir +++ b/mlir/test/Dialect/Tosa/profile_all_unsupported.mlir @@ -6,181 +6,181 @@ // ----- func.func @test_add_i32(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.add %arg0, %arg1 : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_intdiv(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.intdiv %arg0, %arg1 : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_logical_and(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x1xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_and %arg0, %arg1 : (tensor<13x21x3xi1>, tensor<13x21x1xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_logical_left_shift(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x21x1xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_left_shift %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x21x1xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_mul(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x1x3xi32>, %shift: tensor<1xi8>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.mul %arg0, %arg1, %shift : (tensor<13x21x3xi32>, tensor<13x1x3xi32>, tensor<1xi8>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_sub(%arg0: tensor<1x21x3xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sub %arg0, %arg1 : (tensor<1x21x3xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_logical_not(%arg0: tensor<1x21x3xi1>) -> tensor<1x21x3xi1> { - // expected-error@+1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_not %arg0 : (tensor<1x21x3xi1>) -> tensor<1x21x3xi1> return %0 : tensor<1x21x3xi1> } // ----- func.func @test_select(%arg0: tensor<1x1x1xi1>, %arg1: tensor<13x21x3xi1>, %arg2: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.select %arg0, %arg1, %arg2 : (tensor<1x1x1xi1>, tensor<13x21x3xi1>, tensor<13x21x3xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_table(%arg0 : tensor<4x5xi8>, %arg1 : tensor<513xi8>) -> () { - // expected-error@+1 {{'tosa.table' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.table' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.table %arg0, %arg1 : (tensor<4x5xi8>, tensor<513xi8>) -> tensor return } // ----- func.func @test_conv2d(%arg0: tensor<1x4x4x4xf32>, %arg1: tensor<8x1x1x4xf32>, %arg2: tensor<8xf32>, %arg3: tensor<1xf32>) -> tensor<1x4x4x8xf32> { - // expected-error@+1 {{'tosa.conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array, pad = array, stride = array, local_bound = true} : (tensor<1x4x4x4xf32>, tensor<8x1x1x4xf32>, tensor<8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x4x4x8xf32> return %0 : tensor<1x4x4x8xf32> } // ----- func.func @test_avg_pool2d(%arg0: tensor<1x7x7x9xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x7x7x9xf32> { - // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.avg_pool2d %arg0, %arg1, %arg2 {acc_type = f32, kernel = array, pad = array, stride = array} : (tensor<1x7x7x9xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x7x7x9xf32> return %0 : tensor<1x7x7x9xf32> } // ----- func.func @test_matmul(%arg0: tensor<1x14x19xf32>, %arg1: tensor<1x19x28xf32>, %arg2: tensor<1xf32>) -> tensor<1x14x28xf32> { - // expected-error@+1 {{'tosa.matmul' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.matmul' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.matmul %arg0, %arg1, %arg2, %arg2: (tensor<1x14x19xf32>, tensor<1x19x28xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x14x28xf32> return %0 : tensor<1x14x28xf32> } // ----- func.func @test_sigmoid(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.sigmoid' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sigmoid' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sigmoid %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_transpose_conv2d(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x1x1x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>, %arg4: tensor<1xf32>) -> tensor<1x32x32x16xf32> { - // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.transpose_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, out_pad = array, out_shape = array, stride = array} : (tensor<1x32x32x8xf32>, tensor<16x1x1x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x32x16xf32> return %0 : tensor<1x32x32x16xf32> } // ----- func.func @test_add(%arg0: tensor<13x21x1xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.add' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.add %arg0, %arg1 : (tensor<13x21x1xf32>, tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_add_i32(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.add %arg0, %arg1 : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_intdiv(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.intdiv %arg0, %arg1 : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_logical_and(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x1xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_and %arg0, %arg1 : (tensor<13x21x3xi1>, tensor<13x21x1xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_logical_left_shift(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x21x1xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_left_shift %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x21x1xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_mul(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x1x3xi32>, %shift: tensor<1xi8>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.mul %arg0, %arg1, %shift : (tensor<13x21x3xi32>, tensor<13x1x3xi32>, tensor<1xi8>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_sub(%arg0: tensor<1x21x3xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sub %arg0, %arg1 : (tensor<1x21x3xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_logical_not(%arg0: tensor<1x21x3xi1>) -> tensor<1x21x3xi1> { - // expected-error@+1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.logical_not %arg0 : (tensor<1x21x3xi1>) -> tensor<1x21x3xi1> return %0 : tensor<1x21x3xi1> } // ----- func.func @test_select(%arg0: tensor<1x1x1xi1>, %arg1: tensor<13x21x3xi1>, %arg2: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.select %arg0, %arg1, %arg2 : (tensor<1x1x1xi1>, tensor<13x21x3xi1>, tensor<13x21x3xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_reduce_all(%arg0: tensor<13x21x3xi1>) -> tensor<1x21x3xi1> { - // expected-error@+1 {{'tosa.reduce_all' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_all' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_all %arg0 {axis = 0 : i32} : (tensor<13x21x3xi1>) -> tensor<1x21x3xi1> return %0 : tensor<1x21x3xi1> } // ----- func.func @test_reduce_any(%arg0: tensor<13x21x3xi1>) -> tensor<1x21x3xi1> { - // expected-error@+1 {{'tosa.reduce_any' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_any' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_any %arg0 {axis = 0 : i32} : (tensor<13x21x3xi1>) -> tensor<1x21x3xi1> return %0 : tensor<1x21x3xi1> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x3xi1>) -> tensor<26x21x3xi1> { - // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xi1>, tensor<13x21x3xi1>) -> tensor<26x21x3xi1> return %0 : tensor<26x21x3xi1> } @@ -189,9 +189,9 @@ func.func @test_concat(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x3xi1>) -> func.func @test_pad(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %padding = tosa.const_shape {values = dense<0> : tensor<6xindex>} : () -> !tosa.shape<6> - // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %pad_const = "tosa.const"() {values = dense<1> : tensor<1xi1>} : () -> tensor<1xi1> - // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.pad %arg0, %padding, %pad_const : (tensor<13x21x3xi1>, !tosa.shape<6>, tensor<1xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } @@ -200,14 +200,14 @@ func.func @test_pad(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { func.func @test_reshape(%arg0: tensor<13x21x3xi1>) -> tensor<1x819xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %1 = tosa.const_shape {values = dense<[1, 819]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reshape %arg0, %1 : (tensor<13x21x3xi1>, !tosa.shape<2>) -> tensor<1x819xi1> return %0 : tensor<1x819xi1> } // ----- func.func @test_reverse(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reverse %arg0 {axis = 0 : i32} : (tensor<13x21x3xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } @@ -218,7 +218,7 @@ func.func @test_slice(%arg0: tensor<13x21x3xi1>) -> tensor<4x11x1xi1> { %size = tosa.const_shape {values = dense<[4, 11, 1]> : tensor<3xindex>} : () -> !tosa.shape<3> // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %start = tosa.const_shape {values = dense<[6, 8, 0]> : tensor<3xindex>} : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %2 = tosa.slice %arg0, %start, %size : (tensor<13x21x3xi1>, !tosa.shape<3>, !tosa.shape<3>) -> tensor<4x11x1xi1> return %2 : tensor<4x11x1xi1> } @@ -227,28 +227,28 @@ func.func @test_slice(%arg0: tensor<13x21x3xi1>) -> tensor<4x11x1xi1> { func.func @test_tile(%arg0: tensor<13x21x3xi1>) -> tensor<39x21x6xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %cst = tosa.const_shape { values = dense<[3, 1, 2]> : tensor<3xindex> } : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.tile %arg0, %cst: (tensor<13x21x3xi1>, !tosa.shape<3>) -> tensor<39x21x6xi1> return %0 : tensor<39x21x6xi1> } // ----- func.func @test_transpose(%arg0: tensor<13x21x3xi1>) -> tensor<3x13x21xi1> { - // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %1 = tosa.transpose %arg0 {perms = array} : (tensor<13x21x3xi1>) -> tensor<3x13x21xi1> return %1 : tensor<3x13x21xi1> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<26x21x3xf32> { - // expected-error@+1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xf32>, tensor<13x21x3xf32>) -> tensor<26x21x3xf32> return %0 : tensor<26x21x3xf32> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x3xi1>) -> tensor<26x21x3xi1> { - // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xi1>, tensor<13x21x3xi1>) -> tensor<26x21x3xi1> return %0 : tensor<26x21x3xi1> } @@ -257,9 +257,9 @@ func.func @test_concat(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x21x3xi1>) -> func.func @test_pad(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %padding = tosa.const_shape {values = dense<0> : tensor<6xindex>} : () -> !tosa.shape<6> - // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %pad_const = "tosa.const"() {values = dense<1> : tensor<1xi1>} : () -> tensor<1xi1> - // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.pad %arg0, %padding, %pad_const : (tensor<13x21x3xi1>, !tosa.shape<6>, tensor<1xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } @@ -268,14 +268,14 @@ func.func @test_pad(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { func.func @test_reshape(%arg0: tensor<13x21x3xi1>) -> tensor<1x819xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %1 = tosa.const_shape {values = dense<[1, 819]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reshape %arg0, %1 : (tensor<13x21x3xi1>, !tosa.shape<2>) -> tensor<1x819xi1> return %0 : tensor<1x819xi1> } // ----- func.func @test_reverse(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reverse %arg0 {axis = 0 : i32} : (tensor<13x21x3xi1>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } @@ -286,7 +286,7 @@ func.func @test_slice(%arg0: tensor<13x21x3xi1>) -> tensor<4x11x1xi1> { %size = tosa.const_shape {values = dense<[4, 11, 1]> : tensor<3xindex>} : () -> !tosa.shape<3> // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %start = tosa.const_shape {values = dense<[6, 8, 0]> : tensor<3xindex>} : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.slice %arg0, %start, %size : (tensor<13x21x3xi1>, !tosa.shape<3>, !tosa.shape<3>) -> tensor<4x11x1xi1> return %0 : tensor<4x11x1xi1> } @@ -295,20 +295,20 @@ func.func @test_slice(%arg0: tensor<13x21x3xi1>) -> tensor<4x11x1xi1> { func.func @test_tile(%arg0: tensor<13x21x3xi1>) -> tensor<39x21x6xi1> { // expected-error@+1 {{'tosa.const_shape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} %cst = tosa.const_shape { values = dense<[3, 1, 2]> : tensor<3xindex> } : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.tile %arg0, %cst: (tensor<13x21x3xi1>, !tosa.shape<3>) -> tensor<39x21x6xi1> return %0 : tensor<39x21x6xi1> } // ----- func.func @test_transpose(%arg0: tensor<13x21x3xi1>) -> tensor<3x13x21xi1> { - // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] profiles/extensions to be specified in the target environment}} %1 = tosa.transpose %arg0 {perms = array} : (tensor<13x21x3xi1>) -> tensor<3x13x21xi1> return %1 : tensor<3x13x21xi1> } // ----- func.func @test_cast_i32_f32(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } @@ -319,4 +319,3 @@ func.func @test_custom(%arg0: tensor<10xi32>) -> tensor<10xi32> { %0 = tosa.custom %arg0 {operator_name="custom_test", domain_name="tosa.mlir_test", implementation_attrs="" } : (tensor<10xi32>) -> (tensor<10xi32>) return %0 : tensor<10xi32> } - diff --git a/mlir/test/Dialect/Tosa/profile_pro_fp_unsupported.mlir b/mlir/test/Dialect/Tosa/profile_pro_fp_unsupported.mlir index fb0ce19dfc5b0..17095a309bb66 100644 --- a/mlir/test/Dialect/Tosa/profile_pro_fp_unsupported.mlir +++ b/mlir/test/Dialect/Tosa/profile_pro_fp_unsupported.mlir @@ -6,249 +6,249 @@ // ----- func.func @test_const_f16() -> tensor<3x11x11x3xf16> { - // expected-error@+1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = "tosa.const"() {values = dense<2.0> : tensor<3x11x11x3xf16>} : () -> tensor<3x11x11x3xf16> return %0 : tensor<3x11x11x3xf16> } // ----- func.func @test_const_f32() -> tensor<3x11x11x3xf32> { - // expected-error@+1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = "tosa.const"() {values = dense<3.0> : tensor<3x11x11x3xf32>} : () -> tensor<3x11x11x3xf32> return %0 : tensor<3x11x11x3xf32> } // ----- func.func @test_avg_pool2d(%arg0: tensor<1x7x7x9xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x7x7x9xf32> { - // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.avg_pool2d %arg0, %arg1, %arg2 {acc_type = f32, kernel = array, pad = array, stride = array} : (tensor<1x7x7x9xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x7x7x9xf32> return %0 : tensor<1x7x7x9xf32> } // ----- func.func @test_conv2d(%arg0: tensor<1x4x4x4xf32>, %arg1: tensor<8x1x1x4xf32>, %arg2: tensor<8xf32>, %arg3: tensor<1xf32>, %arg4: tensor<1xf32>) -> tensor<1x4x4x8xf32> { - // expected-error@+1 {{'tosa.conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, dilation = array, pad = array, stride = array, local_bound = true} : (tensor<1x4x4x4xf32>, tensor<8x1x1x4xf32>, tensor<8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x4x4x8xf32> return %0 : tensor<1x4x4x8xf32> } // ----- func.func @test_conv3d(%arg0: tensor<1x4x8x21x17xf16>, %arg1: tensor<34x1x1x1x17xf16>, %arg2: tensor<34xf16>, %arg3: tensor<1xf16>, %arg4: tensor<1xf16>) -> tensor<1x4x8x21x34xf16> { - // expected-error@+1 {{'tosa.conv3d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.conv3d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.conv3d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, dilation = array, pad = array, stride = array} : (tensor<1x4x8x21x17xf16>, tensor<34x1x1x1x17xf16>, tensor<34xf16>, tensor<1xf16>, tensor<1xf16>) -> tensor<1x4x8x21x34xf16> return %0 : tensor<1x4x8x21x34xf16> } // ----- func.func @test_depthwise_conv2d(%arg0: tensor<1x4x4x4xf16>, %arg1: tensor<1x1x4x2xf16>, %arg2: tensor<8xf16>, %arg3: tensor<1xf16>, %arg4: tensor<1xf16>) -> tensor<1x4x4x8xf16> { - // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.depthwise_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f16, dilation = array, pad = array, stride = array} : (tensor<1x4x4x4xf16>, tensor<1x1x4x2xf16>, tensor<8xf16>, tensor<1xf16>, tensor<1xf16>) -> tensor<1x4x4x8xf16> return %0 : tensor<1x4x4x8xf16> } // ----- func.func @test_matmul(%arg0: tensor<1x14x19xf32>, %arg1: tensor<1x19x28xf32>) -> tensor<1x14x28xf32> { - // expected-error@+1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %azp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf32>}> : () -> tensor<1xf32> - // expected-error@+1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %bzp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf32>}> : () -> tensor<1xf32> - // expected-error@+1 {{'tosa.matmul' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.matmul' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.matmul %arg0, %arg1, %azp0, %bzp0 : (tensor<1x14x19xf32>, tensor<1x19x28xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x14x28xf32> return %0 : tensor<1x14x28xf32> } // ----- func.func @test_sigmoid(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.sigmoid' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sigmoid' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sigmoid %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_transpose_conv2d(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x1x1x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>, %arg4: tensor<1xf32>) -> tensor<1x32x32x16xf32> { - // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.transpose_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, out_pad = array, out_shape = array, stride = array} : (tensor<1x32x32x8xf32>, tensor<16x1x1x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x32x16xf32> return %0 : tensor<1x32x32x16xf32> } // ----- func.func @test_max_pool2d(%arg0: tensor<1x32x32x8xf32>) -> tensor<1x32x32x8xf32> { - // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.max_pool2d %arg0 {kernel = array, pad = array, stride = array} : (tensor<1x32x32x8xf32>) -> tensor<1x32x32x8xf32> return %0 : tensor<1x32x32x8xf32> } // ----- func.func @test_transpose_conv2d(%arg0: tensor<1x32x32x8xf16>, %arg1: tensor<16x1x1x8xf16>, %arg2: tensor<16xf16>, %arg3: tensor<1xf16>, %arg4: tensor<1xf16>) -> tensor<1x32x32x16xf16> { - // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.transpose_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f16, out_pad = array, stride = array} : (tensor<1x32x32x8xf16>, tensor<16x1x1x8xf16>, tensor<16xf16>, tensor<1xf16>, tensor<1xf16>) -> tensor<1x32x32x16xf16> return %0 : tensor<1x32x32x16xf16> } // ----- func.func @test_clamp(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.clamp' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.clamp' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.clamp %arg0 {min_val = 0.0 : f32, max_val = 1.0 : f32} : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_add(%arg0: tensor<13x21x1xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.add' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.add' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.add %arg0, %arg1 : (tensor<13x21x1xf32>, tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<26x21x3xf32> { - // expected-error@+1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xf32>, tensor<13x21x3xf32>) -> tensor<26x21x3xf32> return %0 : tensor<26x21x3xf32> } // ----- func.func @test_cast_i32_f32(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_max(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x1xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.maximum' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.maximum' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.maximum %arg0, %arg1 : (tensor<13x21x3xf32>, tensor<13x21x1xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_mul(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x1x3xf32>, %shift: tensor<1xi8>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.mul' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.mul %arg0, %arg1, %shift : (tensor<13x21x3xf32>, tensor<13x1x3xf32>, tensor<1xi8>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_pow(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x1xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.pow' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.pow' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.pow %arg0, %arg1 : (tensor<13x21x3xf32>, tensor<13x21x1xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_sub(%arg0: tensor<1x21x3xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.sub' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sub' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sub %arg0, %arg1 : (tensor<1x21x3xf32>, tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_abs(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.abs' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.abs' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.abs %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_ceil(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.ceil' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.ceil' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.ceil %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_cos(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.cos' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.cos' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.cos %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_exp(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.exp' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.exp' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.exp %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_floor(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.floor' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.floor' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.floor %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_log(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.log' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.log' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.log %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_negate(%arg0: tensor<13x21x3xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.negate' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.negate' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.negate %arg0, %arg1, %arg2 : (tensor<13x21x3xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_reciprocal(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.reciprocal' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reciprocal' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reciprocal %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_rsqrt(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.rsqrt' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.rsqrt' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.rsqrt %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_select(%arg0: tensor<1x1x1xi1>, %arg1: tensor<13x21x3xf32>, %arg2: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.select' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.select %arg0, %arg1, %arg2 : (tensor<1x1x1xi1>, tensor<13x21x3xf32>, tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_sin(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.sin' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.sin' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.sin %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } // ----- func.func @test_equal(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x1x3xf32>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.equal' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.equal' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.equal %arg0, %arg1 : (tensor<13x21x3xf32>, tensor<13x1x3xf32>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_greater(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x1x3xf32>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.greater' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.greater' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.greater %arg0, %arg1 : (tensor<13x21x3xf32>, tensor<13x1x3xf32>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_reduce_max(%arg0: tensor<13x21x3xf16>) -> tensor<1x21x3xf16> { - // expected-error@+1 {{'tosa.reduce_max' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_max' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_max %arg0 {axis = 0 : i32} : (tensor<13x21x3xf16>) -> tensor<1x21x3xf16> return %0 : tensor<1x21x3xf16> } // ----- func.func @test_reduce_sum(%arg0: tensor<13x21x3xf32>) -> tensor<1x21x3xf32> { - // expected-error@+1 {{'tosa.reduce_sum' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_sum' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_sum %arg0 {axis = 0 : i32} : (tensor<13x21x3xf32>) -> tensor<1x21x3xf32> return %0 : tensor<1x21x3xf32> } // ----- func.func @test_concat(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<26x21x3xf32> { - // expected-error@+1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.concat' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.concat %arg0, %arg1 {axis = 0 : i32} : (tensor<13x21x3xf32>, tensor<13x21x3xf32>) -> tensor<26x21x3xf32> return %0 : tensor<26x21x3xf32> } @@ -256,9 +256,9 @@ func.func @test_concat(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x3xf32>) - // ----- func.func @test_pad(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { %padding = tosa.const_shape {values = dense<0> : tensor<6xindex>} : () -> !tosa.shape<6> - // expected-error@+1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.const' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %pad_const = "tosa.const"() {values = dense<3.14> : tensor<1xf32>} : () -> tensor<1xf32> - // expected-error@+1 {{'tosa.pad' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.pad %arg0, %padding, %pad_const : (tensor<13x21x3xf32>, !tosa.shape<6>, tensor<1xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } @@ -266,14 +266,14 @@ func.func @test_pad(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { // ----- func.func @test_reshape(%arg0: tensor<13x21x3xf32>) -> tensor<1x819xf32> { %1 = tosa.const_shape {values = dense<[1, 819]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.reshape' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reshape %arg0, %1 : (tensor<13x21x3xf32>, !tosa.shape<2>) -> tensor<1x819xf32> return %0 : tensor<1x819xf32> } // ----- func.func @test_reverse(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.reverse' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.reverse %arg0 {axis = 0 : i32} : (tensor<13x21x3xf32>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } @@ -282,7 +282,7 @@ func.func @test_reverse(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xf32> { func.func @test_slice(%arg0: tensor<13x21x3xf32>) -> tensor<4x11x1xf32> { %size = tosa.const_shape {values = dense<[4, 11, 1]> : tensor<3xindex>} : () -> !tosa.shape<3> %start = tosa.const_shape {values = dense<[6, 8, 0]> : tensor<3xindex>} : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.slice' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %2 = tosa.slice %arg0, %start, %size : (tensor<13x21x3xf32>, !tosa.shape<3>, !tosa.shape<3>) -> tensor<4x11x1xf32> return %2 : tensor<4x11x1xf32> } @@ -290,28 +290,28 @@ func.func @test_slice(%arg0: tensor<13x21x3xf32>) -> tensor<4x11x1xf32> { // ----- func.func @test_tile(%arg0: tensor<13x21x3xf32>) -> tensor<39x21x6xf32> { %cst = tosa.const_shape { values = dense<[3, 1, 2]> : tensor<3xindex> } : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.tile' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.tile %arg0, %cst: (tensor<13x21x3xf32>, !tosa.shape<3>) -> tensor<39x21x6xf32> return %0 : tensor<39x21x6xf32> } // ----- func.func @test_transpose(%arg0: tensor<13x21x3xf32>, %arg1: tensor<3xi32>) -> tensor<3x13x21xf32> { - // expected-error@+1 {{'tosa.transpose' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %1 = tosa.transpose %arg0 {perms = array}: (tensor<13x21x3xf32>) -> tensor<3x13x21xf32> return %1 : tensor<3x13x21xf32> } // ----- func.func @test_gather(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xf32> { - // expected-error@+1 {{'tosa.gather' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.gather' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xf32>, tensor<13x26xi32>) -> tensor<13x26x3xf32> return %0 : tensor<13x26x3xf32> } // ----- func.func @test_scatter(%arg0: tensor<13x28x3xf32>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xf32>) -> tensor<13x28x3xf32> { - // expected-error@+1 {{'tosa.scatter' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.scatter' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x28x3xf32>, tensor<13x26xi32>, tensor<13x26x3xf32>) -> tensor<13x28x3xf32> return %0 : tensor<13x28x3xf32> } @@ -321,7 +321,7 @@ func.func @test_resize(%arg0: tensor<1x32x32x8xf32>) -> tensor<1x64x64x8xf32> { %scale = tosa.const_shape { values = dense<[4, 2, 4, 2]> : tensor<4xindex> } : () -> !tosa.shape<4> %offset = tosa.const_shape { values = dense<[-1, -1]> : tensor<2xindex> } : () -> !tosa.shape<2> %border = tosa.const_shape { values = dense<[1, 1]> : tensor<2xindex> } : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.resize' op illegal: requires [pro_fp] but not enabled in target}} + // expected-error@+1 {{'tosa.resize' op illegal: requires any of [pro_fp] profiles/extensions to be specified in the target environment}} %1 = tosa.resize %arg0, %scale, %offset, %border { mode = BILINEAR } : (tensor<1x32x32x8xf32>, !tosa.shape<4>, !tosa.shape<2>, !tosa.shape<2>) -> tensor<1x64x64x8xf32> return %1 : tensor<1x64x64x8xf32> } diff --git a/mlir/test/Dialect/Tosa/profile_pro_int_unsupported.mlir b/mlir/test/Dialect/Tosa/profile_pro_int_unsupported.mlir index 99b602e48febb..f646be6d4a43b 100644 --- a/mlir/test/Dialect/Tosa/profile_pro_int_unsupported.mlir +++ b/mlir/test/Dialect/Tosa/profile_pro_int_unsupported.mlir @@ -18,35 +18,35 @@ func.func @test_const_i32() -> tensor<3x11x11x3xi32> { // ----- func.func @test_argmax(%arg0: tensor<14x19xi8>) -> tensor<14xi32> { - // expected-error@+1 {{'tosa.argmax' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.argmax' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.argmax %arg0 {axis = 1 : i32} : (tensor<14x19xi8>) -> tensor<14xi32> return %0 : tensor<14xi32> } // ----- func.func @test_avg_pool2d(%arg0: tensor<1x7x7x9xi8>, %arg1: tensor<1xi8>, %arg2: tensor<1xi8>) -> tensor<1x7x7x9xi8> { - // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.avg_pool2d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.avg_pool2d %arg0, %arg1, %arg2 {acc_type = i32, kernel = array, pad = array, stride = array} : (tensor<1x7x7x9xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x7x7x9xi8> return %0 : tensor<1x7x7x9xi8> } // ----- func.func @test_conv2d(%arg0: tensor<1x4x4x4xi8>, %arg1: tensor<8x1x1x4xi8>, %arg2: tensor<8xi32>, %arg3: tensor<1xi8>) -> tensor<1x4x4x8xi32> { - // expected-error@+1 {{'tosa.conv2d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.conv2d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = i32, dilation = array, pad = array, stride = array, local_bound = true} : (tensor<1x4x4x4xi8>, tensor<8x1x1x4xi8>, tensor<8xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x4x4x8xi32> return %0 : tensor<1x4x4x8xi32> } // ----- func.func @test_conv3d(%arg0: tensor<1x4x8x21x17xi8>, %arg1: tensor<34x1x1x1x17xi8>, %arg2: tensor<34xi32>, %arg3: tensor<1xi8>, %arg4: tensor<1xi8>) -> tensor<1x4x8x21x34xi32> { - // expected-error@+1 {{'tosa.conv3d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.conv3d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.conv3d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x4x8x21x17xi8>, tensor<34x1x1x1x17xi8>, tensor<34xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x4x8x21x34xi32> return %0 : tensor<1x4x8x21x34xi32> } // ----- func.func @test_depthwise_conv2d(%arg0: tensor<1x4x4x4xi8>, %arg1: tensor<1x1x4x2xi8>, %arg2: tensor<8xi32>, %arg3: tensor<1xi8>, %arg4: tensor<1xi8>) -> tensor<1x4x4x8xi32> { - // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.depthwise_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x4x4x4xi8>, tensor<1x1x4x2xi8>, tensor<8xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x4x4x8xi32> return %0 : tensor<1x4x4x8xi32> } @@ -55,126 +55,126 @@ func.func @test_depthwise_conv2d(%arg0: tensor<1x4x4x4xi8>, %arg1: tensor<1x1x4x func.func @test_matmul(%arg0: tensor<1x14x19xi8>, %arg1: tensor<1x19x28xi8>) -> tensor<1x14x28xi32> { %azp0 = "tosa.const"() <{values = dense<0> : tensor<1xi8>}> : () -> tensor<1xi8> %bzp0 = "tosa.const"() <{values = dense<0> : tensor<1xi8>}> : () -> tensor<1xi8> - // expected-error@+1 {{'tosa.matmul' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.matmul' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.matmul %arg0, %arg1, %azp0, %bzp0 : (tensor<1x14x19xi8>, tensor<1x19x28xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x14x28xi32> return %0 : tensor<1x14x28xi32> } // ----- func.func @test_max_pool2d(%arg0: tensor<1x32x32x8xi8>) -> tensor<1x32x32x8xi8> { - // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.max_pool2d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.max_pool2d %arg0 {kernel = array, pad = array, stride = array} : (tensor<1x32x32x8xi8>) -> tensor<1x32x32x8xi8> return %0 : tensor<1x32x32x8xi8> } // ----- func.func @test_transpose_conv2d(%arg0: tensor<1x32x32x8xi8>, %arg1: tensor<16x1x1x8xi8>, %arg2: tensor<16xi32>, %arg3: tensor<1xi8>, %arg4: tensor<1xi8>) -> tensor<1x32x32x16xi32> { - // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.transpose_conv2d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = i32, out_pad = array, stride = array} : (tensor<1x32x32x8xi8>, tensor<16x1x1x8xi8>, tensor<16xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x32x32x16xi32> return %0 : tensor<1x32x32x16xi32> } // ----- func.func @test_clamp(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.clamp' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.clamp' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.clamp %arg0 {min_val = 0 : i8, max_val = 1: i8} : (tensor<13x21x3xi8>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } // ----- func.func @test_arithmetic_right_shift(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.arithmetic_right_shift' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.arithmetic_right_shift' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.arithmetic_right_shift %arg0, %arg1 {round = false} : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_bitwise_and(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x21x1xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.bitwise_and' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.bitwise_and' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.bitwise_and %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x21x1xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_max(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x21x1xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.maximum' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.maximum' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.maximum %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x21x1xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_mul(%arg0: tensor<13x21x3xi16>, %arg1: tensor<13x1x3xi16>, %shift: tensor<1xi8>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.mul' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.mul' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.mul %arg0, %arg1, %shift : (tensor<13x21x3xi16>, tensor<13x1x3xi16>, tensor<1xi8>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_table(%arg0 : tensor<4x5xi8>, %arg1 : tensor<513xi8>) -> () { - // expected-error@+1 {{'tosa.table' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.table' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.table %arg0, %arg1 : (tensor<4x5xi8>, tensor<513xi8>) -> tensor return } // ----- func.func @test_abs(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.abs' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.abs' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.abs %arg0 : (tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_bitwise_not(%arg0: tensor<13x21x1xi32>) -> tensor<13x21x1xi32> { - // expected-error@+1 {{'tosa.bitwise_not' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.bitwise_not' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.bitwise_not %arg0 : (tensor<13x21x1xi32>) -> tensor<13x21x1xi32> return %0 : tensor<13x21x1xi32> } // ----- func.func @test_clz(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.clz' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.clz' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.clz %arg0 : (tensor<13x21x3xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_negate(%arg0: tensor<13x21x3xi16>, %arg1: tensor<1xi16>, %arg2: tensor<1xi16>) -> tensor<13x21x3xi16> { - // expected-error@+1 {{'tosa.negate' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.negate' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.negate %arg0, %arg1, %arg2 : (tensor<13x21x3xi16>, tensor<1xi16>, tensor<1xi16>) -> tensor<13x21x3xi16> return %0 : tensor<13x21x3xi16> } // ----- func.func @test_select(%arg0: tensor<1x1x1xi1>, %arg1: tensor<13x21x3xi8>, %arg2: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.select' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.select' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.select %arg0, %arg1, %arg2 : (tensor<1x1x1xi1>, tensor<13x21x3xi8>, tensor<13x21x3xi8>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } // ----- func.func @test_equal(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x1x3xi32>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.equal' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.equal' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.equal %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x1x3xi32>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_greater(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x1x3xi32>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.greater' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.greater' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.greater %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x1x3xi32>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } // ----- func.func @test_reduce_max(%arg0: tensor<13x21x3xi8>) -> tensor<1x21x3xi8> { - // expected-error@+1 {{'tosa.reduce_max' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_max' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_max %arg0 {axis = 0 : i32} : (tensor<13x21x3xi8>) -> tensor<1x21x3xi8> return %0 : tensor<1x21x3xi8> } // ----- func.func @test_reduce_sum(%arg0: tensor<13x21x3xi32>) -> tensor<1x21x3xi32> { - // expected-error@+1 {{'tosa.reduce_sum' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.reduce_sum' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.reduce_sum %arg0 {axis = 0 : i32} : (tensor<13x21x3xi32>) -> tensor<1x21x3xi32> return %0 : tensor<1x21x3xi32> } @@ -183,7 +183,7 @@ func.func @test_reduce_sum(%arg0: tensor<13x21x3xi32>) -> tensor<1x21x3xi32> { func.func @test_pad(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { %padding = tosa.const_shape {values = dense<0> : tensor<6xindex>} : () -> !tosa.shape<6> %pad_const = "tosa.const"() {values = dense<1> : tensor<1xi8>} : () -> tensor<1xi8> - // expected-error@+1 {{'tosa.pad' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.pad' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.pad %arg0, %padding, %pad_const : (tensor<13x21x3xi8>, !tosa.shape<6>, tensor<1xi8>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } @@ -191,14 +191,14 @@ func.func @test_pad(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { // ----- func.func @test_reshape(%arg0: tensor<13x21x3xi8>) -> tensor<1x819xi8> { %1 = tosa.const_shape {values = dense<[1, 819]> : tensor<2xindex>} : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.reshape' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.reshape' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.reshape %arg0, %1 : (tensor<13x21x3xi8>, !tosa.shape<2>) -> tensor<1x819xi8> return %0 : tensor<1x819xi8> } // ----- func.func @test_reverse(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.reverse' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.reverse' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.reverse %arg0 {axis = 0 : i32} : (tensor<13x21x3xi8>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } @@ -207,7 +207,7 @@ func.func @test_reverse(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi8> { func.func @test_slice(%arg0: tensor<13x21x3xi8>) -> tensor<4x11x1xi8> { %size = tosa.const_shape {values = dense<[4, 11, 1]> : tensor<3xindex>} : () -> !tosa.shape<3> %start = tosa.const_shape {values = dense<[6, 8, 0]> : tensor<3xindex>} : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.slice' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.slice' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %2 = tosa.slice %arg0, %start, %size : (tensor<13x21x3xi8>, !tosa.shape<3>, !tosa.shape<3>) -> tensor<4x11x1xi8> return %2 : tensor<4x11x1xi8> } @@ -215,28 +215,28 @@ func.func @test_slice(%arg0: tensor<13x21x3xi8>) -> tensor<4x11x1xi8> { // ----- func.func @test_tile(%arg0: tensor<13x21x3xi8>) -> tensor<39x21x6xi8> { %cst = tosa.const_shape { values = dense<[3, 1, 2]> : tensor<3xindex> } : () -> !tosa.shape<3> - // expected-error@+1 {{'tosa.tile' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.tile' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.tile %arg0, %cst: (tensor<13x21x3xi8>, !tosa.shape<3>) -> tensor<39x21x6xi8> return %0 : tensor<39x21x6xi8> } // ----- func.func @test_transpose(%arg0: tensor<13x21x3xi8>, %arg1: tensor<3xi32>) -> tensor<3x13x21xi8> { - // expected-error@+1 {{'tosa.transpose' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.transpose' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %1 = tosa.transpose %arg0 {perms = array}: (tensor<13x21x3xi8>) -> tensor<3x13x21xi8> return %1 : tensor<3x13x21xi8> } // ----- func.func @test_gather(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi32> { - // expected-error@+1 {{'tosa.gather' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.gather' op illegal: requires any of [pro_int] profiles/extensions OR requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x26xi32>) -> tensor<13x26x3xi32> return %0 : tensor<13x26x3xi32> } // ----- func.func @test_scatter(%arg0: tensor<13x27x3xi32>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xi32>) -> tensor<13x27x3xi32> { - // expected-error@+1 {{'tosa.scatter' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.scatter' op illegal: requires any of [pro_int] profiles/extensions OR requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi32>, tensor<13x26xi32>, tensor<13x26x3xi32>) -> tensor<13x27x3xi32> return %0 : tensor<13x27x3xi32> } @@ -246,35 +246,35 @@ func.func @test_resize(%arg0: tensor<1x32x32x8xi8>) -> tensor<1x64x64x8xi32> { %scale = tosa.const_shape { values = dense<[4, 2, 4, 2]> : tensor<4xindex> } : () -> !tosa.shape<4> %offset = tosa.const_shape { values = dense<[-1, -1]> : tensor<2xindex> } : () -> !tosa.shape<2> %border = tosa.const_shape { values = dense<[1, 1]> : tensor<2xindex> } : () -> !tosa.shape<2> - // expected-error@+1 {{'tosa.resize' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.resize' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %1 = tosa.resize %arg0, %scale, %offset, %border { mode = BILINEAR } : (tensor<1x32x32x8xi8>, !tosa.shape<4>, !tosa.shape<2>, !tosa.shape<2>) -> tensor<1x64x64x8xi32> return %1 : tensor<1x64x64x8xi32> } // ----- func.func @test_cast_i1_i8(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi1>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } // ----- func.func @test_cast_i8_i32(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi32> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi8>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } // ----- func.func @test_cast_i16_i8(%arg0: tensor<13x21x3xi16>) -> tensor<13x21x3xi8> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi16>) -> tensor<13x21x3xi8> return %0 : tensor<13x21x3xi8> } // ----- func.func @test_cast_i32_i16(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xi16> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi32>) -> tensor<13x21x3xi16> return %0 : tensor<13x21x3xi16> } @@ -285,7 +285,7 @@ func.func @test_rescale(%arg0: tensor<13x21x3xi8>) -> tensor<13x21x3xi32> { %shift = "tosa.const"() {values = dense<30> : tensor<1xi8>} : () -> tensor<1xi8> %input_zp = "tosa.const"() {values = dense<127> : tensor<1xi8>} : () -> tensor<1xi8> %output_zp = "tosa.const"() {values = dense<0> : tensor<1xi32>} : () -> tensor<1xi32> - // expected-error@+1 {{'tosa.rescale' op illegal: requires [pro_int] but not enabled in target}} + // expected-error@+1 {{'tosa.rescale' op illegal: requires any of [pro_int] profiles/extensions to be specified in the target environment}} %0 = tosa.rescale %arg0, %multiplier, %shift, %input_zp, %output_zp {rounding_mode = SINGLE_ROUND, scale32 = true, per_channel = false, input_unsigned = false, output_unsigned = false} : (tensor<13x21x3xi8>, tensor<1xi32>, tensor<1xi8>, tensor<1xi8>, tensor<1xi32>) -> tensor<13x21x3xi32> return %0 : tensor<13x21x3xi32> } diff --git a/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-invalid.mlir b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-invalid.mlir index fbd935d56fcc6..7ad45f53135cf 100644 --- a/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-invalid.mlir +++ b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-invalid.mlir @@ -5,7 +5,7 @@ func.func @test_matmul_fp8_mixed_precision_operands(%arg0: tensor<1x14x19xf8E4M3FN>, %arg1: tensor<1x19x28xf8E5M2>) -> tensor<1x14x28xf16> { %azp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E4M3FN>}> : () -> tensor<1xf8E4M3FN> %bzp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> - // expected-error@+1 {{'tosa.matmul' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.matmul' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.matmul %arg0, %arg1, %azp0, %bzp0 : (tensor<1x14x19xf8E4M3FN>, tensor<1x19x28xf8E5M2>, tensor<1xf8E4M3FN>, tensor<1xf8E5M2>) -> tensor<1x14x28xf16> return %0 : tensor<1x14x28xf16> } @@ -15,7 +15,7 @@ func.func @test_matmul_fp8_mixed_precision_operands(%arg0: tensor<1x14x19xf8E4M3 func.func @test_matmul_fp8_input_fp32_acc_type(%arg0: tensor<1x14x19xf8E4M3FN>, %arg1: tensor<1x19x28xf8E4M3FN>) -> tensor<1x14x28xf32> { %azp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E4M3FN>}> : () -> tensor<1xf8E4M3FN> %bzp0 = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E4M3FN>}> : () -> tensor<1xf8E4M3FN> - // expected-error@+1 {{'tosa.matmul' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.matmul' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.matmul %arg0, %arg1, %azp0, %bzp0 : (tensor<1x14x19xf8E4M3FN>, tensor<1x19x28xf8E4M3FN>, tensor<1xf8E4M3FN>, tensor<1xf8E4M3FN>) -> tensor<1x14x28xf32> return %0 : tensor<1x14x28xf32> } @@ -25,7 +25,7 @@ func.func @test_matmul_fp8_input_fp32_acc_type(%arg0: tensor<1x14x19xf8E4M3FN>, func.func @test_conv2d_fp8_acc32(%arg0: tensor<1x4x4x4xf8E5M2>, %arg1: tensor<8x1x1x4xf8E5M2>, %arg2: tensor<8xf32>) -> tensor<1x4x4x8xf32> { %input_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> %weight_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> - // expected-error@+1 {{'tosa.conv2d' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.conv2d' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.conv2d %arg0, %arg1, %arg2, %input_zp, %weight_zp {acc_type = f32, dilation = array, pad = array, stride = array} : (tensor<1x4x4x4xf8E5M2>, tensor<8x1x1x4xf8E5M2>, tensor<8xf32>, tensor<1xf8E5M2>, tensor<1xf8E5M2>) -> tensor<1x4x4x8xf32> return %0 : tensor<1x4x4x8xf32> } @@ -35,7 +35,7 @@ func.func @test_conv2d_fp8_acc32(%arg0: tensor<1x4x4x4xf8E5M2>, %arg1: tensor<8x func.func @test_conv3d_fp8_acc32(%arg0: tensor<1x4x8x21x17xf8E5M2>, %arg1: tensor<34x1x1x1x17xf8E5M2>, %arg2: tensor<34xf32>) -> tensor<1x4x8x21x34xf32> { %input_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> %weight_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> - // expected-error@+1 {{'tosa.conv3d' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.conv3d' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.conv3d %arg0, %arg1, %arg2, %input_zp, %weight_zp {acc_type = f32, dilation = array, pad = array, stride = array} : (tensor<1x4x8x21x17xf8E5M2>, tensor<34x1x1x1x17xf8E5M2>, tensor<34xf32>, tensor<1xf8E5M2>, tensor<1xf8E5M2>) -> tensor<1x4x8x21x34xf32> return %0 : tensor<1x4x8x21x34xf32> } @@ -45,7 +45,7 @@ func.func @test_conv3d_fp8_acc32(%arg0: tensor<1x4x8x21x17xf8E5M2>, %arg1: tenso func.func @test_depthwise_conv2d_fp8_acc32(%arg0: tensor<1x4x4x4xf8E5M2>, %arg1: tensor<1x1x4x2xf8E5M2>, %arg2: tensor<8xf32>) -> tensor<1x4x4x8xf32> { %input_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> %weight_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> - // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.depthwise_conv2d' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.depthwise_conv2d %arg0, %arg1, %arg2, %input_zp, %weight_zp {acc_type = f32, dilation = array, pad = array, stride = array} : (tensor<1x4x4x4xf8E5M2>, tensor<1x1x4x2xf8E5M2>, tensor<8xf32>, tensor<1xf8E5M2>, tensor<1xf8E5M2>) -> tensor<1x4x4x8xf32> return %0 : tensor<1x4x4x8xf32> } @@ -55,7 +55,7 @@ func.func @test_depthwise_conv2d_fp8_acc32(%arg0: tensor<1x4x4x4xf8E5M2>, %arg1: func.func @test_transpose_conv2d_fp8_acc32(%arg0: tensor<1x32x32x8xf8E5M2>, %arg1: tensor<16x1x1x8xf8E5M2>, %arg2: tensor<16xf32>) -> tensor<1x32x32x16xf32> { %input_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> %weight_zp = "tosa.const"() <{values = dense<0.0> : tensor<1xf8E5M2>}> : () -> tensor<1xf8E5M2> - // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.transpose_conv2d' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.transpose_conv2d %arg0, %arg1, %arg2, %input_zp, %weight_zp {acc_type = f32, out_pad = array, stride = array} : (tensor<1x32x32x8xf8E5M2>, tensor<16x1x1x8xf8E5M2>, tensor<16xf32>, tensor<1xf8E5M2>, tensor<1xf8E5M2>) -> tensor<1x32x32x16xf32> return %0 : tensor<1x32x32x16xf32> } @@ -63,7 +63,7 @@ func.func @test_transpose_conv2d_fp8_acc32(%arg0: tensor<1x32x32x8xf8E5M2>, %arg // ----- func.func @test_gather_bool_i64(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x26xi64>) -> tensor<13x26x3xi1> { - // expected-error@+1 {{'tosa.gather' op illegal: requires [int64] but not enabled in target}} + // expected-error@+1 {{'tosa.gather' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [int64] profiles/extensions to be specified in the target environment}} %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi1>, tensor<13x26xi64>) -> tensor<13x26x3xi1> return %0 : tensor<13x26x3xi1> } @@ -71,7 +71,7 @@ func.func @test_gather_bool_i64(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x26xi // ----- func.func @test_gather_bool_i32(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi1> { - // expected-error@+1 {{'tosa.gather' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.gather' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi1>, tensor<13x26xi32>) -> tensor<13x26x3xi1> return %0 : tensor<13x26x3xi1> } @@ -79,7 +79,7 @@ func.func @test_gather_bool_i32(%arg0: tensor<13x21x3xi1>, %arg1: tensor<13x26xi // ----- func.func @test_scatter_bool_i64(%arg0: tensor<13x52x3xi1>, %arg1: tensor<13x26xi64>, %arg2: tensor<13x26x3xi1>) -> tensor<13x52x3xi1> { - // expected-error@+1 {{'tosa.scatter' op illegal: requires [int64] but not enabled in target}} + // expected-error@+1 {{'tosa.scatter' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [int64] profiles/extensions to be specified in the target environment}} %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x52x3xi1>, tensor<13x26xi64>, tensor<13x26x3xi1>) -> tensor<13x52x3xi1> return %0 : tensor<13x52x3xi1> } @@ -87,7 +87,7 @@ func.func @test_scatter_bool_i64(%arg0: tensor<13x52x3xi1>, %arg1: tensor<13x26x // ----- func.func @test_scatter_bool_i32(%arg0: tensor<13x52x3xi1>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xi1>) -> tensor<13x52x3xi1> { - // expected-error@+1 {{'tosa.scatter' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.scatter' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x52x3xi1>, tensor<13x26xi32>, tensor<13x26x3xi1>) -> tensor<13x52x3xi1> return %0 : tensor<13x52x3xi1> } @@ -95,7 +95,7 @@ func.func @test_scatter_bool_i32(%arg0: tensor<13x52x3xi1>, %arg1: tensor<13x26x // ----- func.func @test_cast_bool_fp32(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xf32> { - // expected-error@+1 {{'tosa.cast' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.cast' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi1>) -> tensor<13x21x3xf32> return %0 : tensor<13x21x3xf32> } @@ -103,7 +103,7 @@ func.func @test_cast_bool_fp32(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xf32> // ----- func.func @test_cast_bool_i64(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi64> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [int64] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [int64] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi1>) -> tensor<13x21x3xi64> return %0 : tensor<13x21x3xi64> } @@ -111,7 +111,7 @@ func.func @test_cast_bool_i64(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xi64> // ----- func.func @test_cast_fp32_bool(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.cast' op illegal: the target specification version (1.0) is not backwards compatible with the op compliance specification version (1.1)}} + // expected-error@+1 {{'tosa.cast' op illegal: requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xf32>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } @@ -119,7 +119,7 @@ func.func @test_cast_fp32_bool(%arg0: tensor<13x21x3xf32>) -> tensor<13x21x3xi1> // ----- func.func @test_cast_i64_bool(%arg0: tensor<13x21x3xi64>) -> tensor<13x21x3xi1> { - // expected-error@+1 {{'tosa.cast' op illegal: requires [int64] but not enabled in target}} + // expected-error@+1 {{'tosa.cast' op illegal: requires specification version compatible with 1.1 (got 1.0) and requires any of [int64] profiles/extensions to be specified in the target environment}} %0 = tosa.cast %arg0 : (tensor<13x21x3xi64>) -> tensor<13x21x3xi1> return %0 : tensor<13x21x3xi1> } diff --git a/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-pro-fp-invalid.mlir b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-pro-fp-invalid.mlir new file mode 100644 index 0000000000000..df2760a16e4b9 --- /dev/null +++ b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-pro-fp-invalid.mlir @@ -0,0 +1,15 @@ +// RUN: mlir-opt %s -verify-diagnostics -tosa-attach-target="specification_version=1.0 profiles=pro_fp" -tosa-validate="strict-op-spec-alignment" + +func.func @test_gather_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>) -> tensor<13x26x3xi8> { + // expected-error@+1 {{'tosa.gather' op illegal: requires any of [pro_int] profiles/extensions OR requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} + %gather = tosa.gather %input, %indices : (tensor<13x27x3xi8>, tensor<13x26xi32>) -> tensor<13x26x3xi8> + return %gather : tensor<13x26x3xi8> +} + +// ----- + +func.func @test_scatter_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>, %updates: tensor<13x26x3xi8>) -> tensor<13x27x3xi8> { + // expected-error@+1 {{'tosa.scatter' op illegal: requires any of [pro_int] profiles/extensions OR requires specification version compatible with 1.1 (got 1.0) to be specified in the target environment}} + %scatter = tosa.scatter %input, %indices, %updates : (tensor<13x27x3xi8>, tensor<13x26xi32>, tensor<13x26x3xi8>) -> tensor<13x27x3xi8> + return %scatter : tensor<13x27x3xi8> +} diff --git a/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-valid.mlir b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-valid.mlir new file mode 100644 index 0000000000000..6e88558782316 --- /dev/null +++ b/mlir/test/Dialect/Tosa/tosa-validation-version-1p0-valid.mlir @@ -0,0 +1,15 @@ +// RUN: mlir-opt %s -split-input-file -verify-diagnostics -tosa-attach-target="specification_version=1.0 profiles=pro_int,pro_fp" -tosa-validate="strict-op-spec-alignment" | FileCheck %s + +// CHECK-LABEL: test_gather_i8_i32 +func.func @test_gather_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>) -> tensor<13x26x3xi8> { + %gather = tosa.gather %input, %indices : (tensor<13x27x3xi8>, tensor<13x26xi32>) -> tensor<13x26x3xi8> + return %gather : tensor<13x26x3xi8> +} + +// ----- + +// CHECK-LABEL: test_scatter_i8_i32 +func.func @test_scatter_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>, %updates: tensor<13x26x3xi8>) -> tensor<13x27x3xi8> { + %scatter = tosa.scatter %input, %indices, %updates : (tensor<13x27x3xi8>, tensor<13x26xi32>, tensor<13x26x3xi8>) -> tensor<13x27x3xi8> + return %scatter : tensor<13x27x3xi8> +} diff --git a/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-pro-fp-valid.mlir b/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-pro-fp-valid.mlir new file mode 100644 index 0000000000000..0f2bbb71ee4b7 --- /dev/null +++ b/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-pro-fp-valid.mlir @@ -0,0 +1,15 @@ +// RUN: mlir-opt %s -split-input-file -verify-diagnostics -tosa-attach-target="specification_version=1.1.draft profiles=pro_fp" -tosa-validate="strict-op-spec-alignment" | FileCheck %s + +// CHECK-LABEL: test_gather_i8_i32 +func.func @test_gather_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>) -> tensor<13x26x3xi8> { + %gather = tosa.gather %input, %indices : (tensor<13x27x3xi8>, tensor<13x26xi32>) -> tensor<13x26x3xi8> + return %gather : tensor<13x26x3xi8> +} + +// ----- + +// CHECK-LABEL: test_scatter_i8_i32 +func.func @test_scatter_i8_i32(%input: tensor<13x27x3xi8>, %indices: tensor<13x26xi32>, %updates: tensor<13x26x3xi8>) -> tensor<13x27x3xi8> { + %scatter = tosa.scatter %input, %indices, %updates : (tensor<13x27x3xi8>, tensor<13x26xi32>, tensor<13x26x3xi8>) -> tensor<13x27x3xi8> + return %scatter : tensor<13x27x3xi8> +} diff --git a/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-valid.mlir b/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-valid.mlir index fa03abcccacd8..4a6ab456744db 100644 --- a/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-valid.mlir +++ b/mlir/test/Dialect/Tosa/tosa-validation-version-1p1-valid.mlir @@ -215,6 +215,102 @@ func.func @test_scatter_bool_i32(%arg0: tensor<13x52x3xi1>, %arg1: tensor<13x26x // ----- +// CHECK-LABEL: test_gather_i8_i32_indices +func.func @test_gather_i8_i32_indices(%arg0: tensor<13x21x3xi8>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi8> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi8>, tensor<13x26xi32>) -> tensor<13x26x3xi8> + return %0 : tensor<13x26x3xi8> +} + +// ----- + +// CHECK-LABEL: test_scatter_i8_i32_indices +func.func @test_scatter_i8_i32_indices(%arg0: tensor<13x27x3xi8>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xi8>) -> tensor<13x27x3xi8> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi8>, tensor<13x26xi32>, tensor<13x26x3xi8>) -> tensor<13x27x3xi8> + return %0 : tensor<13x27x3xi8> +} + +// ----- + +// CHECK-LABEL: test_gather_i16_i32_indices +func.func @test_gather_i16_i32_indices(%arg0: tensor<13x21x3xi16>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi16> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi16>, tensor<13x26xi32>) -> tensor<13x26x3xi16> + return %0 : tensor<13x26x3xi16> +} + +// ----- + +// CHECK-LABEL: test_scatter_i16_i32_indices +func.func @test_scatter_i16_i32_indices(%arg0: tensor<13x27x3xi16>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xi16>) -> tensor<13x27x3xi16> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi16>, tensor<13x26xi32>, tensor<13x26x3xi16>) -> tensor<13x27x3xi16> + return %0 : tensor<13x27x3xi16> +} + +// ----- + +// CHECK-LABEL: test_gather_i32_i32_indices +func.func @test_gather_i32_i32_indices(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi32> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x26xi32>) -> tensor<13x26x3xi32> + return %0 : tensor<13x26x3xi32> +} + +// ----- + +// CHECK-LABEL: test_scatter_i32_i32_indices +func.func @test_scatter_i32_i32_indices(%arg0: tensor<13x27x3xi32>, %arg1: tensor<13x26xi32>, %arg2: tensor<13x26x3xi32>) -> tensor<13x27x3xi32> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi32>, tensor<13x26xi32>, tensor<13x26x3xi32>) -> tensor<13x27x3xi32> + return %0 : tensor<13x27x3xi32> +} + +// ----- + +// CHECK-LABEL: test_gather_i8_i64_indices +func.func @test_gather_i8_i64_indices(%arg0: tensor<13x21x3xi8>, %arg1: tensor<13x26xi64>) -> tensor<13x26x3xi8> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi8>, tensor<13x26xi64>) -> tensor<13x26x3xi8> + return %0 : tensor<13x26x3xi8> +} + +// ----- + +// CHECK-LABEL: test_scatter_i8_i64_indices +func.func @test_scatter_i8_i64_indices(%arg0: tensor<13x27x3xi8>, %arg1: tensor<13x26xi64>, %arg2: tensor<13x26x3xi8>) -> tensor<13x27x3xi8> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi8>, tensor<13x26xi64>, tensor<13x26x3xi8>) -> tensor<13x27x3xi8> + return %0 : tensor<13x27x3xi8> +} + +// ----- + +// CHECK-LABEL: test_gather_i16_i64_indices +func.func @test_gather_i16_i64_indices(%arg0: tensor<13x21x3xi16>, %arg1: tensor<13x26xi64>) -> tensor<13x26x3xi16> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi16>, tensor<13x26xi64>) -> tensor<13x26x3xi16> + return %0 : tensor<13x26x3xi16> +} + +// ----- + +// CHECK-LABEL: test_scatter_i16_i64_indices +func.func @test_scatter_i16_i64_indices(%arg0: tensor<13x27x3xi16>, %arg1: tensor<13x26xi64>, %arg2: tensor<13x26x3xi16>) -> tensor<13x27x3xi16> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi16>, tensor<13x26xi64>, tensor<13x26x3xi16>) -> tensor<13x27x3xi16> + return %0 : tensor<13x27x3xi16> +} + +// ----- + +// CHECK-LABEL: test_gather_i32_i64_indices +func.func @test_gather_i32_i64_indices(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x26xi64>) -> tensor<13x26x3xi32> { + %0 = tosa.gather %arg0, %arg1 : (tensor<13x21x3xi32>, tensor<13x26xi64>) -> tensor<13x26x3xi32> + return %0 : tensor<13x26x3xi32> +} + +// ----- + +// CHECK-LABEL: test_scatter_i32_i64_indices +func.func @test_scatter_i32_i64_indices(%arg0: tensor<13x27x3xi32>, %arg1: tensor<13x26xi64>, %arg2: tensor<13x26x3xi32>) -> tensor<13x27x3xi32> { + %0 = tosa.scatter %arg0, %arg1, %arg2 : (tensor<13x27x3xi32>, tensor<13x26xi64>, tensor<13x26x3xi32>) -> tensor<13x27x3xi32> + return %0 : tensor<13x27x3xi32> +} + +// ----- + // CHECK-LABEL: test_cast_bool_fp32 func.func @test_cast_bool_fp32(%arg0: tensor<13x21x3xi1>) -> tensor<13x21x3xf32> { %0 = tosa.cast %arg0 : (tensor<13x21x3xi1>) -> tensor<13x21x3xf32>