[Mlir-commits] [mlir] [mlir][tosa] Allow integer gather/scatter ops in fp profile (PR #183342)

Luke Hutton llvmlistbot at llvm.org
Tue Mar 10 09:55:53 PDT 2026


https://github.com/lhutton1 updated https://github.com/llvm/llvm-project/pull/183342

>From 6ebaeb80994db69d1e36836634ab4d3ba1ce810d Mon Sep 17 00:00:00 2001
From: Luke Hutton <luke.hutton at arm.com>
Date: Wed, 25 Feb 2026 16:55:38 +0000
Subject: [PATCH 1/2] [mlir][tosa] Allow integer gather/scatter ops in fp
 profile

This commit updates profile compliance to allow integer gather
and scatter operations to be used with the floating point profile.
This update aligns with the specification change:
https://github.com/arm/tosa-specification/pull/35

Change-Id: Idfee21f4e940000b633eb6a19d14dc2ad95c075f
---
 .../Dialect/Tosa/IR/TosaComplianceData.h.inc  | 22 +++--
 .../tosa-validation-version-1p1-valid.mlir    | 96 +++++++++++++++++++
 2 files changed, 112 insertions(+), 6 deletions(-)

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/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>

>From 99d7b0b16c02ac8f0056151c17d04a7c84022c36 Mon Sep 17 00:00:00 2001
From: Luke Hutton <luke.hutton at arm.com>
Date: Tue, 10 Mar 2026 11:30:35 +0000
Subject: [PATCH 2/2] Extend profile/extension check to support multiple
 entries

When adding tests gather/scatter when only the pro_fp profile is provided
in the target, an issue was noticed. These gather/scatter ops now have
multiple profile entries, one for pro_fp and one for pro_int. This commit
extends the profile/extension check to support multiple entries.

In addition, it also cleans up the error messages, printing all the rules
required for the op instead of just the first one found.

The checks for profile/extension alignment between those included in the
operator definition and those included in the profile compliance table
has been moved to an assert, as they should never fail from a user
perspective.

Change-Id: Id0af068b770d9e5ba7df5cef94065b8bc8e581bb
---
 .../Dialect/Tosa/IR/TosaProfileCompliance.h   |   7 +-
 .../Tosa/Transforms/TosaProfileCompliance.cpp | 138 ++++++++++--------
 mlir/test/Dialect/Tosa/invalid_extension.mlir | 114 +++++++--------
 .../Dialect/Tosa/profile_all_unsupported.mlir |  87 ++++++-----
 .../Tosa/profile_pro_fp_unsupported.mlir      |  94 ++++++------
 .../Tosa/profile_pro_int_unsupported.mlir     |  74 +++++-----
 .../tosa-validation-version-1p0-invalid.mlir  |  28 ++--
 ...validation-version-1p0-pro-fp-invalid.mlir |  15 ++
 .../tosa-validation-version-1p0-valid.mlir    |  15 ++
 ...a-validation-version-1p1-pro-fp-valid.mlir |  15 ++
 10 files changed, 321 insertions(+), 266 deletions(-)
 create mode 100644 mlir/test/Dialect/Tosa/tosa-validation-version-1p0-pro-fp-invalid.mlir
 create mode 100644 mlir/test/Dialect/Tosa/tosa-validation-version-1p0-valid.mlir
 create mode 100644 mlir/test/Dialect/Tosa/tosa-validation-version-1p1-pro-fp-valid.mlir

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 <typename T>
-  OpComplianceInfo<T>
-  findMatchedEntry(Operation *op, SmallVector<OpComplianceInfo<T>> compInfo);
+  SmallVector<OpComplianceInfo<T>>
+  findMatchedEntries(Operation *op, SmallVector<OpComplianceInfo<T>> compInfo);
 
   // Debug utilites.
   template <typename T>
@@ -149,7 +149,8 @@ class TosaProfileCompliance {
 
 private:
   template <typename T>
-  FailureOr<OpComplianceInfo<T>> getOperatorDefinition(Operation *op);
+  FailureOr<SmallVector<OpComplianceInfo<T>>>
+  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 <typename T>
-FailureOr<OpComplianceInfo<T>>
-TosaProfileCompliance::getOperatorDefinition(Operation *op) {
+FailureOr<SmallVector<OpComplianceInfo<T>>>
+TosaProfileCompliance::getOperatorMatchedEntries(Operation *op) {
   const std::string opName = op->getName().getStringRef().str();
   const auto complianceMap = getProfileComplianceMap<T>();
   const auto it = complianceMap.find(opName);
   if (it == complianceMap.end())
     return {};
 
-  return findMatchedEntry<T>(op, it->second);
+  return findMatchedEntries<T>(op, it->second);
 }
 
 template <typename T>
@@ -384,8 +384,8 @@ LogicalResult TosaProfileCompliance::checkProfileOrExtension(
   if (specRequiredModeSet.size() == 0)
     return success();
 
-  const auto maybeOpDefinition = getOperatorDefinition<T>(op);
-  if (failed(maybeOpDefinition)) {
+  const auto maybeOpEntries = getOperatorMatchedEntries<T>(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<T> 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<T>(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<T> &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<T>(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<T> &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<T>(opRequiredMode),
-                                        ", ")
-                          << "] but not included in the profile compliance ["
-                          << llvm::join(
-                                 stringifyProfile<T>(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<T>(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<Profile>(op);
-  const auto maybeExtDef = getOperatorDefinition<Extension>(op);
-  if (failed(maybeProfDef) && failed(maybeExtDef))
+  const auto maybeProfEntries = getOperatorMatchedEntries<Profile>(op);
+  const auto maybeExtEntries = getOperatorMatchedEntries<Extension>(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 <typename T>
-OpComplianceInfo<T> TosaProfileCompliance::findMatchedEntry(
+SmallVector<OpComplianceInfo<T>> TosaProfileCompliance::findMatchedEntries(
     Operation *op, SmallVector<OpComplianceInfo<T>> compInfo) {
   assert(compInfo.size() != 0 &&
          "profile-based compliance information is empty");
@@ -563,6 +572,7 @@ OpComplianceInfo<T> TosaProfileCompliance::findMatchedEntry(
   if (present.size() == 0)
     return {};
 
+  SmallVector<OpComplianceInfo<T>> matchedInfos;
   for (size_t i = 0; i < compInfo.size(); i++) {
     SmallVector<VersionedTypeInfo> sets = compInfo[i].operandTypeInfoSet;
     for (const auto &set : sets) {
@@ -587,12 +597,12 @@ OpComplianceInfo<T> TosaProfileCompliance::findMatchedEntry(
         SmallVector<VersionedTypeInfo> typeInfoSet{set};
         OpComplianceInfo<T> 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 at +1 {{'tosa.argmax' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.avg_pool2d' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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<i64: 2, 2>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.conv2d' op illegal: requires [int4] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, 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 at +1 {{'tosa.conv3d' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1, 1>, pad = array<i64: 0, 0, 0, 0, 0, 0>, stride = array<i64: 1, 1, 1>} : (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 at +1 {{'tosa.depthwise_conv2d' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.max_pool2d' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (tensor<1x32x32x8xi16>) -> tensor<1x32x32x8xi16>
   return %0 : tensor<1x32x32x8xi16>
 }
 
 // -----
 func.func @test_clamp(%arg0: tensor<13x21x3xi16>) -> tensor<13x21x3xi16> {
-  // expected-error at +1 {{'tosa.clamp' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sigmoid' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.tanh' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.add' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.maximum' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.mul' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pow' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sub' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.table' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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<?x?xi32>
   return
 }
 
 // -----
 func.func @test_abs(%arg0: tensor<13x21x3xbf16>) -> tensor<13x21x3xbf16> {
-  // expected-error at +1 {{'tosa.abs' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cos' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.exp' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.floor' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.log' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.negate' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reciprocal' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.rsqrt' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.equal' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_max' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pad' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reshape' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reverse' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.slice' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.tile' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +1 {{'tosa.transpose' op illegal: requires any of [bf16] profiles/extensions to be specified in the target environment}}
   %1 = tosa.transpose %arg0 {perms = array<i32: 2, 0, 1>} : (tensor<13x21x3xbf16>) -> tensor<3x13x21xbf16>
   return %1 : tensor<3x13x21xbf16>
 }
 
 // -----
 func.func @test_gather(%arg0: tensor<13x21x3xbf16>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xbf16> {
-  // expected-error at +1 {{'tosa.gather' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.scatter' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.resize' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.fft2d' op illegal: requires [fft] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [int4] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [int16] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.identity' op illegal: requires [int4] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.variable' op illegal: requires [variable] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.variable_read' op illegal: requires [variable]}}
+    // expected-error at +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 at +1 {{'tosa.variable' op illegal: requires [variable] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.variable_write' op illegal: requires [variable]}}
+    // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [bf16] but not enabled in target}}
+  // expected-error at +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<f32>, %arg1: tensor<f32>, %arg2: tensor<i1>) -> tensor<f32> {
-  // expected-error at +1 {{'tosa.cond_if' op illegal: requires [controlflow]}}
+  // expected-error at +1 {{'tosa.cond_if' op illegal: requires [controlflow] but not enabled in target}}
   %0 = tosa.cond_if %arg2 : tensor<i1> -> tensor<f32> {
     %1 = tosa.add %arg0, %arg1 : (tensor<f32>, tensor<f32>) -> tensor<f32>
     tosa.yield %1 : tensor<f32>
@@ -363,7 +363,7 @@ func.func @test_cond_if(%arg0: tensor<f32>, %arg1: tensor<f32>, %arg2: tensor<i1
 // -----
 func.func @test_while_loop(%arg0: tensor<10xi32>, %arg1: tensor<i32>) {
   %0 = "tosa.const"() {values = dense<0> : tensor<i32>} : () -> tensor<i32>
-  // expected-error at +1 {{'tosa.while_loop' op illegal: requires [controlflow]}}
+  // expected-error at +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<i32>, tensor<i32>, tensor<10xi32>) -> (tensor<i32>, tensor<i32>, tensor<10xi32>) {
     %2 = tosa.greater_equal %arg3, %arg1 : (tensor<i32>, tensor<i32>) -> tensor<i1>
     %3 = tosa.logical_not %2 : (tensor<i1>) -> tensor<i1>
@@ -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 at +1 {{'tosa.matmul_t_block_scaled' op illegal: requires [mxfp] but not enabled in target}}
+  // expected-error at +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<BLOCK_SIZE_32>} : (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 at +1 {{'tosa.argmax' op illegal: requires [int64] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [mxfp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast_from_block_scaled' op illegal: requires [mxfp] but not enabled in target}}
+  // expected-error at +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<BLOCK_SIZE_32> : 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 at +1 {{'tosa.cast_to_block_scaled' op illegal: requires [mxfp] but not enabled in target}}
+  // expected-error at +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<BLOCK_SIZE_32>} : (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 at +1 {{'tosa.conv2d_block_scaled' op illegal: requires [mxfp_conv] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.table' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<?x?xi8>
   return
 }
 
 // -----
 func.func @test_conv2d(%arg0: tensor<1x4x4x4xf32>, %arg1: tensor<8x1x1x4xf32>, %arg2: tensor<8xf32>, %arg3: tensor<1xf32>) -> tensor<1x4x4x8xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, 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 at +1 {{'tosa.avg_pool2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 2, 2>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.matmul' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sigmoid' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 0, 0, 0, 0>, out_shape = array<i64: 1, 32, 32, 16>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.add' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.add' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.intdiv' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_and' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_left_shift' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.mul' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sub' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.logical_not' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.select' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_all' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_any' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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<i32: 2, 0, 1>} : (tensor<13x21x3xi1>) -> tensor<3x13x21xi1>
   return %1 : tensor<3x13x21xi1>
 }
 
 // -----
 func.func @test_concat(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x21x3xf32>) -> tensor<26x21x3xf32> {
-  // expected-error at +1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.const' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pad' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.reshape' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reverse' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.slice' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +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 at +1 {{'tosa.tile' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose' op illegal: requires any of [pro_int, pro_fp] but not enabled in target}}
+  // expected-error at +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<i32: 2, 0, 1>} : (tensor<13x21x3xi1>) -> tensor<3x13x21xi1>
   return %1 : tensor<3x13x21xi1>
 }
 // -----
 func.func @test_cast_i32_f32(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xf32> {
-  // expected-error at +1 {{'tosa.cast' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.avg_pool2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 2, 2>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, 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 at +1 {{'tosa.conv3d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1, 1>, pad = array<i64: 0, 0, 0, 0, 0, 0>, stride = array<i64: 1, 1, 1>} : (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 at +1 {{'tosa.depthwise_conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.matmul' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sigmoid' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 0, 0, 0, 0>, out_shape = array<i64: 1, 32, 32, 16>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.max_pool2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.transpose_conv2d' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.clamp' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.add' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.maximum' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.mul' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pow' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sub' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.abs' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.ceil' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cos' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.exp' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.floor' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.log' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.negate' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reciprocal' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.rsqrt' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.select' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.sin' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.equal' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.greater' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_max' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_sum' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.concat' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.const' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pad' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reshape' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reverse' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.slice' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.tile' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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<i32: 2, 0, 1>}: (tensor<13x21x3xf32>) -> tensor<3x13x21xf32>
   return %1 : tensor<3x13x21xf32>
 }
 
 // -----
 func.func @test_gather(%arg0: tensor<13x21x3xf32>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xf32> {
-  // expected-error at +1 {{'tosa.gather' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.scatter' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.resize' op illegal: requires [pro_fp] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.argmax' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.avg_pool2d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 2, 2>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.conv2d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, 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 at +1 {{'tosa.conv3d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1, 1>, pad = array<i64: 0, 0, 0, 0, 0, 0>, stride = array<i64: 1, 1, 1>} : (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 at +1 {{'tosa.depthwise_conv2d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.matmul' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.max_pool2d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.transpose_conv2d' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.clamp' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.arithmetic_right_shift' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.bitwise_and' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.maximum' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.mul' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.table' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<?x?xi8>
   return
 }
 
 // -----
 func.func @test_abs(%arg0: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> {
-  // expected-error at +1 {{'tosa.abs' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.bitwise_not' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.clz' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.negate' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.select' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.equal' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.greater' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_max' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reduce_sum' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.pad' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reshape' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.reverse' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.slice' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.tile' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.transpose' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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<i32: 2, 0, 1>}: (tensor<13x21x3xi8>) -> tensor<3x13x21xi8>
   return %1 : tensor<3x13x21xi8>
 }
 
 // -----
 func.func @test_gather(%arg0: tensor<13x21x3xi32>, %arg1: tensor<13x26xi32>) -> tensor<13x26x3xi32> {
-  // expected-error at +1 {{'tosa.gather' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.scatter' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.resize' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.cast' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +1 {{'tosa.rescale' op illegal: requires [pro_int] but not enabled in target}}
+  // expected-error at +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 at +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 at +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 at +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 at +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 at +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 at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +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 at +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<i64: 1, 1, 1>, pad = array<i64: 0, 0, 0, 0, 0, 0>, stride = array<i64: 1, 1, 1>} : (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 at +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 at +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<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +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 at +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<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>} : (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 at +1 {{'tosa.gather' op illegal: requires [int64] but not enabled in target}}
+  // expected-error at +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 at +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 at +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 at +1 {{'tosa.scatter' op illegal: requires [int64] but not enabled in target}}
+  // expected-error at +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 at +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 at +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 at +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 at +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 at +1 {{'tosa.cast' op illegal: requires [int64] but not enabled in target}}
+  // expected-error at +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 at +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 at +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 at +1 {{'tosa.cast' op illegal: requires [int64] but not enabled in target}}
+  // expected-error at +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 at +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 at +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>
+}



More information about the Mlir-commits mailing list