[Mlir-commits] [mlir] 0a90c92 - [mlir] Remove remaining strict property assembly opt-outs (#226702)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sat Sep 26 07:20:04 PDT 2026


Author: Mehdi Amini
Date: 2026-09-26T14:19:56Z
New Revision: 0a90c92d5285cae7f7b7ae26573e39df5898cafc

URL: https://github.com/llvm/llvm-project/commit/0a90c92d5285cae7f7b7ae26573e39df5898cafc
DIFF: https://github.com/llvm/llvm-project/commit/0a90c92d5285cae7f7b7ae26573e39df5898cafc.diff

LOG: [mlir] Remove remaining strict property assembly opt-outs (#226702)

Migrate Toy, test, and Python dialect formats to use prop-dict for
inherent properties. Update assembly fixtures and expected output for
strict property printing.

Assisted-by: Codex

Added: 
    

Modified: 
    mlir/examples/toy/Ch4/include/toy/Ops.td
    mlir/examples/toy/Ch5/include/toy/Ops.td
    mlir/examples/toy/Ch6/include/toy/Ops.td
    mlir/examples/toy/Ch7/include/toy/Ops.td
    mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
    mlir/test/Analysis/DataFlow/test-last-modified.mlir
    mlir/test/Analysis/DataFlow/test-next-access.mlir
    mlir/test/Analysis/DataFlow/test-strided-metadata-range-analysis.mlir
    mlir/test/Dialect/Affine/affine-loop-normalize.mlir
    mlir/test/Dialect/Affine/int-range-interface.mlir
    mlir/test/Dialect/Affine/simplify-min-max-ops.mlir
    mlir/test/Dialect/Affine/simplify-with-bounds.mlir
    mlir/test/Dialect/Affine/transform-op-simplify-min-max-ops.mlir
    mlir/test/Dialect/Arith/int-range-analysis-convergence.mlir
    mlir/test/Dialect/Arith/int-range-interface.mlir
    mlir/test/Dialect/Arith/int-range-loop-iter-args.mlir
    mlir/test/Dialect/Arith/int-range-narrowing.mlir
    mlir/test/Dialect/Arith/int-range-opts-bug-119045.mlir
    mlir/test/Dialect/Arith/int-range-opts.mlir
    mlir/test/Dialect/GPU/int-range-interface-cluster.mlir
    mlir/test/Dialect/GPU/int-range-interface.mlir
    mlir/test/Dialect/MLProgram/pipeline-globals.mlir
    mlir/test/Dialect/MemRef/int-range-inference.mlir
    mlir/test/Dialect/OpenACC/acc-implicit-routine.mlir
    mlir/test/Dialect/Tensor/int-range-inference.mlir
    mlir/test/Dialect/Vector/int-range-interface.mlir
    mlir/test/IR/attribute.mlir
    mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops-invalid.mlir
    mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops.mlir
    mlir/test/Transforms/loop-invariant-code-motion.mlir
    mlir/test/Transforms/make-composed-folded-affine-apply.mlir
    mlir/test/lib/Dialect/Test/TestDialect.td
    mlir/test/lib/Dialect/Test/TestOps.td
    mlir/test/lib/Dialect/Test/TestOpsSyntax.td
    mlir/test/mlir-tblgen/constant-str-attr-invalid.mlir
    mlir/test/mlir-tblgen/op-format-invalid.td
    mlir/test/mlir-tblgen/op-format.mlir
    mlir/test/mlir-tblgen/op-format.td
    mlir/test/mlir-tblgen/pattern.mlir
    mlir/test/python/dialects/python_test.py
    mlir/test/python/python_test_ops.td

Removed: 
    


################################################################################
diff  --git a/mlir/examples/toy/Ch4/include/toy/Ops.td b/mlir/examples/toy/Ch4/include/toy/Ops.td
index ba751e0a01fbe..0568396c5b2c3 100644
--- a/mlir/examples/toy/Ch4/include/toy/Ops.td
+++ b/mlir/examples/toy/Ch4/include/toy/Ops.td
@@ -24,7 +24,6 @@ include "toy/ShapeInferenceInterface.td"
 // can define our operations.
 def Toy_Dialect : Dialect {
   let name = "toy";
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "::mlir::toy";
 }
 
@@ -229,7 +228,7 @@ def GenericCallOp : Toy_Op<"generic_call",
 
   // Specialize assembly printing and parsing using a declarative format.
   let assemblyFormat = [{
-    $callee `(` $inputs `)` attr-dict `:` functional-type($inputs, results)
+    $callee `(` $inputs `)` prop-dict attr-dict `:` functional-type($inputs, results)
   }];
 
   // Add custom build methods for the generic call operation.

diff  --git a/mlir/examples/toy/Ch5/include/toy/Ops.td b/mlir/examples/toy/Ch5/include/toy/Ops.td
index effd58aadc136..af7dc471d1708 100644
--- a/mlir/examples/toy/Ch5/include/toy/Ops.td
+++ b/mlir/examples/toy/Ch5/include/toy/Ops.td
@@ -24,7 +24,6 @@ include "toy/ShapeInferenceInterface.td"
 // can define our operations.
 def Toy_Dialect : Dialect {
   let name = "toy";
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "::mlir::toy";
 }
 
@@ -228,7 +227,7 @@ def GenericCallOp : Toy_Op<"generic_call",
 
   // Specialize assembly printing and parsing using a declarative format.
   let assemblyFormat = [{
-    $callee `(` $inputs `)` attr-dict `:` functional-type($inputs, results)
+    $callee `(` $inputs `)` prop-dict attr-dict `:` functional-type($inputs, results)
   }];
 
   // Add custom build methods for the generic call operation.

diff  --git a/mlir/examples/toy/Ch6/include/toy/Ops.td b/mlir/examples/toy/Ch6/include/toy/Ops.td
index ca06b55e43c97..19111d600135a 100644
--- a/mlir/examples/toy/Ch6/include/toy/Ops.td
+++ b/mlir/examples/toy/Ch6/include/toy/Ops.td
@@ -24,7 +24,6 @@ include "toy/ShapeInferenceInterface.td"
 // can define our operations.
 def Toy_Dialect : Dialect {
   let name = "toy";
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "::mlir::toy";
 }
 
@@ -228,7 +227,7 @@ def GenericCallOp : Toy_Op<"generic_call",
 
   // Specialize assembly printing and parsing using a declarative format.
   let assemblyFormat = [{
-    $callee `(` $inputs `)` attr-dict `:` functional-type($inputs, results)
+    $callee `(` $inputs `)` prop-dict attr-dict `:` functional-type($inputs, results)
   }];
 
   // Add custom build methods for the generic call operation.

diff  --git a/mlir/examples/toy/Ch7/include/toy/Ops.td b/mlir/examples/toy/Ch7/include/toy/Ops.td
index 1dbbf7eda284a..cc25615590dc1 100644
--- a/mlir/examples/toy/Ch7/include/toy/Ops.td
+++ b/mlir/examples/toy/Ch7/include/toy/Ops.td
@@ -24,7 +24,6 @@ include "toy/ShapeInferenceInterface.td"
 // can define our operations.
 def Toy_Dialect : Dialect {
   let name = "toy";
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "::mlir::toy";
 
   // We set this bit to generate a declaration of the `materializeConstant`
@@ -252,7 +251,7 @@ def GenericCallOp : Toy_Op<"generic_call",
 
   // Specialize assembly printing and parsing using a declarative format.
   let assemblyFormat = [{
-    $callee `(` $inputs `)` attr-dict `:` functional-type($inputs, results)
+    $callee `(` $inputs `)` prop-dict attr-dict `:` functional-type($inputs, results)
   }];
 
   // Add custom build methods for the generic call operation.

diff  --git a/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir b/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
index a5eba43ac68ab..1237733954088 100644
--- a/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
+++ b/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
@@ -169,7 +169,7 @@ func.func @call_and_store_before(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "before_call"} : memref<f32>
-  test.call_and_store @callee(%arg0), %arg0 {tag_name = "call", store_before_call = true} : (memref<f32>, memref<f32>) -> ()
+  test.call_and_store @callee(%arg0), %arg0 <store_before_call = true> {tag_name = "call"} : (memref<f32>, memref<f32>) -> ()
   memref.load %arg0[] {tag = "after_call"} : memref<f32>
   memref.store %1, %arg0[] {tag_name = "post"} : memref<f32>
   return {tag = "return"} %arg0 : memref<f32>
@@ -221,7 +221,7 @@ func.func @call_and_store_after(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "before_call"} : memref<f32>
-  test.call_and_store @callee(%arg0), %arg0 {tag_name = "call", store_before_call = false} : (memref<f32>, memref<f32>) -> ()
+  test.call_and_store @callee(%arg0), %arg0 <store_before_call = false> {tag_name = "call"} : (memref<f32>, memref<f32>) -> ()
   memref.load %arg0[] {tag = "after_call"} : memref<f32>
   memref.store %1, %arg0[] {tag_name = "post"} : memref<f32>
   return {tag = "return"} %arg0 : memref<f32>

diff  --git a/mlir/test/Analysis/DataFlow/test-last-modified.mlir b/mlir/test/Analysis/DataFlow/test-last-modified.mlir
index da22fdbf56e84..157a287801ad0 100644
--- a/mlir/test/Analysis/DataFlow/test-last-modified.mlir
+++ b/mlir/test/Analysis/DataFlow/test-last-modified.mlir
@@ -131,7 +131,7 @@ func.func @store_with_a_region_before(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_region_before::before"} : memref<f32>
-  test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = true } {
+  test.store_with_a_region %arg0 <store_before_region = true> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "inside_region"} : memref<f32>
     test.store_with_a_region_terminator
   } : memref<f32>
@@ -157,7 +157,7 @@ func.func @store_with_a_region_after(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_region_after::before"} : memref<f32>
-  test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = false } {
+  test.store_with_a_region %arg0 <store_before_region = false> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "inside_region"} : memref<f32>
     test.store_with_a_region_terminator
   } : memref<f32>
@@ -186,7 +186,7 @@ func.func @store_with_a_region_before_containing_a_store(%arg0: memref<f32>) ->
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_region_before_containing_a_store::before"} : memref<f32>
-  test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = true } {
+  test.store_with_a_region %arg0 <store_before_region = true> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "enter_region"} : memref<f32>
     %2 = arith.constant 2.0 : f32
     memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32>
@@ -218,7 +218,7 @@ func.func @store_with_a_region_after_containing_a_store(%arg0: memref<f32>) -> m
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_region_after_containing_a_store::before"} : memref<f32>
-  test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = false } {
+  test.store_with_a_region %arg0 <store_before_region = false> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "enter_region"} : memref<f32>
     %2 = arith.constant 2.0 : f32
     memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32>
@@ -247,7 +247,7 @@ func.func @store_with_a_loop_region_before(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_loop_region_before::before"} : memref<f32>
-  test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = true } {
+  test.store_with_a_loop_region %arg0 <store_before_region = true> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "inside_region"} : memref<f32>
     test.store_with_a_region_terminator
   } : memref<f32>
@@ -273,7 +273,7 @@ func.func @store_with_a_loop_region_after(%arg0: memref<f32>) -> memref<f32> {
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_loop_region_after::before"} : memref<f32>
-  test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = false } {
+  test.store_with_a_loop_region %arg0 <store_before_region = false> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "inside_region"} : memref<f32>
     test.store_with_a_region_terminator
   } : memref<f32>
@@ -304,7 +304,7 @@ func.func @store_with_a_loop_region_before_containing_a_store(%arg0: memref<f32>
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_loop_region_before_containing_a_store::before"} : memref<f32>
-  test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = true } {
+  test.store_with_a_loop_region %arg0 <store_before_region = true> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "enter_region"} : memref<f32>
     %2 = arith.constant 2.0 : f32
     memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32>
@@ -337,7 +337,7 @@ func.func @store_with_a_loop_region_after_containing_a_store(%arg0: memref<f32>)
   %1 = arith.constant 1.0 : f32
   memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32>
   memref.load %arg0[] {tag = "store_with_a_loop_region_after_containing_a_store::before"} : memref<f32>
-  test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = false } {
+  test.store_with_a_loop_region %arg0 <store_before_region = false> attributes {tag_name = "region"} {
     memref.load %arg0[] {tag = "enter_region"} : memref<f32>
     %2 = arith.constant 2.0 : f32
     memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32>

diff  --git a/mlir/test/Analysis/DataFlow/test-next-access.mlir b/mlir/test/Analysis/DataFlow/test-next-access.mlir
index 700a23aa8bc40..3a945898b2315 100644
--- a/mlir/test/Analysis/DataFlow/test-next-access.mlir
+++ b/mlir/test/Analysis/DataFlow/test-next-access.mlir
@@ -418,7 +418,7 @@ func.func @call_and_store_before(%arg0: memref<f32>) {
   // Note that the access after the entire call is "post".
   // CHECK:      name = "call"
   // CHECK-SAME: next_access = {{\[}}["post"], ["post"]]
-  test.call_and_store @callee(%arg0), %arg0 {name = "call", store_before_call = true} : (memref<f32>, memref<f32>) -> ()
+  test.call_and_store @callee(%arg0), %arg0 <store_before_call = true> {name = "call"} : (memref<f32>, memref<f32>) -> ()
   // CHECK:      name = "post"
   // CHECK-SAME: next_access = ["unknown"]
   memref.load %arg0[] {name = "post"} : memref<f32>
@@ -451,7 +451,7 @@ func.func @call_and_store_after(%arg0: memref<f32>) {
   memref.load %arg0[] {name = "caller"} : memref<f32>
   // CHECK:      name = "call"
   // CHECK-SAME: next_access = {{\[}}["post"], ["post"]]
-  test.call_and_store @callee(%arg0), %arg0 {name = "call", store_before_call = false} : (memref<f32>, memref<f32>) -> ()
+  test.call_and_store @callee(%arg0), %arg0 <store_before_call = false> {name = "call"} : (memref<f32>, memref<f32>) -> ()
   // CHECK:      name = "post"
   // CHECK-SAME: next_access = ["unknown"]
   memref.load %arg0[] {name = "post"} : memref<f32>
@@ -472,7 +472,7 @@ func.func @store_with_a_region_before(%arg0: memref<f32>) {
   // CHECK:              name = "region"
   // CHECK-SAME: next_access = {{\[}}["post"]]
   // CHECK-SAME: next_at_entry_point = {{\[}}{{\[}}["post"]]]
-  test.store_with_a_region %arg0 attributes { name = "region", store_before_region = true } {
+  test.store_with_a_region %arg0 <store_before_region = true> attributes {name = "region"} {
     test.store_with_a_region_terminator
   } : memref<f32>
   memref.load %arg0[] {name = "post"} : memref<f32>
@@ -491,7 +491,7 @@ func.func @store_with_a_region_after(%arg0: memref<f32>) {
   // CHECK:      name = "region"
   // CHECK-SAME: next_access = {{\[}}["post"]]
   // CHECK-SAME: next_at_entry_point = {{\[}}{{\[}}["region"]]]
-  test.store_with_a_region %arg0 attributes { name = "region", store_before_region = false } {
+  test.store_with_a_region %arg0 <store_before_region = false> attributes {name = "region"} {
     test.store_with_a_region_terminator
   } : memref<f32>
   memref.load %arg0[] {name = "post"} : memref<f32>
@@ -515,7 +515,7 @@ func.func @store_with_a_region_before_containing_a_load(%arg0: memref<f32>) {
   // CHECK:      name = "region"
   // CHECK-SAME: next_access = {{\[}}["post"]]
   // CHECK-SAME: next_at_entry_point = {{\[}}{{\[}}["inner"]]]
-  test.store_with_a_region %arg0 attributes { name = "region", store_before_region = true } {
+  test.store_with_a_region %arg0 <store_before_region = true> attributes {name = "region"} {
     // CHECK:      name = "inner"
     // CHECK-SAME: next_access = {{\[}}["post"]]
     memref.load %arg0[] {name = "inner"} : memref<f32>
@@ -544,7 +544,7 @@ func.func @store_with_a_region_after_containing_a_load(%arg0: memref<f32>) {
   // CHECK:      name = "region"
   // CHECK-SAME: next_access = {{\[}}["post"]]
   // CHECK-SAME: next_at_entry_point = {{\[}}{{\[}}["inner"]]]
-  test.store_with_a_region %arg0 attributes { name = "region", store_before_region = false } {
+  test.store_with_a_region %arg0 <store_before_region = false> attributes {name = "region"} {
     // CHECK:      name = "inner"
     // CHECK-SAME: next_access = {{\[}}["region"]]
     memref.load %arg0[] {name = "inner"} : memref<f32>

diff  --git a/mlir/test/Analysis/DataFlow/test-strided-metadata-range-analysis.mlir b/mlir/test/Analysis/DataFlow/test-strided-metadata-range-analysis.mlir
index 808c1c2bfd2a8..b0a984e4dae45 100644
--- a/mlir/test/Analysis/DataFlow/test-strided-metadata-range-analysis.mlir
+++ b/mlir/test/Analysis/DataFlow/test-strided-metadata-range-analysis.mlir
@@ -4,8 +4,8 @@ func.func @memref_subview(%arg0: memref<8x16x4xf32, strided<[64, 4, 1]>>, %arg1:
   %c0 = arith.constant 0 : index
   %c1 = arith.constant 1 : index
   %c2 = arith.constant 2 : index
-  %0 = test.with_bounds {smax = 13 : index, smin = 11 : index, umax = 13 : index, umin = 11 : index} : index
-  %1 = test.with_bounds {smax = 7 : index, smin = 5 : index, umax = 7 : index, umin = 5 : index} : index
+  %0 = test.with_bounds <smax = 13 : index, smin = 11 : index, umax = 13 : index, umin = 11 : index> : index
+  %1 = test.with_bounds <smax = 7 : index, smin = 5 : index, umax = 7 : index, umin = 5 : index> : index
 
   // Test subview with unknown sizes, and constant offsets and strides.
   // CHECK: Op:  %[[SV0:.*]] = memref.subview

diff  --git a/mlir/test/Dialect/Affine/affine-loop-normalize.mlir b/mlir/test/Dialect/Affine/affine-loop-normalize.mlir
index 879ccd798eba3..ab2c3d056e134 100644
--- a/mlir/test/Dialect/Affine/affine-loop-normalize.mlir
+++ b/mlir/test/Dialect/Affine/affine-loop-normalize.mlir
@@ -333,7 +333,7 @@ func.func @multi_level_tiled_matmul() {
 // USE-EXPENSIVE-MATH-LABEL: func @peeling_main_loop
 func.func @peeling_main_loop() {
   %c0 = arith.constant 0 : index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
+  %bound = test.value_with_bounds < min = 0, max = 1>
   affine.for %iv = %bound to 9 step 2 iter_args(%arg = %c0) -> index {
     %sum = arith.addi %arg, %bound : index
     affine.yield %sum : index
@@ -342,7 +342,7 @@ func.func @peeling_main_loop() {
 }
 
 // USE-EXPENSIVE-MATH: %[[C0:.*]] = arith.constant 0 : index
-// USE-EXPENSIVE-MATH: %[[BOUND:.*]] = test.value_with_bounds {max = 1 : index, min = 0 : index}
+// USE-EXPENSIVE-MATH: %[[BOUND:.*]] = test.value_with_bounds <min = 0, max = 1>
 // USE-EXPENSIVE-MATH: %[[MAIN_RES:.*]] = affine.for %[[IV_MAIN:.*]] = 0 to 4 iter_args(%[[ARG_MAIN:.*]] = %[[C0]]) -> (index)
 // USE-EXPENSIVE-MATH:   %{{.*}} = affine.apply #[[$MAP_APPLY]](%[[IV_MAIN]])[%[[BOUND]]]
 // USE-EXPENSIVE-MATH: %[[TAIL_RES:.*]] = affine.for %[[IV_TAIL:.*]] = 4 to #[[$MAP_UB]]()[%[[BOUND]]] iter_args(%[[ARG_TAIL:.*]] = %[[MAIN_RES]]) -> (index)
@@ -354,7 +354,7 @@ func.func @peeling_main_loop() {
 // USE-EXPENSIVE-MATH-LABEL: func @fully_constantized_no_peeling
 func.func @fully_constantized_no_peeling() {
   %c0 = arith.constant 0 : index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
+  %bound = test.value_with_bounds < min = 0, max = 1>
   affine.for %iv = %bound to 6 step 2 iter_args(%arg = %c0) -> index {
     %sum = arith.addi %arg, %bound : index
     affine.yield %sum : index
@@ -363,7 +363,7 @@ func.func @fully_constantized_no_peeling() {
 }
 
 // USE-EXPENSIVE-MATH: %[[C0:.*]] = arith.constant 0 : index
-// USE-EXPENSIVE-MATH: %[[BOUND:.*]] = test.value_with_bounds {max = 1 : index, min = 0 : index}
+// USE-EXPENSIVE-MATH: %[[BOUND:.*]] = test.value_with_bounds <min = 0, max = 1>
 // USE-EXPENSIVE-MATH: %{{.*}} = affine.for %[[IV:.*]] = 0 to 3 iter_args(%{{.*}} = %[[C0]]) -> (index)
 // USE-EXPENSIVE-MATH:   %{{.*}} = affine.apply #[[$MAP_APPLY]](%[[IV]])[%[[BOUND]]]
 
@@ -373,7 +373,7 @@ func.func @fully_constantized_no_peeling() {
 // USE-EXPENSIVE-MATH-LABEL: func @peel_nested_loops
 func.func @peel_nested_loops() {
   %c0 = arith.constant 0 : index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
+  %bound = test.value_with_bounds < min = 0, max = 1>
   affine.for %i = %bound to 7 step 2 {
     affine.for %j = %bound to 7 step 2 { 
       "test.foo"() : () -> ()
@@ -395,7 +395,7 @@ func.func @peel_nested_loops() {
 // USE-EXPENSIVE-MATH-AND-PROMOTE-LABEL: func @single_iter_promoted
 func.func @single_iter_promoted() {
   %c0 = arith.constant 0 :index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
+  %bound = test.value_with_bounds < min = 0, max = 1>
   affine.for %iv = %bound to 2 step 2 {
     "test.foo"() : () -> ()
   }
@@ -409,7 +409,7 @@ func.func @single_iter_promoted() {
 // USE-EXPENSIVE-MATH-AND-PROMOTE-LABEL: func @single_iter_promoted_with_remainder
 func.func @single_iter_promoted_with_remainder() {
   %c0 = arith.constant 0 : index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
+  %bound = test.value_with_bounds < min = 0, max = 1>
   affine.for %i = %bound to 3 step 2 {
     "test.foo"() : () -> ()
   }

diff  --git a/mlir/test/Dialect/Affine/int-range-interface.mlir b/mlir/test/Dialect/Affine/int-range-interface.mlir
index ac64ad09ee244..8dc12401ca142 100644
--- a/mlir/test/Dialect/Affine/int-range-interface.mlir
+++ b/mlir/test/Dialect/Affine/int-range-interface.mlir
@@ -1,7 +1,7 @@
 // RUN: mlir-opt --int-range-optimizations %s | FileCheck %s
 
 // CHECK-LABEL: func @affine_apply_constant
-// CHECK: test.reflect_bounds {smax = 42 : index, smin = 42 : index, umax = 42 : index, umin = 42 : index}
+// CHECK: test.reflect_bounds <umin = 42 : index, umax = 42 : index, smin = 42 : index, smax = 42 : index>
 func.func @affine_apply_constant() -> index {
   %0 = affine.apply affine_map<() -> (42)>()
   %1 = test.reflect_bounds %0 : index
@@ -9,66 +9,66 @@ func.func @affine_apply_constant() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_add
-// CHECK: test.reflect_bounds {smax = 15 : index, smin = 6 : index, umax = 15 : index, umin = 6 : index}
+// CHECK: test.reflect_bounds <umin = 6 : index, umax = 15 : index, smin = 6 : index, smax = 15 : index>
 func.func @affine_apply_add() -> index {
-  %d0 = test.with_bounds { umin = 2 : index, umax = 5 : index,
-                           smin = 2 : index, smax = 5 : index } : index
-  %d1 = test.with_bounds { umin = 4 : index, umax = 10 : index,
-                           smin = 4 : index, smax = 10 : index } : index
+  %d0 = test.with_bounds < umin = 2 : index, umax = 5 : index,
+                           smin = 2 : index, smax = 5 : index > : index
+  %d1 = test.with_bounds < umin = 4 : index, umax = 10 : index,
+                           smin = 4 : index, smax = 10 : index > : index
   %0 = affine.apply affine_map<(d0, d1) -> (d0 + d1)>(%d0, %d1)
   %1 = test.reflect_bounds %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @affine_apply_mul
-// CHECK: test.reflect_bounds {smax = 30 : index, smin = 12 : index, umax = 30 : index, umin = 12 : index}
+// CHECK: test.reflect_bounds <umin = 12 : index, umax = 30 : index, smin = 12 : index, smax = 30 : index>
 func.func @affine_apply_mul() -> index {
-  %d0 = test.with_bounds { umin = 2 : index, umax = 5 : index,
-                           smin = 2 : index, smax = 5 : index } : index
-  %s0 = test.with_bounds { umin = 6 : index, umax = 6 : index,
-                           smin = 6 : index, smax = 6 : index } : index
+  %d0 = test.with_bounds < umin = 2 : index, umax = 5 : index,
+                           smin = 2 : index, smax = 5 : index > : index
+  %s0 = test.with_bounds < umin = 6 : index, umax = 6 : index,
+                           smin = 6 : index, smax = 6 : index > : index
   %0 = affine.apply affine_map<(d0)[s0] -> (d0 * s0)>(%d0)[%s0]
   %1 = test.reflect_bounds %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @affine_apply_floordiv
-// CHECK: test.reflect_bounds {smax = 2 : index, smin = 1 : index, umax = 2 : index, umin = 1 : index}
+// CHECK: test.reflect_bounds <umin = 1 : index, umax = 2 : index, smin = 1 : index, smax = 2 : index>
 func.func @affine_apply_floordiv() -> index {
-  %d0 = test.with_bounds { umin = 5 : index, umax = 10 : index,
-                           smin = 5 : index, smax = 10 : index } : index
+  %d0 = test.with_bounds < umin = 5 : index, umax = 10 : index,
+                           smin = 5 : index, smax = 10 : index > : index
   %0 = affine.apply affine_map<(d0) -> (d0 floordiv 4)>(%d0)
   %1 = test.reflect_bounds %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @affine_apply_ceildiv
-// CHECK: test.reflect_bounds {smax = 3 : index, smin = 2 : index, umax = 3 : index, umin = 2 : index}
+// CHECK: test.reflect_bounds <umin = 2 : index, umax = 3 : index, smin = 2 : index, smax = 3 : index>
 func.func @affine_apply_ceildiv() -> index {
-  %d0 = test.with_bounds { umin = 5 : index, umax = 10 : index,
-                           smin = 5 : index, smax = 10 : index } : index
+  %d0 = test.with_bounds < umin = 5 : index, umax = 10 : index,
+                           smin = 5 : index, smax = 10 : index > : index
   %0 = affine.apply affine_map<(d0) -> (d0 ceildiv 4)>(%d0)
   %1 = test.reflect_bounds %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @affine_apply_mod
-// CHECK: test.reflect_bounds {smax = 3 : index, smin = 0 : index, umax = 3 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 3 : index, smin = 0 : index, smax = 3 : index>
 func.func @affine_apply_mod() -> index {
-  %d0 = test.with_bounds { umin = 5 : index, umax = 27 : index,
-                           smin = 5 : index, smax = 27 : index } : index
+  %d0 = test.with_bounds < umin = 5 : index, umax = 27 : index,
+                           smin = 5 : index, smax = 27 : index > : index
   %0 = affine.apply affine_map<(d0) -> (d0 mod 4)>(%d0)
   %1 = test.reflect_bounds %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @affine_apply_complex
-// CHECK: test.reflect_bounds {smax = 13 : index, smin = 5 : index, umax = 13 : index, umin = 5 : index}
+// CHECK: test.reflect_bounds <umin = 5 : index, umax = 13 : index, smin = 5 : index, smax = 13 : index>
 func.func @affine_apply_complex() -> index {
-  %d0 = test.with_bounds { umin = 10 : index, umax = 20 : index,
-                           smin = 10 : index, smax = 20 : index } : index
-  %d1 = test.with_bounds { umin = 3 : index, umax = 7 : index,
-                           smin = 3 : index, smax = 7 : index } : index
+  %d0 = test.with_bounds < umin = 10 : index, umax = 20 : index,
+                           smin = 10 : index, smax = 20 : index > : index
+  %d1 = test.with_bounds < umin = 3 : index, umax = 7 : index,
+                           smin = 3 : index, smax = 7 : index > : index
   // (d0 floordiv 2) + (d1 mod 4) = [5, 10] + [0, 3] = [5, 13]
   %0 = affine.apply affine_map<(d0, d1) -> (d0 floordiv 2 + d1 mod 4)>(%d0, %d1)
   %1 = test.reflect_bounds %0 : index
@@ -76,12 +76,12 @@ func.func @affine_apply_complex() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_with_symbols
-// CHECK: test.reflect_bounds {smax = 24 : index, smin = 9 : index, umax = 24 : index, umin = 9 : index}
+// CHECK: test.reflect_bounds <umin = 9 : index, umax = 24 : index, smin = 9 : index, smax = 24 : index>
 func.func @affine_apply_with_symbols() -> index {
-  %d0 = test.with_bounds { umin = 2 : index, umax = 5 : index,
-                           smin = 2 : index, smax = 5 : index } : index
-  %s0 = test.with_bounds { umin = 3 : index, umax = 4 : index,
-                           smin = 3 : index, smax = 4 : index } : index
+  %d0 = test.with_bounds < umin = 2 : index, umax = 5 : index,
+                           smin = 2 : index, smax = 5 : index > : index
+  %s0 = test.with_bounds < umin = 3 : index, umax = 4 : index,
+                           smin = 3 : index, smax = 4 : index > : index
   // d0 * s0 + s0 = s0 * (d0 + 1) = [3, 4] * [3, 6] = [9, 24]
   %0 = affine.apply affine_map<(d0)[s0] -> (d0 * s0 + s0)>(%d0)[%s0]
   %1 = test.reflect_bounds %0 : index
@@ -89,12 +89,12 @@ func.func @affine_apply_with_symbols() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_sub
-// CHECK: test.reflect_bounds {smax = 1 : index, smin = -8 : index
+// CHECK: test.reflect_bounds <{{.*}}smin = -8 : index, smax = 1 : index>
 func.func @affine_apply_sub() -> index {
-  %d0 = test.with_bounds { umin = 2 : index, umax = 5 : index,
-                           smin = 2 : index, smax = 5 : index } : index
-  %d1 = test.with_bounds { umin = 4 : index, umax = 10 : index,
-                           smin = 4 : index, smax = 10 : index } : index
+  %d0 = test.with_bounds < umin = 2 : index, umax = 5 : index,
+                           smin = 2 : index, smax = 5 : index > : index
+  %d1 = test.with_bounds < umin = 4 : index, umax = 10 : index,
+                           smin = 4 : index, smax = 10 : index > : index
   // d0 - d1 = [2, 5] - [4, 10] = [2-10, 5-4] = [-8, 1]
   %0 = affine.apply affine_map<(d0, d1) -> (d0 - d1)>(%d0, %d1)
   %1 = test.reflect_bounds %0 : index
@@ -102,10 +102,10 @@ func.func @affine_apply_sub() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mul_constant
-// CHECK: test.reflect_bounds {smax = 20 : index, smin = 8 : index, umax = 20 : index, umin = 8 : index}
+// CHECK: test.reflect_bounds <umin = 8 : index, umax = 20 : index, smin = 8 : index, smax = 20 : index>
 func.func @affine_apply_mul_constant() -> index {
-  %d0 = test.with_bounds { umin = 2 : index, umax = 5 : index,
-                           smin = 2 : index, smax = 5 : index } : index
+  %d0 = test.with_bounds < umin = 2 : index, umax = 5 : index,
+                           smin = 2 : index, smax = 5 : index > : index
   // d0 * 4 = [2, 5] * 4 = [8, 20]
   %0 = affine.apply affine_map<(d0) -> (d0 * 4)>(%d0)
   %1 = test.reflect_bounds %0 : index
@@ -113,10 +113,10 @@ func.func @affine_apply_mul_constant() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mod_small_range
-// CHECK: test.reflect_bounds {smax = 2 : index, smin = 1 : index, umax = 2 : index, umin = 1 : index}
+// CHECK: test.reflect_bounds <umin = 1 : index, umax = 2 : index, smin = 1 : index, smax = 2 : index>
 func.func @affine_apply_mod_small_range() -> index {
-  %d0 = test.with_bounds { umin = 5 : index, umax = 6 : index,
-                           smin = 5 : index, smax = 6 : index } : index
+  %d0 = test.with_bounds < umin = 5 : index, umax = 6 : index,
+                           smin = 5 : index, smax = 6 : index > : index
   // Small range optimization: 5 mod 4 = 1, 6 mod 4 = 2, so [1, 2]
   %0 = affine.apply affine_map<(d0) -> (d0 mod 4)>(%d0)
   %1 = test.reflect_bounds %0 : index
@@ -124,10 +124,10 @@ func.func @affine_apply_mod_small_range() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mod_already_in_range
-// CHECK: test.reflect_bounds {smax = 7 : index, smin = 5 : index, umax = 7 : index, umin = 5 : index}
+// CHECK: test.reflect_bounds <umin = 5 : index, umax = 7 : index, smin = 5 : index, smax = 7 : index>
 func.func @affine_apply_mod_already_in_range() -> index {
-  %d0 = test.with_bounds { umin = 5 : index, umax = 7 : index,
-                           smin = 5 : index, smax = 7 : index } : index
+  %d0 = test.with_bounds < umin = 5 : index, umax = 7 : index,
+                           smin = 5 : index, smax = 7 : index > : index
   // Dividend [5, 7] already in [0, 10), result equals dividend: [5, 7]
   %0 = affine.apply affine_map<(d0) -> (d0 mod 10)>(%d0)
   %1 = test.reflect_bounds %0 : index
@@ -135,12 +135,12 @@ func.func @affine_apply_mod_already_in_range() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mod_variable_divisor
-// CHECK: test.reflect_bounds {smax = 4 : index, smin = 0 : index, umax = 4 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 4 : index, smin = 0 : index, smax = 4 : index>
 func.func @affine_apply_mod_variable_divisor() -> index {
-  %d0 = test.with_bounds { umin = 10 : index, umax = 20 : index,
-                           smin = 10 : index, smax = 20 : index } : index
-  %s0 = test.with_bounds { umin = 3 : index, umax = 5 : index,
-                           smin = 3 : index, smax = 5 : index } : index
+  %d0 = test.with_bounds < umin = 10 : index, umax = 20 : index,
+                           smin = 10 : index, smax = 20 : index > : index
+  %s0 = test.with_bounds < umin = 3 : index, umax = 5 : index,
+                           smin = 3 : index, smax = 5 : index > : index
   // s0 can be 3, 4, or 5, so result is [0, max(s0)-1] = [0, 4]
   %0 = affine.apply affine_map<(d0)[s0] -> (d0 mod s0)>(%d0)[%s0]
   %1 = test.reflect_bounds %0 : index
@@ -148,10 +148,10 @@ func.func @affine_apply_mod_variable_divisor() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mod_cross_boundary
-// CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
 func.func @affine_apply_mod_cross_boundary() -> index {
-  %d0 = test.with_bounds { umin = 14 : index, umax = 17 : index,
-                           smin = 14 : index, smax = 17 : index } : index
+  %d0 = test.with_bounds < umin = 14 : index, umax = 17 : index,
+                           smin = 14 : index, smax = 17 : index > : index
   // Range [14, 17] spans a mod-8 boundary (at 16): 14%8=6, 17%8=1.
   // Span 3 < 8 but the range wraps, so we fall back to [0, 7].
   %0 = affine.apply affine_map<(d0) -> (d0 mod 8)>(%d0)
@@ -160,10 +160,10 @@ func.func @affine_apply_mod_cross_boundary() -> index {
 }
 
 // CHECK-LABEL: func @affine_apply_mod_negative_dividend
-// CHECK: test.reflect_bounds {smax = 3 : index, smin = 0 : index, umax = 3 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 3 : index, smin = 0 : index, smax = 3 : index>
 func.func @affine_apply_mod_negative_dividend() -> index {
-  %d0 = test.with_bounds { umin = 0 : index, umax = 2 : index,
-                           smin = -2 : index, smax = 2 : index } : index
+  %d0 = test.with_bounds < umin = 0 : index, umax = 2 : index,
+                           smin = -2 : index, smax = 2 : index > : index
   // Negative dividend: signed range [-2, 2] mod 4
   // Actual results: -2->2, -1->3, 0->0, 1->1, 2->2 (Euclidean mod)
   // Range is NOT contiguous, so we return conservative [0, 3]

diff  --git a/mlir/test/Dialect/Affine/simplify-min-max-ops.mlir b/mlir/test/Dialect/Affine/simplify-min-max-ops.mlir
index 300486eb1366b..96e3c32f6d49f 100644
--- a/mlir/test/Dialect/Affine/simplify-min-max-ops.mlir
+++ b/mlir/test/Dialect/Affine/simplify-min-max-ops.mlir
@@ -6,10 +6,10 @@
 
 // CHECK: @min_max_full_simplify
 func.func @min_max_full_simplify() -> (index, index) {
-  %0 = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 256 : index}
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 128>
+  %1 = test.value_with_bounds <min = 256, max = 512>
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 128>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK-NOT: affine.min
   // CHECK-NOT: affine.max
   // CHECK: return %[[V0]], %[[V1]]
@@ -20,12 +20,12 @@ func.func @min_max_full_simplify() -> (index, index) {
 
 // CHECK: @min_only_simplify
 func.func @min_only_simplify() -> (index, index) {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 512 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 512>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK: affine.min #[[MAP_0]]()[%[[V0]]]
   // CHECK: affine.max #[[MAP_1]]()[%[[V0]], %[[V1]]]
-  %0 = test.value_with_bounds {max = 512 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 512>
+  %1 = test.value_with_bounds <min = 256, max = 512>
   %r0 = affine.min affine_map<()[s0, s1] -> (s0, 32, s1)>()[%0, %1]
   %r1 = affine.max affine_map<()[s0, s1] -> (s0, 32, s1)>()[%0, %1]
   return %r0, %r1 : index, index
@@ -33,12 +33,12 @@ func.func @min_only_simplify() -> (index, index) {
 
 // CHECK: @max_only_simplify
 func.func @max_only_simplify() -> (index, index) {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 0 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 128>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 0, max = 512>
   // CHECK: affine.min #[[MAP_1]]()[%[[V0]], %[[V1]]]
   // CHECK: affine.max #[[MAP_2]]()[%[[V1]]]
-  %0 = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 0 : index}
+  %0 = test.value_with_bounds <min = 0, max = 128>
+  %1 = test.value_with_bounds <min = 0, max = 512>
   %r0 = affine.min affine_map<()[s0, s1] -> (s0, 256, s1)>()[%0, %1]
   %r1 = affine.max affine_map<()[s0, s1] -> (s0, 256, s1)>()[%0, %1]
   return %r0, %r1 : index, index
@@ -46,12 +46,12 @@ func.func @max_only_simplify() -> (index, index) {
 
 // CHECK: @overlapping_constraints
 func.func @overlapping_constraints() -> (index, index) {
-  %0 = test.value_with_bounds {max = 192 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 384 : index, min = 128 : index}
-  %2 = test.value_with_bounds {max = 512 : index, min = 256 : index}
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 192 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 384 : index, min = 128 : index}
-  // CHECK: %[[V2:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 192>
+  %1 = test.value_with_bounds <min = 128, max = 384>
+  %2 = test.value_with_bounds <min = 256, max = 512>
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 192>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 128, max = 384>
+  // CHECK: %[[V2:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK: affine.min #[[MAP_1]]()[%[[V0]], %[[V1]]]
   // CHECK: affine.max #[[MAP_1]]()[%[[V1]], %[[V2]]]
   %r0 = affine.min affine_map<()[s0, s1, s2] -> (s0, s1, s2)>()[%0, %1, %2]

diff  --git a/mlir/test/Dialect/Affine/simplify-with-bounds.mlir b/mlir/test/Dialect/Affine/simplify-with-bounds.mlir
index 6cf474076f6fa..347b65ca0c987 100644
--- a/mlir/test/Dialect/Affine/simplify-with-bounds.mlir
+++ b/mlir/test/Dialect/Affine/simplify-with-bounds.mlir
@@ -174,9 +174,9 @@ func.func @input_not_linearize(%x: index) -> (index, index) {
 func.func @simplify_loop_bound() -> index{
   %c0 = arith.constant 0 :index
   %c1 = arith.constant 1 : index
-  %bound = test.value_with_bounds { min = 0 : index, max = 1 : index}
-  %bound1 = test.value_with_bounds { min = 2 : index, max = 3 : index}
-  %bound2 = test.value_with_bounds { min = 2 : index, max = 3 : index} 
+  %bound = test.value_with_bounds < min = 0, max = 1>
+  %bound1 = test.value_with_bounds < min = 2, max = 3>
+  %bound2 = test.value_with_bounds < min = 2, max = 3>
   %res = affine.for %iv = max affine_map<(d0, d1, d2) -> (d0, d1,d2)>(%bound, %bound1,%bound2) to min affine_map<(d0, d1, d2) -> (d0, d1,d2)>(%bound, %bound1,%bound2) step 2 iter_args(%arg = %c0) -> index {
       %sum = arith.addi %arg, %c1 : index
       affine.yield %sum : index
@@ -186,9 +186,9 @@ func.func @simplify_loop_bound() -> index{
 
 // CHECK-DAG: %[[C0:.*]] = arith.constant 0 : index
 // CHECK-DAG: %[[C1:.*]] = arith.constant 1 : index
-// CHECK-DAG: %[[BOUND0:.*]] = test.value_with_bounds {max = 1 : index, min = 0 : index}
-// CHECK-DAG: %[[BOUND1:.*]] = test.value_with_bounds {max = 3 : index, min = 2 : index}
-// CHECK-DAG: %[[BOUND2:.*]] = test.value_with_bounds {max = 3 : index, min = 2 : index}
+// CHECK-DAG: %[[BOUND0:.*]] = test.value_with_bounds <min = 0, max = 1>
+// CHECK-DAG: %[[BOUND1:.*]] = test.value_with_bounds <min = 2, max = 3>
+// CHECK-DAG: %[[BOUND2:.*]] = test.value_with_bounds <min = 2, max = 3>
 //     CHECK: affine.for %[[IV:.*]] = max #[[$MAP]]()[%[[BOUND1]], %[[BOUND2]]] to %[[BOUND0]] step 2 iter_args(%[[ARG:.*]] = %[[C0]]) -> (index) {
 //     CHECK:   %[[SUM:.*]] = arith.addi %[[ARG]], %[[C1]] : index
 //     CHECK:   affine.yield %[[SUM]] : index

diff  --git a/mlir/test/Dialect/Affine/transform-op-simplify-min-max-ops.mlir b/mlir/test/Dialect/Affine/transform-op-simplify-min-max-ops.mlir
index aa9bdf2b34eb9..64f8ddc78361b 100644
--- a/mlir/test/Dialect/Affine/transform-op-simplify-min-max-ops.mlir
+++ b/mlir/test/Dialect/Affine/transform-op-simplify-min-max-ops.mlir
@@ -6,10 +6,10 @@
 
 // CHECK: @min_max_full_simplify
 func.func @min_max_full_simplify() -> (index, index) {
-  %0 = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 256 : index}
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 128>
+  %1 = test.value_with_bounds <min = 256, max = 512>
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 128>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK-NOT: affine.min
   // CHECK-NOT: affine.max
   // CHECK: return %[[V0]], %[[V1]]
@@ -20,12 +20,12 @@ func.func @min_max_full_simplify() -> (index, index) {
 
 // CHECK: @min_only_simplify
 func.func @min_only_simplify() -> (index, index) {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 512 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 512>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK: affine.min #[[MAP_0]]()[%[[V0]]]
   // CHECK: affine.max #[[MAP_1]]()[%[[V0]], %[[V1]]]
-  %0 = test.value_with_bounds {max = 512 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 512>
+  %1 = test.value_with_bounds <min = 256, max = 512>
   %r0 = affine.min affine_map<()[s0, s1] -> (s0, 32, s1)>()[%0, %1]
   %r1 = affine.max affine_map<()[s0, s1] -> (s0, 32, s1)>()[%0, %1]
   return %r0, %r1 : index, index
@@ -33,12 +33,12 @@ func.func @min_only_simplify() -> (index, index) {
 
 // CHECK: @max_only_simplify
 func.func @max_only_simplify() -> (index, index) {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 512 : index, min = 0 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 128>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 0, max = 512>
   // CHECK: affine.min #[[MAP_1]]()[%[[V0]], %[[V1]]]
   // CHECK: affine.max #[[MAP_2]]()[%[[V1]]]
-  %0 = test.value_with_bounds {max = 128 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 512 : index, min = 0 : index}
+  %0 = test.value_with_bounds <min = 0, max = 128>
+  %1 = test.value_with_bounds <min = 0, max = 512>
   %r0 = affine.min affine_map<()[s0, s1] -> (s0, 256, s1)>()[%0, %1]
   %r1 = affine.max affine_map<()[s0, s1] -> (s0, 256, s1)>()[%0, %1]
   return %r0, %r1 : index, index
@@ -46,12 +46,12 @@ func.func @max_only_simplify() -> (index, index) {
 
 // CHECK: @overlapping_constraints
 func.func @overlapping_constraints() -> (index, index) {
-  %0 = test.value_with_bounds {max = 192 : index, min = 0 : index}
-  %1 = test.value_with_bounds {max = 384 : index, min = 128 : index}
-  %2 = test.value_with_bounds {max = 512 : index, min = 256 : index}
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 192 : index, min = 0 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 384 : index, min = 128 : index}
-  // CHECK: %[[V2:.*]] = test.value_with_bounds {max = 512 : index, min = 256 : index}
+  %0 = test.value_with_bounds <min = 0, max = 192>
+  %1 = test.value_with_bounds <min = 128, max = 384>
+  %2 = test.value_with_bounds <min = 256, max = 512>
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 0, max = 192>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 128, max = 384>
+  // CHECK: %[[V2:.*]] = test.value_with_bounds <min = 256, max = 512>
   // CHECK: affine.min #[[MAP_1]]()[%[[V0]], %[[V1]]]
   // CHECK: affine.max #[[MAP_1]]()[%[[V1]], %[[V2]]]
   %r0 = affine.min affine_map<()[s0, s1, s2] -> (s0, s1, s2)>()[%0, %1, %2]

diff  --git a/mlir/test/Dialect/Arith/int-range-analysis-convergence.mlir b/mlir/test/Dialect/Arith/int-range-analysis-convergence.mlir
index a932d4b699a89..93fc0ac32f48f 100644
--- a/mlir/test/Dialect/Arith/int-range-analysis-convergence.mlir
+++ b/mlir/test/Dialect/Arith/int-range-analysis-convergence.mlir
@@ -70,7 +70,7 @@ func.func @grouped_gemm_while_hang(%n: i32, %flag: i1) -> i32 {
       // The yielded `arith.remui` result stays at [0, 126]: the widening
       // budget only fires on virtual `Lattice::join` at framework merge
       // sites, not on transfer-function joins for inferrable ops.
-      // CHECK: test.reflect_bounds {smax = 126 : si32, smin = 0 : si32, umax = 126 : ui32, umin = 0 : ui32}
+      // CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 126 : ui32, smin = 0 : si32, smax = 126 : si32>
       %r_l1 = test.reflect_bounds %L1 : i32
       scf.yield %L1, %nic : i32, i1
     }
@@ -83,7 +83,7 @@ func.func @grouped_gemm_while_hang(%n: i32, %flag: i1) -> i32 {
   // presence of these bounds here is the convergence assertion: without
   // the patch the analysis would not terminate to print this attribute.
   // CHECK: %[[BOUNDED:.*]] = test.reflect_bounds
-  // CHECK-SAME: {smax = 2147483647 : si32, smin = -2147483648 : si32, umax = 4294967295 : ui32, umin = 0 : ui32}
+  // CHECK-SAME: <umin = 0 : ui32, umax = 4294967295 : ui32, smin = -2147483648 : si32, smax = 2147483647 : si32>
   // CHECK-SAME: %[[OUTER]]#0 : i32
   %r = test.reflect_bounds %res#0 : i32
   // CHECK: return %[[BOUNDED]] : i32

diff  --git a/mlir/test/Dialect/Arith/int-range-interface.mlir b/mlir/test/Dialect/Arith/int-range-interface.mlir
index dd8240299ef7e..e2f8ac72d56e9 100644
--- a/mlir/test/Dialect/Arith/int-range-interface.mlir
+++ b/mlir/test/Dialect/Arith/int-range-interface.mlir
@@ -229,7 +229,7 @@ func.func @ceil_divui(%arg0 : index) -> i1 {
 // CHECK-LABEL: func @ceil_divui_by_zero_issue_131273
 // CHECK-NEXT: return
 func.func @ceil_divui_by_zero_issue_131273() {
-    %0 = test.with_bounds {smax = 0 : i32, smin = -1 : i32, umax = 0 : i32, umin = -1 : i32} : i32
+    %0 = test.with_bounds <smax = 0 : i32, smin = -1 : i32, umax = 0 : i32, umin = -1 : i32> : i32
     %c7_i32 = arith.constant 7 : i32
     %1 = arith.ceildivui %c7_i32, %0 : i32
     return
@@ -276,9 +276,9 @@ func.func @ceil_divsi_full_range(%6: index) -> index {
 // CHECK: %[[ret:.*]] = arith.constant true
 // CHECK: return %[[ret]]
 func.func @ceil_divsi_intmin_bug_115293() -> i1 {
-    %intMin_i64 = test.with_bounds { smin = -9223372036854775808 : si64, smax = -9223372036854775808 : si64, umin = 9223372036854775808 : ui64, umax = 9223372036854775808 : ui64 } : i64
-    %denom_i64 = test.with_bounds { smin = 1189465982 : si64, smax = 1189465982 : si64, umin = 1189465982 : ui64, umax = 1189465982 : ui64 } : i64
-    %res_i64 = test.with_bounds { smin = 7754212542 : si64, smax = 7754212542 : si64, umin = 7754212542 : ui64, umax = 7754212542 : ui64 }  : i64
+    %intMin_i64 = test.with_bounds < smin = -9223372036854775808 : si64, smax = -9223372036854775808 : si64, umin = 9223372036854775808 : ui64, umax = 9223372036854775808 : ui64 > : i64
+    %denom_i64 = test.with_bounds < smin = 1189465982 : si64, smax = 1189465982 : si64, umin = 1189465982 : ui64, umax = 1189465982 : ui64 > : i64
+    %res_i64 = test.with_bounds < smin = 7754212542 : si64, smax = 7754212542 : si64, umin = 7754212542 : ui64, umax = 7754212542 : ui64 >  : i64
 
     %0 = arith.ceildivsi %intMin_i64, %denom_i64 : i64
     %1 = arith.cmpi eq, %0, %res_i64 : i64
@@ -484,7 +484,7 @@ func.func @ori(%arg0 : i128, %arg1 : i128) -> i1 {
 func.func @xori_issue_82168() -> i1 {
     %c0_i64 = arith.constant 0 : i64
     %c2060639849_i64 = arith.constant 2060639849 : i64
-    %2 = test.with_bounds { umin = 2060639849 : i64, umax = 2060639850 : i64, smin = 2060639849 : i64, smax = 2060639850 : i64 } : i64
+    %2 = test.with_bounds < umin = 2060639849 : i64, umax = 2060639850 : i64, smin = 2060639849 : i64, smax = 2060639850 : i64 > : i64
     %3 = arith.xori %2, %c2060639849_i64 : i64
     %4 = arith.cmpi eq, %3, %c0_i64 : i64
     func.return %4 : i1
@@ -496,8 +496,8 @@ func.func @xori_issue_82168() -> i1 {
 //       CHECK: return %[[true]], %[[false]]
 func.func @xori_i1() -> (i1, i1) {
     %true = arith.constant true
-    %1 = test.with_bounds { umin = 0 : i1, umax = 0 : i1, smin = 0 : i1, smax = 0 : i1 } : i1
-    %2 = test.with_bounds { umin = 1 : i1, umax = 1 : i1, smin = 1 : i1, smax = 1 : i1 } : i1
+    %1 = test.with_bounds < umin = 0 : i1, umax = 0 : i1, smin = 0 : i1, smax = 0 : i1 > : i1
+    %2 = test.with_bounds < umin = 1 : i1, umax = 1 : i1, smin = 1 : i1, smax = 1 : i1 > : i1
     %3 = arith.xori %1, %true : i1
     %4 = arith.xori %2, %true : i1
     func.return %3, %4 : i1, i1
@@ -864,20 +864,20 @@ func.func private @callee(%arg0: memref<?xindex, 4>) {
 }
 
 // CHECK-LABEL: func @test_i8_bounds
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 255 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_i8_bounds() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 255 : i8, smin = -128 : i8, smax = 127 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 255 : i8, smin = -128 : i8, smax = 127 : i8 > : i8
   %1 = arith.addi %0, %cst1 : i8
   %2 = test.reflect_bounds %1 : i8
   return %2: i8
 }
 
 // CHECK-LABEL: func @test_add_1
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 255 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_add_1() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 255 : i8, smin = -128 : i8, smax = 127 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 255 : i8, smin = -128 : i8, smax = 127 : i8 > : i8
   %1 = arith.addi %0, %cst1 : i8
   %2 = test.reflect_bounds %1 : i8
   return %2: i8
@@ -886,10 +886,10 @@ func.func @test_add_1() -> i8 {
 // Tests below check inference with overflow flags.
 
 // CHECK-LABEL: func @test_add_i8_wrap1
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 128 : ui8, umin = 1 : ui8}
+// CHECK: test.reflect_bounds <umin = 1 : ui8, umax = 128 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_add_i8_wrap1() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 > : i8
   // smax overflow
   %1 = arith.addi %0, %cst1 : i8
   %2 = test.reflect_bounds %1 : i8
@@ -897,10 +897,10 @@ func.func @test_add_i8_wrap1() -> i8 {
 }
 
 // CHECK-LABEL: func @test_add_i8_wrap2
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 128 : ui8, umin = 1 : ui8}
+// CHECK: test.reflect_bounds <umin = 1 : ui8, umax = 128 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_add_i8_wrap2() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 > : i8
   // smax overflow
   %1 = arith.addi %0, %cst1 overflow<nuw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -908,10 +908,10 @@ func.func @test_add_i8_wrap2() -> i8 {
 }
 
 // CHECK-LABEL: func @test_add_i8_nowrap
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = 1 : si8, umax = 127 : ui8, umin = 1 : ui8}
+// CHECK: test.reflect_bounds <umin = 1 : ui8, umax = 127 : ui8, smin = 1 : si8, smax = 127 : si8>
 func.func @test_add_i8_nowrap() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 > : i8
   // nsw flag stops smax from overflowing
   %1 = arith.addi %0, %cst1 overflow<nsw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -919,10 +919,10 @@ func.func @test_add_i8_nowrap() -> i8 {
 }
 
 // CHECK-LABEL: func @test_sub_i8_wrap1
-// CHECK: test.reflect_bounds {smax = 5 : si8, smin = -10 : si8, umax = 255 : ui8, umin = 0 : ui8} %1 : i8
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -10 : si8, smax = 5 : si8> %1 : i8
 func.func @test_sub_i8_wrap1() -> i8 {
   %cst10 = arith.constant 10 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 > : i8
   // umin underflows
   %1 = arith.subi %0, %cst10 : i8
   %2 = test.reflect_bounds %1 : i8
@@ -930,10 +930,10 @@ func.func @test_sub_i8_wrap1() -> i8 {
 }
 
 // CHECK-LABEL: func @test_sub_i8_wrap2
-// CHECK: test.reflect_bounds {smax = 5 : si8, smin = -10 : si8, umax = 255 : ui8, umin = 0 : ui8} %1 : i8
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -10 : si8, smax = 5 : si8> %1 : i8
 func.func @test_sub_i8_wrap2() -> i8 {
   %cst10 = arith.constant 10 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 > : i8
   // umin underflows
   %1 = arith.subi %0, %cst10 overflow<nsw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -941,10 +941,10 @@ func.func @test_sub_i8_wrap2() -> i8 {
 }
 
 // CHECK-LABEL: func @test_sub_i8_nowrap
-// CHECK: test.reflect_bounds {smax = 5 : si8, smin = 0 : si8, umax = 5 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 5 : ui8, smin = 0 : si8, smax = 5 : si8>
 func.func @test_sub_i8_nowrap() -> i8 {
   %cst10 = arith.constant 10 : i8
-  %0 = test.with_bounds { umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 } : i8
+  %0 = test.with_bounds < umin = 0 : i8, umax = 15 : i8, smin = 0 : i8, smax = 15 : i8 > : i8
   // nuw flag stops umin from underflowing
   %1 = arith.subi %0, %cst10 overflow<nuw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -952,10 +952,10 @@ func.func @test_sub_i8_nowrap() -> i8 {
 }
 
 // CHECK-LABEL: func @test_mul_i8_wrap
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 200 : ui8, umin = 100 : ui8}
+// CHECK: test.reflect_bounds <umin = 100 : ui8, umax = 200 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_mul_i8_wrap() -> i8 {
   %cst10 = arith.constant 10 : i8
-  %0 = test.with_bounds { umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 } : i8
+  %0 = test.with_bounds < umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 > : i8
   // smax overflows
   %1 = arith.muli %0, %cst10 : i8
   %2 = test.reflect_bounds %1 : i8
@@ -963,10 +963,10 @@ func.func @test_mul_i8_wrap() -> i8 {
 }
 
 // CHECK-LABEL: func @test_mul_i8_nowrap
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = 100 : si8, umax = 127 : ui8, umin = 100 : ui8}
+// CHECK: test.reflect_bounds <umin = 100 : ui8, umax = 127 : ui8, smin = 100 : si8, smax = 127 : si8>
 func.func @test_mul_i8_nowrap() -> i8 {
   %cst10 = arith.constant 10 : i8
-  %0 = test.with_bounds { umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 } : i8
+  %0 = test.with_bounds < umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 > : i8
   // nsw stops overflow
   %1 = arith.muli %0, %cst10 overflow<nsw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -974,10 +974,10 @@ func.func @test_mul_i8_nowrap() -> i8 {
 }
 
 // CHECK-LABEL: func @test_shl_i8_wrap1
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 160 : ui8, umin = 80 : ui8}
+// CHECK: test.reflect_bounds <umin = 80 : ui8, umax = 160 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_shl_i8_wrap1() -> i8 {
   %cst3 = arith.constant 3 : i8
-  %0 = test.with_bounds { umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 } : i8
+  %0 = test.with_bounds < umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 > : i8
   // smax overflows
   %1 = arith.shli %0, %cst3 : i8
   %2 = test.reflect_bounds %1 : i8
@@ -985,10 +985,10 @@ func.func @test_shl_i8_wrap1() -> i8 {
 }
 
 // CHECK-LABEL: func @test_shl_i8_wrap2
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 160 : ui8, umin = 80 : ui8}
+// CHECK: test.reflect_bounds <umin = 80 : ui8, umax = 160 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test_shl_i8_wrap2() -> i8 {
   %cst3 = arith.constant 3 : i8
-  %0 = test.with_bounds { umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 } : i8
+  %0 = test.with_bounds < umin = 10 : i8, umax = 20 : i8, smin = 10 : i8, smax = 20 : i8 > : i8
   // smax overflows
   %1 = arith.shli %0, %cst3 overflow<nuw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -996,10 +996,10 @@ func.func @test_shl_i8_wrap2() -> i8 {
 }
 
 // CHECK-LABEL: func @test_shl_i8_nowrap
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = 80 : si8, umax = 127 : ui8, umin = 80 : ui8}
+// CHECK: test.reflect_bounds <umin = 80 : ui8, umax = 127 : ui8, smin = 80 : si8, smax = 127 : si8>
 func.func @test_shl_i8_nowrap() -> i8 {
   %cst3 = arith.constant 3 : i8
-  %0 = test.with_bounds { umin = 10 : i8, umax = 20 : ui8, smin = 10 : i8, smax = 20 : i8 } : i8
+  %0 = test.with_bounds < umin = 10 : i8, umax = 20 : ui8, smin = 10 : i8, smax = 20 : i8 > : i8
   // nsw stops smax overflow
   %1 = arith.shli %0, %cst3 overflow<nsw> : i8
   %2 = test.reflect_bounds %1 : i8
@@ -1013,7 +1013,7 @@ func.func @test_shl_i8_nowrap() -> i8 {
 /// though it has an integer valued result.
 
 // CHECK-LABEL: func @test_cmpf_propagates
-// CHECK: test.reflect_bounds {smax = 2 : index, smin = 1 : index, umax = 2 : index, umin = 1 : index}
+// CHECK: test.reflect_bounds <umin = 1 : index, umax = 2 : index, smin = 1 : index, smax = 2 : index>
 func.func @test_cmpf_propagates(%a: f32, %b: f32) -> index {
   %c1 = arith.constant 1 : index
   %c2 = arith.constant 2 : index

diff  --git a/mlir/test/Dialect/Arith/int-range-loop-iter-args.mlir b/mlir/test/Dialect/Arith/int-range-loop-iter-args.mlir
index 24801875e257c..2d0575f756531 100644
--- a/mlir/test/Dialect/Arith/int-range-loop-iter-args.mlir
+++ b/mlir/test/Dialect/Arith/int-range-loop-iter-args.mlir
@@ -8,7 +8,7 @@
 // without being widened to `[INT_MIN, INT_MAX]`.
 
 // CHECK-LABEL: func @bounded_acc_for
-// CHECK: test.reflect_bounds {smax = 10 : si32, smin = 0 : si32, umax = 10 : ui32, umin = 0 : ui32}
+// CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 10 : ui32, smin = 0 : si32, smax = 10 : si32>
 func.func @bounded_acc_for(%n: i32) -> i32 {
   %c0 = arith.constant 0 : i32
   %c1 = arith.constant 1 : i32
@@ -28,7 +28,7 @@ func.func @bounded_acc_for(%n: i32) -> i32 {
 // CHECK-LABEL: func @bounded_acc_while
 // CHECK: %[[TRUE:.*]] = arith.constant true
 // CHECK: scf.condition(%[[TRUE]])
-// CHECK: test.reflect_bounds {smax = 10 : si32, smin = 0 : si32, umax = 10 : ui32, umin = 0 : ui32}
+// CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 10 : ui32, smin = 0 : si32, smax = 10 : si32>
 func.func @bounded_acc_while() -> i32 {
   %c0 = arith.constant 0 : i32
   %c1 = arith.constant 1 : i32
@@ -48,7 +48,7 @@ func.func @bounded_acc_while() -> i32 {
 }
 
 // CHECK-LABEL: func @bounded_mask_for
-// CHECK: test.reflect_bounds {smax = 15 : si32, smin = 0 : si32, umax = 15 : ui32, umin = 0 : ui32}
+// CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 15 : ui32, smin = 0 : si32, smax = 15 : si32>
 func.func @bounded_mask_for(%n: i32) -> i32 {
   %c0 = arith.constant 0 : i32
   %c1 = arith.constant 1 : i32

diff  --git a/mlir/test/Dialect/Arith/int-range-narrowing.mlir b/mlir/test/Dialect/Arith/int-range-narrowing.mlir
index 06ca5d19de9c9..780e4a918d159 100644
--- a/mlir/test/Dialect/Arith/int-range-narrowing.mlir
+++ b/mlir/test/Dialect/Arith/int-range-narrowing.mlir
@@ -6,75 +6,75 @@
 
 // Truncate possibly-negative values in a signed way
 // CHECK-LABEL: func @test_addi_neg
-//       CHECK:  %[[POS:.*]] = test.with_bounds {smax = 1 : index, smin = 0 : index, umax = 1 : index, umin = 0 : index} : index
-//       CHECK:  %[[NEG:.*]] = test.with_bounds {smax = 0 : index, smin = -1 : index, umax = -1 : index, umin = 0 : index} : index
+//       CHECK:  %[[POS:.*]] = test.with_bounds <umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index> : index
+//       CHECK:  %[[NEG:.*]] = test.with_bounds <umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index> : index
 //       CHECK:  %[[POS_I8:.*]] = arith.index_castui %[[POS]] : index to i8
 //       CHECK:  %[[NEG_I8:.*]] = arith.index_cast %[[NEG]] : index to i8
 //       CHECK:  %[[RES_I8:.*]] = arith.addi %[[POS_I8]], %[[NEG_I8]] : i8
 //       CHECK:  %[[RES:.*]] = arith.index_cast %[[RES_I8]] : i8 to index
 //       CHECK:  return %[[RES]] : index
 func.func @test_addi_neg() -> index {
-  %0 = test.with_bounds { umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index > : index
   %2 = arith.addi %0, %1 : index
   return %2 : index
 }
 
 // CHECK-LABEL: func @test_addi
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 5 : index, smin = 4 : index, umax = 5 : index, umin = 4 : index} : index
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 7 : index, smin = 6 : index, umax = 7 : index, umin = 6 : index} : index
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index> : index
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index> : index
 //       CHECK:  %[[A_CASTED:.*]] = arith.index_castui %[[A]] : index to i8
 //       CHECK:  %[[B_CASTED:.*]] = arith.index_castui %[[B]] : index to i8
 //       CHECK:  %[[RES:.*]] = arith.addi %[[A_CASTED]], %[[B_CASTED]] : i8
 //       CHECK:  %[[RES_CASTED:.*]] = arith.index_castui %[[RES]] : i8 to index
 //       CHECK:  return %[[RES_CASTED]] : index
 func.func @test_addi() -> index {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : index
-  %1 = test.with_bounds { umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index } : index
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : index
+  %1 = test.with_bounds < umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index > : index
   %2 = arith.addi %0, %1 : index
   return %2 : index
 }
 
 // CHECK-LABEL: func @test_addi_vec
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 5 : index, smin = 4 : index, umax = 5 : index, umin = 4 : index} : vector<4xindex>
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 7 : index, smin = 6 : index, umax = 7 : index, umin = 6 : index} : vector<4xindex>
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index> : vector<4xindex>
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index> : vector<4xindex>
 //       CHECK:  %[[A_CASTED:.*]] = arith.index_castui %[[A]] : vector<4xindex> to vector<4xi8>
 //       CHECK:  %[[B_CASTED:.*]] = arith.index_castui %[[B]] : vector<4xindex> to vector<4xi8>
 //       CHECK:  %[[RES:.*]] = arith.addi %[[A_CASTED]], %[[B_CASTED]] : vector<4xi8>
 //       CHECK:  %[[RES_CASTED:.*]] = arith.index_castui %[[RES]] : vector<4xi8> to vector<4xindex>
 //       CHECK:  return %[[RES_CASTED]] : vector<4xindex>
 func.func @test_addi_vec() -> vector<4xindex> {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : vector<4xindex>
-  %1 = test.with_bounds { umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index } : vector<4xindex>
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : vector<4xindex>
+  %1 = test.with_bounds < umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index > : vector<4xindex>
   %2 = arith.addi %0, %1 : vector<4xindex>
   return %2 : vector<4xindex>
 }
 
 // CHECK-LABEL: func @test_addi_i64
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 5 : i64, smin = 4 : i64, umax = 5 : i64, umin = 4 : i64} : i64
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 7 : i64, smin = 6 : i64, umax = 7 : i64, umin = 6 : i64} : i64
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 4 : i64, umax = 5 : i64, smin = 4 : i64, smax = 5 : i64> : i64
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 6 : i64, umax = 7 : i64, smin = 6 : i64, smax = 7 : i64> : i64
 //       CHECK:  %[[A_CASTED:.*]] = arith.trunci %[[A]] : i64 to i8
 //       CHECK:  %[[B_CASTED:.*]] = arith.trunci %[[B]] : i64 to i8
 //       CHECK:  %[[RES:.*]] = arith.addi %[[A_CASTED]], %[[B_CASTED]] : i8
 //       CHECK:  %[[RES_CASTED:.*]] = arith.extui %[[RES]] : i8 to i64
 //       CHECK:  return %[[RES_CASTED]] : i64
 func.func @test_addi_i64() -> i64 {
-  %0 = test.with_bounds { umin = 4 : i64, umax = 5 : i64, smin = 4 : i64, smax = 5 : i64 } : i64
-  %1 = test.with_bounds { umin = 6 : i64, umax = 7 : i64, smin = 6 : i64, smax = 7 : i64 } : i64
+  %0 = test.with_bounds < umin = 4 : i64, umax = 5 : i64, smin = 4 : i64, smax = 5 : i64 > : i64
+  %1 = test.with_bounds < umin = 6 : i64, umax = 7 : i64, smin = 6 : i64, smax = 7 : i64 > : i64
   %2 = arith.addi %0, %1 : i64
   return %2 : i64
 }
 
 // CHECK-LABEL: func @test_cmpi
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : index
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : index
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : index
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : index
 //       CHECK:  %[[A_CASTED:.*]] = arith.index_castui %[[A]] : index to i8
 //       CHECK:  %[[B_CASTED:.*]] = arith.index_castui %[[B]] : index to i8
 //       CHECK:  %[[RES:.*]] = arith.cmpi slt, %[[A_CASTED]], %[[B_CASTED]] : i8
 //       CHECK:  return %[[RES]] : i1
 func.func @test_cmpi() -> i1 {
-  %0 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
   %2 = arith.cmpi slt, %0, %1 : index
   return %2 : i1
 }
@@ -84,11 +84,11 @@ func.func @test_cmpi() -> i1 {
 //       CHECK-NOT: arith.cmpi sgt, {{.*}} : i32
 //       CHECK-NOT: arith.cmpi sle, {{.*}} : i32
 //       CHECK-NOT: arith.cmpi sge, {{.*}} : i32
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 4292870144 : index, smin = 0 : index, umax = 4292870144 : index, umin = 0 : index} : index
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 4292870144 : index, smin = 0 : index, umax = 4292870144 : index, umin = 0 : index} : index
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index> : index
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index> : index
 //       CHECK:  %[[SLT:.*]] = arith.cmpi slt, %[[B]], %[[A]] : index
-//       CHECK:  %[[C:.*]] = test.with_bounds {smax = 2147483648 : index, smin = 0 : index, umax = 2147483648 : index, umin = 0 : index} : index
-//       CHECK:  %[[ZERO:.*]] = test.with_bounds {smax = 0 : index, smin = 0 : index, umax = 0 : index, umin = 0 : index} : index
+//       CHECK:  %[[C:.*]] = test.with_bounds <umin = 0 : index, umax = 2147483648 : index, smin = 0 : index, smax = 2147483648 : index> : index
+//       CHECK:  %[[ZERO:.*]] = test.with_bounds <umin = 0 : index, umax = 0 : index, smin = 0 : index, smax = 0 : index> : index
 //       CHECK:  %[[SGT:.*]] = arith.cmpi sgt, %[[C]], %[[ZERO]] : index
 //       CHECK:  %[[SLE:.*]] = arith.cmpi sle, %[[A]], %[[ZERO]] : index
 //       CHECK:  %[[SGE:.*]] = arith.cmpi sge, %[[C]], %[[ZERO]] : index
@@ -97,11 +97,11 @@ func.func @test_cmpi() -> i1 {
 //       CHECK:  %[[AND2:.*]] = arith.andi %[[AND0]], %[[AND1]] : i1
 //       CHECK:  return %[[AND2]] : i1
 func.func @test_cmpi_si_pred_out_of_signed_bounds() -> i1 {
-  %0 = test.with_bounds { umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index > : index
   %2 = arith.cmpi slt, %1, %0 : index
-  %3 = test.with_bounds { umin = 0 : index, umax = 2147483648 : index, smin = 0 : index, smax = 2147483648 : index } : index
-  %4 = test.with_bounds { umin = 0 : index, umax = 0 : index, smin = 0 : index, smax = 0 : index } : index
+  %3 = test.with_bounds < umin = 0 : index, umax = 2147483648 : index, smin = 0 : index, smax = 2147483648 : index > : index
+  %4 = test.with_bounds < umin = 0 : index, umax = 0 : index, smin = 0 : index, smax = 0 : index > : index
   %5 = arith.cmpi sgt, %3, %4 : index
   %6 = arith.cmpi sle, %0, %4 : index
   %7 = arith.cmpi sge, %3, %4 : index
@@ -112,37 +112,37 @@ func.func @test_cmpi_si_pred_out_of_signed_bounds() -> i1 {
 }
 
 // CHECK-LABEL: func @test_cmpi_ui_pred_out_of_signed_bounds
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 4292870144 : index, smin = 0 : index, umax = 4292870144 : index, umin = 0 : index} : index
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 4292870144 : index, smin = 0 : index, umax = 4292870144 : index, umin = 0 : index} : index
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index> : index
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index> : index
 //       CHECK:  %[[A_I32:.*]] = arith.index_castui %[[A]] : index to i32
 //       CHECK:  %[[B_I32:.*]] = arith.index_castui %[[B]] : index to i32
 //       CHECK:  %[[RES:.*]] = arith.cmpi ult, %[[A_I32]], %[[B_I32]] : i32
 //       CHECK:  return %[[RES]] : i1
 func.func @test_cmpi_ui_pred_out_of_signed_bounds() -> i1 {
-  %0 = test.with_bounds { umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = 4292870144 : index, smin = 0 : index, smax = 4292870144 : index > : index
   %2 = arith.cmpi ult, %0, %1 : index
   return %2 : i1
 }
 
 // CHECK-LABEL: func @test_cmpi_vec
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : vector<4xindex>
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : vector<4xindex>
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : vector<4xindex>
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : vector<4xindex>
 //       CHECK:  %[[A_CASTED:.*]] = arith.index_castui %[[A]] : vector<4xindex> to vector<4xi8>
 //       CHECK:  %[[B_CASTED:.*]] = arith.index_castui %[[B]] : vector<4xindex> to vector<4xi8>
 //       CHECK:  %[[RES:.*]] = arith.cmpi slt, %[[A_CASTED]], %[[B_CASTED]] : vector<4xi8>
 //       CHECK:  return %[[RES]] : vector<4xi1>
 func.func @test_cmpi_vec() -> vector<4xi1> {
-  %0 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : vector<4xindex>
-  %1 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : vector<4xindex>
+  %0 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : vector<4xindex>
+  %1 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : vector<4xindex>
   %2 = arith.cmpi slt, %0, %1 : vector<4xindex>
   return %2 : vector<4xi1>
 }
 
 // CHECK-LABEL: func @test_add_cmpi
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : index
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : index
-//       CHECK:  %[[C:.*]] = test.with_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index} : index
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : index
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : index
+//       CHECK:  %[[C:.*]] = test.with_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index> : index
 //       CHECK:  %[[A_CASTED:.*]] = arith.index_castui %[[A]] : index to i8
 //       CHECK:  %[[B_CASTED:.*]] = arith.index_castui %[[B]] : index to i8
 //       CHECK:  %[[RES1:.*]] = arith.addi %[[A_CASTED]], %[[B_CASTED]] : i8
@@ -150,18 +150,18 @@ func.func @test_cmpi_vec() -> vector<4xi1> {
 //       CHECK:  %[[RES2:.*]] = arith.cmpi slt, %[[C_CASTED]], %[[RES1]] : i8
 //       CHECK:  return %[[RES2]] : i1
 func.func @test_add_cmpi() -> i1 {
-  %0 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
-  %3 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
+  %3 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
   %4 = arith.addi %0, %1 : index
   %5 = arith.cmpi slt, %3, %4 : index
   return %5 : i1
 }
 
 // CHECK-LABEL: func @test_add_cmpi_i64
-//       CHECK:  %[[A:.*]] = test.with_bounds {smax = 10 : i64, smin = 0 : i64, umax = 10 : i64, umin = 0 : i64} : i64
-//       CHECK:  %[[B:.*]] = test.with_bounds {smax = 10 : i64, smin = 0 : i64, umax = 10 : i64, umin = 0 : i64} : i64
-//       CHECK:  %[[C:.*]] = test.with_bounds {smax = 10 : i64, smin = 0 : i64, umax = 10 : i64, umin = 0 : i64} : i64
+//       CHECK:  %[[A:.*]] = test.with_bounds <umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64> : i64
+//       CHECK:  %[[B:.*]] = test.with_bounds <umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64> : i64
+//       CHECK:  %[[C:.*]] = test.with_bounds <umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64> : i64
 //       CHECK:  %[[A_CASTED:.*]] = arith.trunci %[[A]] : i64 to i8
 //       CHECK:  %[[B_CASTED:.*]] = arith.trunci %[[B]] : i64 to i8
 //       CHECK:  %[[RES1:.*]] = arith.addi %[[A_CASTED]], %[[B_CASTED]] : i8
@@ -169,9 +169,9 @@ func.func @test_add_cmpi() -> i1 {
 //       CHECK:  %[[RES2:.*]] = arith.cmpi slt, %[[C_CASTED]], %[[RES1]] : i8
 //       CHECK:  return %[[RES2]] : i1
 func.func @test_add_cmpi_i64() -> i1 {
-  %0 = test.with_bounds { umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 } : i64
-  %1 = test.with_bounds { umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 } : i64
-  %3 = test.with_bounds { umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 } : i64
+  %0 = test.with_bounds < umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 > : i64
+  %1 = test.with_bounds < umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 > : i64
+  %3 = test.with_bounds < umin = 0 : i64, umax = 10 : i64, smin = 0 : i64, smax = 10 : i64 > : i64
   %4 = arith.addi %0, %1 : i64
   %5 = arith.cmpi slt, %3, %4 : i64
   return %5 : i1
@@ -287,9 +287,9 @@ func.func @subi_mixed_ext_i8(%lhs: i8, %rhs: i8) -> i32 {
 // CHECK: %[[SHR_I64:.*]] = arith.shrsi {{.*}} : i64
 // CHECK: return %{{.*}} : i64, i64, i64, i64, i64, i64, i64
 func.func @signed_ops_out_of_narrowed_signed_range() -> (i64, i64, i64, i64, i64, i64, i64) {
-  %0 = test.with_bounds { umin = 0 : i64, umax = 4292870144 : i64, smin = 0 : i64, smax = 4292870144 : i64 } : i64
-  %1 = test.with_bounds { umin = 1 : i64, umax = 8 : i64, smin = 1 : i64, smax = 8 : i64 } : i64
-  %2 = test.with_bounds { umin = 0 : i64, umax = 0 : i64, smin = 0 : i64, smax = 0 : i64 } : i64
+  %0 = test.with_bounds < umin = 0 : i64, umax = 4292870144 : i64, smin = 0 : i64, smax = 4292870144 : i64 > : i64
+  %1 = test.with_bounds < umin = 1 : i64, umax = 8 : i64, smin = 1 : i64, smax = 8 : i64 > : i64
+  %2 = test.with_bounds < umin = 0 : i64, umax = 0 : i64, smin = 0 : i64, smax = 0 : i64 > : i64
   %3 = arith.divsi %0, %1 : i64
   %4 = arith.ceildivsi %0, %1 : i64
   %5 = arith.floordivsi %0, %1 : i64
@@ -309,9 +309,9 @@ func.func @signed_ops_out_of_narrowed_signed_range() -> (i64, i64, i64, i64, i64
 // CHECK: arith.shrui {{.*}} : i32
 // CHECK: return %{{.*}} : i64, i64, i64, i64, i64, i64
 func.func @unsigned_ops_out_of_narrowed_signed_range() -> (i64, i64, i64, i64, i64, i64) {
-  %0 = test.with_bounds { umin = 0 : i64, umax = 4292870144 : i64, smin = 0 : i64, smax = 4292870144 : i64 } : i64
-  %1 = test.with_bounds { umin = 1 : i64, umax = 8 : i64, smin = 1 : i64, smax = 8 : i64 } : i64
-  %2 = test.with_bounds { umin = 0 : i64, umax = 0 : i64, smin = 0 : i64, smax = 0 : i64 } : i64
+  %0 = test.with_bounds < umin = 0 : i64, umax = 4292870144 : i64, smin = 0 : i64, smax = 4292870144 : i64 > : i64
+  %1 = test.with_bounds < umin = 1 : i64, umax = 8 : i64, smin = 1 : i64, smax = 8 : i64 > : i64
+  %2 = test.with_bounds < umin = 0 : i64, umax = 0 : i64, smin = 0 : i64, smax = 0 : i64 > : i64
   %3 = arith.divui %0, %1 : i64
   %4 = arith.ceildivui %0, %1 : i64
   %5 = arith.remui %0, %1 : i64
@@ -331,8 +331,8 @@ func.func @unsigned_ops_out_of_narrowed_signed_range() -> (i64, i64, i64, i64, i
 // CHECK: arith.shrsi {{.*}} : i64
 // CHECK-NOT: arith.shrsi {{.*}} : i32
 func.func @shrsi_amount_out_of_narrowed_range() -> i64 {
-  %0 = test.with_bounds { umin = 0 : i64, umax = 4 : i64, smin = 0 : i64, smax = 4 : i64 } : i64
-  %1 = test.with_bounds { umin = 0 : i64, umax = 63 : i64, smin = 0 : i64, smax = 63 : i64 } : i64
+  %0 = test.with_bounds < umin = 0 : i64, umax = 4 : i64, smin = 0 : i64, smax = 4 : i64 > : i64
+  %1 = test.with_bounds < umin = 0 : i64, umax = 63 : i64, smin = 0 : i64, smax = 63 : i64 > : i64
   %2 = arith.shrsi %0, %1 : i64
   return %2 : i64
 }
@@ -342,8 +342,8 @@ func.func @shrsi_amount_out_of_narrowed_range() -> i64 {
 // CHECK-LABEL: func.func @shrui_amount_in_narrowed_range
 // CHECK: arith.shrui {{.*}} : i32
 func.func @shrui_amount_in_narrowed_range() -> i64 {
-  %0 = test.with_bounds { umin = 0 : i64, umax = 4 : i64, smin = 0 : i64, smax = 4 : i64 } : i64
-  %1 = test.with_bounds { umin = 0 : i64, umax = 31 : i64, smin = 0 : i64, smax = 31 : i64 } : i64
+  %0 = test.with_bounds < umin = 0 : i64, umax = 4 : i64, smin = 0 : i64, smax = 4 : i64 > : i64
+  %1 = test.with_bounds < umin = 0 : i64, umax = 31 : i64, smin = 0 : i64, smax = 31 : i64 > : i64
   %2 = arith.shrui %0, %1 : i64
   return %2 : i64
 }
@@ -465,8 +465,8 @@ func.func @clamp_to_loop_bound_and_id() {
   %c16 = arith.constant 16 : index
   %c64 = arith.constant 64 : index
 
-  %tid = test.with_bounds {smin = 0 : index, smax = 63 : index, umin = 0 : index, umax = 63 : index} : index
-  %bound = test.with_bounds {smin = 16 : index, smax = 112 : index, umin = 16 : index, umax = 112 : index} : index
+  %tid = test.with_bounds <smin = 0 : index, smax = 63 : index, umin = 0 : index, umax = 63 : index> : index
+  %bound = test.with_bounds <smin = 16 : index, smax = 112 : index, umin = 16 : index, umax = 112 : index> : index
   scf.for %arg0 = %c16 to %bound step %c64 {
     %0 = arith.subi %bound, %arg0 : index
     %1 = arith.minsi %0, %c64 : index
@@ -490,8 +490,8 @@ func.func @loop_with_iter_arg() {
 
   %cst = arith.constant dense<0.000000e+00> : vector<4xf32>
 
-//       CHECK:  %[[POS:.*]] = test.with_bounds {smax = 1 : index, smin = 0 : index, umax = 1 : index, umin = 0 : index} : index
-//       CHECK:  %[[NEG:.*]] = test.with_bounds {smax = 0 : index, smin = -1 : index, umax = -1 : index, umin = 0 : index} : index
+//       CHECK:  %[[POS:.*]] = test.with_bounds <umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index> : index
+//       CHECK:  %[[NEG:.*]] = test.with_bounds <umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index> : index
 // Check iter args are still present
 //       CHECK:  scf.for {{.*}} iter_args({{.*}})
 //       CHECK:  %[[POS_I8:.*]] = arith.index_castui %[[POS]] : index to i8
@@ -500,8 +500,8 @@ func.func @loop_with_iter_arg() {
 //       CHECK:  %[[RES:.*]] = arith.index_cast %[[RES_I8]] : i8 to index
 //       CHECK:  call @use(%[[RES]])
 
-  %0 = test.with_bounds { umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index } : index
-  %1 = test.with_bounds { umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index > : index
+  %1 = test.with_bounds < umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index > : index
   %res = scf.for %arg0 = %c0 to %c16 step %c1 iter_args(%arg1 = %cst) -> (vector<4xf32>) {
     %2 = arith.addi %0, %1 : index
     func.call @use(%2) : (index) -> ()
@@ -521,12 +521,12 @@ func.func @narrow_loop_bounds() {
   %c1_i64 = arith.constant 1 : i64
 
   // CHECK-DAG: %[[C1_I8:.*]] = arith.constant 1 : i8
-  // CHECK-DAG: %[[LB:.*]] = test.with_bounds {smax = 0 : i64, smin = 0 : i64, umax = 0 : i64, umin = 0 : i64} : i64
-  // CHECK-DAG: %[[UB:.*]] = test.with_bounds {smax = 10 : i64, smin = 10 : i64, umax = 10 : i64, umin = 10 : i64} : i64
-  // CHECK-DAG: %[[STEP:.*]] = test.with_bounds {smax = 1 : i64, smin = 1 : i64, umax = 1 : i64, umin = 1 : i64} : i64
-  %lb = test.with_bounds {smin = 0 : i64, smax = 0 : i64, umin = 0 : i64, umax = 0 : i64} : i64
-  %ub = test.with_bounds {smin = 10 : i64, smax = 10 : i64, umin = 10 : i64, umax = 10 : i64} : i64
-  %step = test.with_bounds {smin = 1 : i64, smax = 1 : i64, umin = 1 : i64, umax = 1 : i64} : i64
+  // CHECK-DAG: %[[LB:.*]] = test.with_bounds <umin = 0 : i64, umax = 0 : i64, smin = 0 : i64, smax = 0 : i64> : i64
+  // CHECK-DAG: %[[UB:.*]] = test.with_bounds <umin = 10 : i64, umax = 10 : i64, smin = 10 : i64, smax = 10 : i64> : i64
+  // CHECK-DAG: %[[STEP:.*]] = test.with_bounds <umin = 1 : i64, umax = 1 : i64, smin = 1 : i64, smax = 1 : i64> : i64
+  %lb = test.with_bounds <smin = 0 : i64, smax = 0 : i64, umin = 0 : i64, umax = 0 : i64> : i64
+  %ub = test.with_bounds <smin = 10 : i64, smax = 10 : i64, umin = 10 : i64, umax = 10 : i64> : i64
+  %step = test.with_bounds <smin = 1 : i64, smax = 1 : i64, umin = 1 : i64, umax = 1 : i64> : i64
 
   // CHECK-DAG: %[[LB_I8:.*]] = arith.trunci %[[LB]] : i64 to i8
   // CHECK-DAG: %[[UB_I8:.*]] = arith.trunci %[[UB]] : i64 to i8

diff  --git a/mlir/test/Dialect/Arith/int-range-opts-bug-119045.mlir b/mlir/test/Dialect/Arith/int-range-opts-bug-119045.mlir
index a2cf72a00e019..9b9f3a78659c8 100644
--- a/mlir/test/Dialect/Arith/int-range-opts-bug-119045.mlir
+++ b/mlir/test/Dialect/Arith/int-range-opts-bug-119045.mlir
@@ -15,7 +15,7 @@ func.func @blocks_prematurely_declared_dead_bug(%mem: memref<?xf16>) {
   %c0 = arith.constant 0 : index
   %c64 = arith.constant 64 : index
   %thread_id_x = gpu.thread_id  x upper_bound 64
-  %6 = test.with_bounds { smin = 16 : index, smax = 112 : index, umin = 16 : index, umax = 112 : index } : index
+  %6 = test.with_bounds < smin = 16 : index, smax = 112 : index, umin = 16 : index, umax = 112 : index > : index
   %8 = arith.divui %6, %c16 : index
   %9 = arith.muli %8, %c16 : index
   cf.br ^bb1(%c0 : index)

diff  --git a/mlir/test/Dialect/Arith/int-range-opts.mlir b/mlir/test/Dialect/Arith/int-range-opts.mlir
index 0cfbdf3e33c93..ff6292ed35635 100644
--- a/mlir/test/Dialect/Arith/int-range-opts.mlir
+++ b/mlir/test/Dialect/Arith/int-range-opts.mlir
@@ -5,7 +5,7 @@
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst1 = arith.constant -1 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi eq, %0, %cst1 : index
   return %1: i1
 }
@@ -17,7 +17,7 @@ func.func @test() -> i1 {
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst1 = arith.constant -1 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi ne, %0, %cst1 : index
   return %1: i1
 }
@@ -30,7 +30,7 @@ func.func @test() -> i1 {
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst = arith.constant 0 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi sge, %0, %cst : index
   return %1: i1
 }
@@ -42,7 +42,7 @@ func.func @test() -> i1 {
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst = arith.constant 0 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi slt, %0, %cst : index
   return %1: i1
 }
@@ -55,7 +55,7 @@ func.func @test() -> i1 {
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst1 = arith.constant -1 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi sgt, %0, %cst1 : index
   return %1: i1
 }
@@ -67,7 +67,7 @@ func.func @test() -> i1 {
 //       CHECK:   return %[[C]]
 func.func @test() -> i1 {
   %cst1 = arith.constant -1 : index
-  %0 = test.with_bounds { umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0x7fffffffffffffff : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = arith.cmpi sle, %0, %cst1 : index
   return %1: i1
 }
@@ -75,10 +75,10 @@ func.func @test() -> i1 {
 // -----
 
 // CHECK-LABEL: func @test
-// CHECK: test.reflect_bounds {smax = 24 : si8, smin = 0 : si8, umax = 24 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 24 : ui8, smin = 0 : si8, smax = 24 : si8>
 func.func @test() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %i8val = test.with_bounds { umin = 0 : i8, umax = 12 : i8, smin = 0 : i8, smax = 12 : i8 } : i8
+  %i8val = test.with_bounds < umin = 0 : i8, umax = 12 : i8, smin = 0 : i8, smax = 12 : i8 > : i8
   %shifted = arith.shli %i8val, %cst1 : i8
   %1 = test.reflect_bounds %shifted : i8
   return %1: i8
@@ -87,10 +87,10 @@ func.func @test() -> i8 {
 // -----
 
 // CHECK-LABEL: func @test
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 254 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 254 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @test() -> i8 {
   %cst1 = arith.constant 1 : i8
-  %i8val = test.with_bounds { umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 } : i8
+  %i8val = test.with_bounds < umin = 0 : i8, umax = 127 : i8, smin = 0 : i8, smax = 127 : i8 > : i8
   %shifted = arith.shli %i8val, %cst1 : i8
   %1 = test.reflect_bounds %shifted : i8
   return %1: i8
@@ -103,7 +103,7 @@ func.func @test() -> i8 {
 // CHECK: return [[val]]
 func.func @trivial_rem() -> i8 {
   %c64 = arith.constant 64 : i8
-  %val = test.with_bounds { umin = 0 : ui8, umax = 63 : ui8, smin = 0 : si8, smax = 63 : si8 } : i8
+  %val = test.with_bounds < umin = 0 : ui8, umax = 63 : ui8, smin = 0 : si8, smax = 63 : si8 > : i8
   %mod = arith.remsi %val, %c64 : i8
   return %mod : i8
 }
@@ -115,8 +115,8 @@ func.func @trivial_rem() -> i8 {
 // CHECK: return [[mod]]
 func.func @non_const_rhs() -> i8 {
   %c64 = arith.constant 64 : i8
-  %val = test.with_bounds { umin = 0 : ui8, umax = 2 : ui8, smin = 0 : si8, smax = 2 : si8 } : i8
-  %rhs = test.with_bounds { umin = 63 : ui8, umax = 64 : ui8, smin = 63 : si8, smax = 64 : si8 } : i8
+  %val = test.with_bounds < umin = 0 : ui8, umax = 2 : ui8, smin = 0 : si8, smax = 2 : si8 > : i8
+  %rhs = test.with_bounds < umin = 63 : ui8, umax = 64 : ui8, smin = 63 : si8, smax = 64 : si8 > : i8
   %mod = arith.remui %val, %rhs : i8
   return %mod : i8
 }
@@ -128,7 +128,7 @@ func.func @non_const_rhs() -> i8 {
 // CHECK: return [[mod]]
 func.func @wraps() -> i8 {
   %c64 = arith.constant 64 : i8
-  %val = test.with_bounds { umin = 63 : ui8, umax = 65 : ui8, smin = 63 : si8, smax = 65 : si8 } : i8
+  %val = test.with_bounds < umin = 63 : ui8, umax = 65 : ui8, smin = 63 : si8, smax = 65 : si8 > : i8
   %mod = arith.remsi %val, %c64 : i8
   return %mod : i8
 }

diff  --git a/mlir/test/Dialect/GPU/int-range-interface-cluster.mlir b/mlir/test/Dialect/GPU/int-range-interface-cluster.mlir
index ff8ddd147ee91..08be9c8c5a083 100644
--- a/mlir/test/Dialect/GPU/int-range-interface-cluster.mlir
+++ b/mlir/test/Dialect/GPU/int-range-interface-cluster.mlir
@@ -3,23 +3,23 @@
 gpu.module @test_module {
   gpu.func @test_cluster_ranges() kernel attributes {known_cluster_size = array<i32: 8, 4, 1>} {
     %c0 = gpu.cluster_block_id x
-    // CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
     %c0_0 = test.reflect_bounds %c0 : index
     %c1 = gpu.cluster_block_id y
-    // CHECK: test.reflect_bounds {smax = 3 : index, smin = 0 : index, umax = 3 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 3 : index, smin = 0 : index, smax = 3 : index>
     %c1_0 = test.reflect_bounds %c1 : index
     %c2 = gpu.cluster_block_id z
-    // CHECK: test.reflect_bounds {smax = 0 : index, smin = 0 : index, umax = 0 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 0 : index, smin = 0 : index, smax = 0 : index>
     %c2_0 = test.reflect_bounds %c2 : index
 
     %d0 = gpu.cluster_dim_blocks x
-    // CHECK: test.reflect_bounds {smax = 8 : index, smin = 8 : index, umax = 8 : index, umin = 8 : index}
+    // CHECK: test.reflect_bounds <umin = 8 : index, umax = 8 : index, smin = 8 : index, smax = 8 : index>
     %d0_0 = test.reflect_bounds %d0 : index
     %d1 = gpu.cluster_dim_blocks y
-    // CHECK: test.reflect_bounds {smax = 4 : index, smin = 4 : index, umax = 4 : index, umin = 4 : index}
+    // CHECK: test.reflect_bounds <umin = 4 : index, umax = 4 : index, smin = 4 : index, smax = 4 : index>
     %d1_0 = test.reflect_bounds %d1 : index
     %d2 = gpu.cluster_dim_blocks z
-    // CHECK: test.reflect_bounds {smax = 1 : index, smin = 1 : index, umax = 1 : index, umin = 1 : index}
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 1 : index, smin = 1 : index, smax = 1 : index>
     %d2_0 = test.reflect_bounds %d2 : index
 
     gpu.return
@@ -27,23 +27,23 @@ gpu.module @test_module {
 
   gpu.func @test_cluster_unknown() kernel {
     %c0 = gpu.cluster_block_id x
-    // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
     %c0_0 = test.reflect_bounds %c0 : index
     %c1 = gpu.cluster_block_id y
-    // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
     %c1_0 = test.reflect_bounds %c1 : index
     %c2 = gpu.cluster_block_id z
-    // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
     %c2_0 = test.reflect_bounds %c2 : index
 
     %d0 = gpu.cluster_dim_blocks x
-    // CHECK: test.reflect_bounds {smax = 16 : index, smin = 1 : index, umax = 16 : index, umin = 1 : index}
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 16 : index, smin = 1 : index, smax = 16 : index>
     %d0_0 = test.reflect_bounds %d0 : index
     %d1 = gpu.cluster_dim_blocks y
-    // CHECK: test.reflect_bounds {smax = 16 : index, smin = 1 : index, umax = 16 : index, umin = 1 : index}
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 16 : index, smin = 1 : index, smax = 16 : index>
     %d1_0 = test.reflect_bounds %d1 : index
     %d2 = gpu.cluster_dim_blocks z
-    // CHECK: test.reflect_bounds {smax = 16 : index, smin = 1 : index, umax = 16 : index, umin = 1 : index}
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 16 : index, smin = 1 : index, smax = 16 : index>
     %d2_0 = test.reflect_bounds %d2 : index
 
     gpu.return

diff  --git a/mlir/test/Dialect/GPU/int-range-interface.mlir b/mlir/test/Dialect/GPU/int-range-interface.mlir
index 628b668a65969..caa8c2d7d05a4 100644
--- a/mlir/test/Dialect/GPU/int-range-interface.mlir
+++ b/mlir/test/Dialect/GPU/int-range-interface.mlir
@@ -2,47 +2,47 @@
 
 // CHECK-LABEL: func @launch_func
 func.func @launch_func(%arg0 : index) {
-  %0 = test.with_bounds {
+  %0 = test.with_bounds <
     umin = 3 : index, umax = 5 : index,
     smin = 3 : index, smax = 5 : index
-  } : index
-  %1 = test.with_bounds {
+  > : index
+  %1 = test.with_bounds <
     umin = 7 : index, umax = 11 : index,
     smin = 7 : index, smax = 11 : index
-  } : index
+  > : index
   gpu.launch blocks(%block_id_x, %block_id_y, %block_id_z) in (%grid_dim_x = %0, %grid_dim_y = %1, %grid_dim_z = %arg0)
       threads(%thread_id_x, %thread_id_y, %thread_id_z) in (%block_dim_x = %arg0, %block_dim_y = %0, %block_dim_z = %1) {
 
-    // CHECK: test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index}
-    // CHECK: test.reflect_bounds {smax = 11 : index, smin = 7 : index, umax = 11 : index, umin = 7 : index}
-    // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
+    // CHECK: test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index>
+    // CHECK: test.reflect_bounds <umin = 7 : index, umax = 11 : index, smin = 7 : index, smax = 11 : index>
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
     %grid_dim_x0 = test.reflect_bounds %grid_dim_x : index
     %grid_dim_y0 = test.reflect_bounds %grid_dim_y : index
     %grid_dim_z0 = test.reflect_bounds %grid_dim_z : index
 
-    // CHECK: test.reflect_bounds {smax = 4 : index, smin = 0 : index, umax = 4 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4 : index, smin = 0 : index, smax = 4 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
     %block_id_x0 = test.reflect_bounds %block_id_x : index
     %block_id_y0 = test.reflect_bounds %block_id_y : index
     %block_id_z0 = test.reflect_bounds %block_id_z : index
 
-    // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-    // CHECK: test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index}
-    // CHECK: test.reflect_bounds {smax = 11 : index, smin = 7 : index, umax = 11 : index, umin = 7 : index}
+    // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+    // CHECK: test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index>
+    // CHECK: test.reflect_bounds <umin = 7 : index, umax = 11 : index, smin = 7 : index, smax = 11 : index>
     %block_dim_x0 = test.reflect_bounds %block_dim_x : index
     %block_dim_y0 = test.reflect_bounds %block_dim_y : index
     %block_dim_z0 = test.reflect_bounds %block_dim_z : index
 
-    // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 4 : index, smin = 0 : index, umax = 4 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4 : index, smin = 0 : index, smax = 4 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index>
     %thread_id_x0 = test.reflect_bounds %thread_id_x : index
     %thread_id_y0 = test.reflect_bounds %thread_id_y : index
     %thread_id_z0 = test.reflect_bounds %thread_id_z : index
 
     // The launch bounds are not constant, and so this can't infer anything
-    // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
     %thread_id_op = gpu.thread_id y
     %thread_id_op0 = test.reflect_bounds %thread_id_op : index
     gpu.terminator
@@ -62,9 +62,9 @@ module attributes {gpu.container_module} {
       %grid_dim_y = gpu.grid_dim y
       %grid_dim_z = gpu.grid_dim z
 
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
       %grid_dim_x0 = test.reflect_bounds %grid_dim_x : index
       %grid_dim_y0 = test.reflect_bounds %grid_dim_y : index
       %grid_dim_z0 = test.reflect_bounds %grid_dim_z : index
@@ -73,9 +73,9 @@ module attributes {gpu.container_module} {
       %block_id_y = gpu.block_id y
       %block_id_z = gpu.block_id z
 
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
       %block_id_x0 = test.reflect_bounds %block_id_x : index
       %block_id_y0 = test.reflect_bounds %block_id_y : index
       %block_id_z0 = test.reflect_bounds %block_id_z : index
@@ -84,9 +84,9 @@ module attributes {gpu.container_module} {
       %block_dim_y = gpu.block_dim y
       %block_dim_z = gpu.block_dim z
 
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
       %block_dim_x0 = test.reflect_bounds %block_dim_x : index
       %block_dim_y0 = test.reflect_bounds %block_dim_y : index
       %block_dim_z0 = test.reflect_bounds %block_dim_z : index
@@ -95,9 +95,9 @@ module attributes {gpu.container_module} {
       %thread_id_y = gpu.thread_id y
       %thread_id_z = gpu.thread_id z
 
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
       %thread_id_x0 = test.reflect_bounds %thread_id_x : index
       %thread_id_y0 = test.reflect_bounds %thread_id_y : index
       %thread_id_z0 = test.reflect_bounds %thread_id_z : index
@@ -106,9 +106,9 @@ module attributes {gpu.container_module} {
       %global_id_y = gpu.global_id y
       %global_id_z = gpu.global_id z
 
-      // CHECK: test.reflect_bounds {smax = 9223372036854775807 : index, smin = -9223372036854775808 : index, umax = -8589934592 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 9223372036854775807 : index, smin = -9223372036854775808 : index, umax = -8589934592 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 9223372036854775807 : index, smin = -9223372036854775808 : index, umax = -8589934592 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = -8589934592 : index, smin = -9223372036854775808 : index, smax = 9223372036854775807 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = -8589934592 : index, smin = -9223372036854775808 : index, smax = 9223372036854775807 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = -8589934592 : index, smin = -9223372036854775808 : index, smax = 9223372036854775807 : index>
       %global_id_x0 = test.reflect_bounds %global_id_x : index
       %global_id_y0 = test.reflect_bounds %global_id_y : index
       %global_id_z0 = test.reflect_bounds %global_id_z : index
@@ -118,10 +118,10 @@ module attributes {gpu.container_module} {
       %num_subgroups = gpu.num_subgroups : index
       %subgroup_id = gpu.subgroup_id : index
 
-      // CHECK: test.reflect_bounds {smax = 128 : index, smin = 1 : index, umax = 128 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 127 : index, smin = 0 : index, umax = 127 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 128 : index, smin = 1 : index, smax = 128 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 127 : index, smin = 0 : index, smax = 127 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
       %subgroup_size0 = test.reflect_bounds %subgroup_size : index
       %lane_id0 = test.reflect_bounds %lane_id : index
       %num_subgroups0 = test.reflect_bounds %num_subgroups : index
@@ -145,9 +145,9 @@ module attributes {gpu.container_module} {
       %grid_dim_y = gpu.grid_dim y
       %grid_dim_z = gpu.grid_dim z
 
-      // CHECK: test.reflect_bounds {smax = 20 : index, smin = 20 : index, umax = 20 : index, umin = 20 : index}
-      // CHECK: test.reflect_bounds {smax = 24 : index, smin = 24 : index, umax = 24 : index, umin = 24 : index}
-      // CHECK: test.reflect_bounds {smax = 28 : index, smin = 28 : index, umax = 28 : index, umin = 28 : index}
+      // CHECK: test.reflect_bounds <umin = 20 : index, umax = 20 : index, smin = 20 : index, smax = 20 : index>
+      // CHECK: test.reflect_bounds <umin = 24 : index, umax = 24 : index, smin = 24 : index, smax = 24 : index>
+      // CHECK: test.reflect_bounds <umin = 28 : index, umax = 28 : index, smin = 28 : index, smax = 28 : index>
       %grid_dim_x0 = test.reflect_bounds %grid_dim_x : index
       %grid_dim_y0 = test.reflect_bounds %grid_dim_y : index
       %grid_dim_z0 = test.reflect_bounds %grid_dim_z : index
@@ -156,9 +156,9 @@ module attributes {gpu.container_module} {
       %block_id_y = gpu.block_id y
       %block_id_z = gpu.block_id z
 
-      // CHECK: test.reflect_bounds {smax = 19 : index, smin = 0 : index, umax = 19 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 23 : index, smin = 0 : index, umax = 23 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 27 : index, smin = 0 : index, umax = 27 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 19 : index, smin = 0 : index, smax = 19 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 23 : index, smin = 0 : index, smax = 23 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 27 : index, smin = 0 : index, smax = 27 : index>
       %block_id_x0 = test.reflect_bounds %block_id_x : index
       %block_id_y0 = test.reflect_bounds %block_id_y : index
       %block_id_z0 = test.reflect_bounds %block_id_z : index
@@ -167,9 +167,9 @@ module attributes {gpu.container_module} {
       %block_dim_y = gpu.block_dim y
       %block_dim_z = gpu.block_dim z
 
-      // CHECK: test.reflect_bounds {smax = 8 : index, smin = 8 : index, umax = 8 : index, umin = 8 : index}
-      // CHECK: test.reflect_bounds {smax = 12 : index, smin = 12 : index, umax = 12 : index, umin = 12 : index}
-      // CHECK: test.reflect_bounds {smax = 16 : index, smin = 16 : index, umax = 16 : index, umin = 16 : index}
+      // CHECK: test.reflect_bounds <umin = 8 : index, umax = 8 : index, smin = 8 : index, smax = 8 : index>
+      // CHECK: test.reflect_bounds <umin = 12 : index, umax = 12 : index, smin = 12 : index, smax = 12 : index>
+      // CHECK: test.reflect_bounds <umin = 16 : index, umax = 16 : index, smin = 16 : index, smax = 16 : index>
       %block_dim_x0 = test.reflect_bounds %block_dim_x : index
       %block_dim_y0 = test.reflect_bounds %block_dim_y : index
       %block_dim_z0 = test.reflect_bounds %block_dim_z : index
@@ -178,9 +178,9 @@ module attributes {gpu.container_module} {
       %thread_id_y = gpu.thread_id y
       %thread_id_z = gpu.thread_id z
 
-      // CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 11 : index, smin = 0 : index, umax = 11 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 11 : index, smin = 0 : index, smax = 11 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
       %thread_id_x0 = test.reflect_bounds %thread_id_x : index
       %thread_id_y0 = test.reflect_bounds %thread_id_y : index
       %thread_id_z0 = test.reflect_bounds %thread_id_z : index
@@ -189,9 +189,9 @@ module attributes {gpu.container_module} {
       %global_id_y = gpu.global_id y
       %global_id_z = gpu.global_id z
 
-      // CHECK: test.reflect_bounds {smax = 159 : index, smin = 0 : index, umax = 159 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 287 : index, smin = 0 : index, umax = 287 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 447 : index, smin = 0 : index, umax = 447 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 159 : index, smin = 0 : index, smax = 159 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 287 : index, smin = 0 : index, smax = 287 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 447 : index, smin = 0 : index, smax = 447 : index>
       %global_id_x0 = test.reflect_bounds %global_id_x : index
       %global_id_y0 = test.reflect_bounds %global_id_y : index
       %global_id_z0 = test.reflect_bounds %global_id_z : index
@@ -201,10 +201,10 @@ module attributes {gpu.container_module} {
       %num_subgroups = gpu.num_subgroups : index
       %subgroup_id = gpu.subgroup_id : index
 
-      // CHECK: test.reflect_bounds {smax = 128 : index, smin = 1 : index, umax = 128 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 127 : index, smin = 0 : index, umax = 127 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967295 : index, smin = 1 : index, umax = 4294967295 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 4294967294 : index, smin = 0 : index, umax = 4294967294 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 128 : index, smin = 1 : index, smax = 128 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 127 : index, smin = 0 : index, smax = 127 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 4294967295 : index, smin = 1 : index, smax = 4294967295 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 4294967294 : index, smin = 0 : index, smax = 4294967294 : index>
       %subgroup_size0 = test.reflect_bounds %subgroup_size : index
       %lane_id0 = test.reflect_bounds %lane_id : index
       %num_subgroups0 = test.reflect_bounds %num_subgroups : index
@@ -227,9 +227,9 @@ module {
     %block_id_y = gpu.block_id y
     %block_id_z = gpu.block_id z
 
-    // CHECK: test.reflect_bounds {smax = 19 : index, smin = 0 : index, umax = 19 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 23 : index, smin = 0 : index, umax = 23 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 27 : index, smin = 0 : index, umax = 27 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 19 : index, smin = 0 : index, smax = 19 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 23 : index, smin = 0 : index, smax = 23 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 27 : index, smin = 0 : index, smax = 27 : index>
     %block_id_x0 = test.reflect_bounds %block_id_x : index
     %block_id_y0 = test.reflect_bounds %block_id_y : index
     %block_id_z0 = test.reflect_bounds %block_id_z : index
@@ -238,9 +238,9 @@ module {
     %thread_id_y = gpu.thread_id y
     %thread_id_z = gpu.thread_id z
 
-    // CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 11 : index, smin = 0 : index, umax = 11 : index, umin = 0 : index}
-    // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 11 : index, smin = 0 : index, smax = 11 : index>
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
     %thread_id_x0 = test.reflect_bounds %thread_id_x : index
     %thread_id_y0 = test.reflect_bounds %thread_id_y : index
     %thread_id_z0 = test.reflect_bounds %thread_id_z : index
@@ -260,9 +260,9 @@ module attributes {gpu.container_module} {
       %grid_dim_y = gpu.grid_dim y upper_bound 24
       %grid_dim_z = gpu.grid_dim z upper_bound 28
 
-      // CHECK: test.reflect_bounds {smax = 20 : index, smin = 1 : index, umax = 20 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 24 : index, smin = 1 : index, umax = 24 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 28 : index, smin = 1 : index, umax = 28 : index, umin = 1 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 20 : index, smin = 1 : index, smax = 20 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 24 : index, smin = 1 : index, smax = 24 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 28 : index, smin = 1 : index, smax = 28 : index>
       %grid_dim_x0 = test.reflect_bounds %grid_dim_x : index
       %grid_dim_y0 = test.reflect_bounds %grid_dim_y : index
       %grid_dim_z0 = test.reflect_bounds %grid_dim_z : index
@@ -271,9 +271,9 @@ module attributes {gpu.container_module} {
       %block_id_y = gpu.block_id y upper_bound 24
       %block_id_z = gpu.block_id z upper_bound 28
 
-      // CHECK: test.reflect_bounds {smax = 19 : index, smin = 0 : index, umax = 19 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 23 : index, smin = 0 : index, umax = 23 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 27 : index, smin = 0 : index, umax = 27 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 19 : index, smin = 0 : index, smax = 19 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 23 : index, smin = 0 : index, smax = 23 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 27 : index, smin = 0 : index, smax = 27 : index>
       %block_id_x0 = test.reflect_bounds %block_id_x : index
       %block_id_y0 = test.reflect_bounds %block_id_y : index
       %block_id_z0 = test.reflect_bounds %block_id_z : index
@@ -282,9 +282,9 @@ module attributes {gpu.container_module} {
       %block_dim_y = gpu.block_dim y upper_bound 12
       %block_dim_z = gpu.block_dim z upper_bound 16
 
-      // CHECK: test.reflect_bounds {smax = 8 : index, smin = 1 : index, umax = 8 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 12 : index, smin = 1 : index, umax = 12 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 16 : index, smin = 1 : index, umax = 16 : index, umin = 1 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 8 : index, smin = 1 : index, smax = 8 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 12 : index, smin = 1 : index, smax = 12 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 16 : index, smin = 1 : index, smax = 16 : index>
       %block_dim_x0 = test.reflect_bounds %block_dim_x : index
       %block_dim_y0 = test.reflect_bounds %block_dim_y : index
       %block_dim_z0 = test.reflect_bounds %block_dim_z : index
@@ -293,9 +293,9 @@ module attributes {gpu.container_module} {
       %thread_id_y = gpu.thread_id y upper_bound 12
       %thread_id_z = gpu.thread_id z upper_bound 16
 
-      // CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 11 : index, smin = 0 : index, umax = 11 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 15 : index, smin = 0 : index, umax = 15 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 11 : index, smin = 0 : index, smax = 11 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 15 : index, smin = 0 : index, smax = 15 : index>
       %thread_id_x0 = test.reflect_bounds %thread_id_x : index
       %thread_id_y0 = test.reflect_bounds %thread_id_y : index
       %thread_id_z0 = test.reflect_bounds %thread_id_z : index
@@ -304,9 +304,9 @@ module attributes {gpu.container_module} {
       %global_id_y = gpu.global_id y upper_bound 288
       %global_id_z = gpu.global_id z upper_bound 448
 
-      // CHECK: test.reflect_bounds {smax = 159 : index, smin = 0 : index, umax = 159 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 287 : index, smin = 0 : index, umax = 287 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 447 : index, smin = 0 : index, umax = 447 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 159 : index, smin = 0 : index, smax = 159 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 287 : index, smin = 0 : index, smax = 287 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 447 : index, smin = 0 : index, smax = 447 : index>
       %global_id_x0 = test.reflect_bounds %global_id_x : index
       %global_id_y0 = test.reflect_bounds %global_id_y : index
       %global_id_z0 = test.reflect_bounds %global_id_z : index
@@ -316,10 +316,10 @@ module attributes {gpu.container_module} {
       %num_subgroups = gpu.num_subgroups upper_bound 8 : index
       %lane_id = gpu.lane_id upper_bound 64
 
-      // CHECK: test.reflect_bounds {smax = 32 : index, smin = 1 : index, umax = 32 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 31 : index, smin = 0 : index, umax = 31 : index, umin = 0 : index}
-      // CHECK: test.reflect_bounds {smax = 8 : index, smin = 1 : index, umax = 8 : index, umin = 1 : index}
-      // CHECK: test.reflect_bounds {smax = 63 : index, smin = 0 : index, umax = 63 : index, umin = 0 : index}
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 32 : index, smin = 1 : index, smax = 32 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 31 : index, smin = 0 : index, smax = 31 : index>
+      // CHECK: test.reflect_bounds <umin = 1 : index, umax = 8 : index, smin = 1 : index, smax = 8 : index>
+      // CHECK: test.reflect_bounds <umin = 0 : index, umax = 63 : index, smin = 0 : index, smax = 63 : index>
       %subgroup_size0 = test.reflect_bounds %subgroup_size : index
       %subgroup_id0 = test.reflect_bounds %subgroup_id : index
       %num_subgroups0 = test.reflect_bounds %num_subgroups : index
@@ -334,12 +334,12 @@ module attributes {gpu.container_module} {
 
 // CHECK-LABEL: func @broadcast
 func.func @broadcast(%idx: i32) {
-  %0 = test.with_bounds { umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index > : index
   %1 = gpu.subgroup_broadcast %0, first_active_lane : index
   %2 = gpu.subgroup_broadcast %0, specific_lane %idx : index
 
-  // CHECK: test.reflect_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index}
-  // CHECK: test.reflect_bounds {smax = 10 : index, smin = 0 : index, umax = 10 : index, umin = 0 : index}
+  // CHECK: test.reflect_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index>
+  // CHECK: test.reflect_bounds <umin = 0 : index, umax = 10 : index, smin = 0 : index, smax = 10 : index>
 
   %4 = test.reflect_bounds %1 : index
   %5 = test.reflect_bounds %2 : index

diff  --git a/mlir/test/Dialect/MLProgram/pipeline-globals.mlir b/mlir/test/Dialect/MLProgram/pipeline-globals.mlir
index 3f45d0ff2eb38..37d59cda80805 100644
--- a/mlir/test/Dialect/MLProgram/pipeline-globals.mlir
+++ b/mlir/test/Dialect/MLProgram/pipeline-globals.mlir
@@ -233,7 +233,7 @@ func.func @call_with_unresolvable_callee(%arg0: memref<f32>) {
   // CHECK: ml_program.global_load @global_variable
   %0 = ml_program.global_load @global_variable : tensor<4xi32>
   // @callee is not defined anywhere in this module.
-  test.call_and_store @callee(%arg0), %arg0 {store_before_call = false} : (memref<f32>, memref<f32>) -> ()
+  test.call_and_store @callee(%arg0), %arg0 <store_before_call = false> : (memref<f32>, memref<f32>) -> ()
   // CHECK: ml_program.global_load @global_variable
   %1 = ml_program.global_load @global_variable : tensor<4xi32>
   func.return

diff  --git a/mlir/test/Dialect/MemRef/int-range-inference.mlir b/mlir/test/Dialect/MemRef/int-range-inference.mlir
index 34568d1d1d520..1228f64b9a056 100644
--- a/mlir/test/Dialect/MemRef/int-range-inference.mlir
+++ b/mlir/test/Dialect/MemRef/int-range-inference.mlir
@@ -13,7 +13,7 @@ func.func @dim_const(%m: memref<3x5xi32>) -> index {
 
 // CHECK-LABEL: @dim_any_static
 // CHECK: %[[op:.+]] = memref.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_any_static(%m: memref<3x5xi32>, %x: index) -> index {
   %0 = memref.dim %m, %x : memref<3x5xi32>
@@ -25,7 +25,7 @@ func.func @dim_any_static(%m: memref<3x5xi32>, %x: index) -> index {
 
 // CHECK-LABEL: @dim_dynamic
 // CHECK: %[[op:.+]] = memref.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_dynamic(%m: memref<?x5xi32>) -> index {
   %c0 = arith.constant 0 : index
@@ -38,7 +38,7 @@ func.func @dim_dynamic(%m: memref<?x5xi32>) -> index {
 
 // CHECK-LABEL: @dim_any_dynamic
 // CHECK: %[[op:.+]] = memref.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_any_dynamic(%m: memref<?x5xi32>, %x: index) -> index {
   %0 = memref.dim %m, %x : memref<?x5xi32>
@@ -50,7 +50,7 @@ func.func @dim_any_dynamic(%m: memref<?x5xi32>, %x: index) -> index {
 
 // CHECK-LABEL: @dim_some_omitting_dynamic
 // CHECK: %[[op:.+]] = memref.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_some_omitting_dynamic(%m: memref<?x3x5xi32>, %x: index) -> index {
   %c1 = arith.constant 1 : index
@@ -64,7 +64,7 @@ func.func @dim_some_omitting_dynamic(%m: memref<?x3x5xi32>, %x: index) -> index
 
 // CHECK-LABEL: @dim_unranked
 // CHECK: %[[op:.+]] = memref.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_unranked(%m: memref<*xi32>) -> index {
   %c0 = arith.constant 0 : index

diff  --git a/mlir/test/Dialect/OpenACC/acc-implicit-routine.mlir b/mlir/test/Dialect/OpenACC/acc-implicit-routine.mlir
index 88853dfb307ee..cef8fc663291e 100644
--- a/mlir/test/Dialect/OpenACC/acc-implicit-routine.mlir
+++ b/mlir/test/Dialect/OpenACC/acc-implicit-routine.mlir
@@ -244,7 +244,7 @@ module {
   func.func @test_undefined_callee() {
     %buf = memref.alloca() : memref<f32>
     acc.serial {
-      test.call_and_store @undefined_callee(%buf), %buf {store_before_call = false} : (memref<f32>, memref<f32>) -> ()
+      test.call_and_store @undefined_callee(%buf), %buf <store_before_call = false> : (memref<f32>, memref<f32>) -> ()
       acc.yield
     }
     return

diff  --git a/mlir/test/Dialect/Tensor/int-range-inference.mlir b/mlir/test/Dialect/Tensor/int-range-inference.mlir
index e90ebf5fccb8e..946416558e31d 100644
--- a/mlir/test/Dialect/Tensor/int-range-inference.mlir
+++ b/mlir/test/Dialect/Tensor/int-range-inference.mlir
@@ -13,7 +13,7 @@ func.func @dim_const(%t: tensor<3x5xi32>) -> index {
 
 // CHECK-LABEL: @dim_any_static
 // CHECK: %[[op:.+]] = tensor.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_any_static(%t: tensor<3x5xi32>, %x: index) -> index {
   %0 = tensor.dim %t, %x : tensor<3x5xi32>
@@ -25,7 +25,7 @@ func.func @dim_any_static(%t: tensor<3x5xi32>, %x: index) -> index {
 
 // CHECK-LABEL: @dim_dynamic
 // CHECK: %[[op:.+]] = tensor.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_dynamic(%t: tensor<?x5xi32>) -> index {
   %c0 = arith.constant 0 : index
@@ -38,7 +38,7 @@ func.func @dim_dynamic(%t: tensor<?x5xi32>) -> index {
 
 // CHECK-LABEL: @dim_any_dynamic
 // CHECK: %[[op:.+]] = tensor.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_any_dynamic(%t: tensor<?x5xi32>, %x: index) -> index {
   %0 = tensor.dim %t, %x : tensor<?x5xi32>
@@ -50,7 +50,7 @@ func.func @dim_any_dynamic(%t: tensor<?x5xi32>, %x: index) -> index {
 
 // CHECK-LABEL: @dim_some_omitting_dynamic
 // CHECK: %[[op:.+]] = tensor.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 5 : index, smin = 3 : index, umax = 5 : index, umin = 3 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 3 : index, umax = 5 : index, smin = 3 : index, smax = 5 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_some_omitting_dynamic(%t: tensor<?x3x5xi32>, %x: index) -> index {
   %c1 = arith.constant 1 : index
@@ -64,7 +64,7 @@ func.func @dim_some_omitting_dynamic(%t: tensor<?x3x5xi32>, %x: index) -> index
 
 // CHECK-LABEL: @dim_unranked
 // CHECK: %[[op:.+]] = tensor.dim
-// CHECK: %[[ret:.+]] = test.reflect_bounds {smax = 9223372036854775807 : index, smin = 0 : index, umax = 9223372036854775807 : index, umin = 0 : index} %[[op]]
+// CHECK: %[[ret:.+]] = test.reflect_bounds <umin = 0 : index, umax = 9223372036854775807 : index, smin = 0 : index, smax = 9223372036854775807 : index> %[[op]]
 // CHECK: return %[[ret]]
 func.func @dim_unranked(%t: tensor<*xi32>) -> index {
   %c0 = arith.constant 0 : index

diff  --git a/mlir/test/Dialect/Vector/int-range-interface.mlir b/mlir/test/Dialect/Vector/int-range-interface.mlir
index 6e2aa064a67f8..003d0d36f26b0 100644
--- a/mlir/test/Dialect/Vector/int-range-interface.mlir
+++ b/mlir/test/Dialect/Vector/int-range-interface.mlir
@@ -2,7 +2,7 @@
 
 
 // CHECK-LABEL: func @constant_vec
-// CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
 func.func @constant_vec() -> vector<8xindex> {
   %0 = arith.constant dense<[0, 1, 2, 3, 4, 5, 6, 7]> : vector<8xindex>
   %1 = test.reflect_bounds %0 : vector<8xindex>
@@ -10,7 +10,7 @@ func.func @constant_vec() -> vector<8xindex> {
 }
 
 // CHECK-LABEL: func @constant_splat
-// CHECK: test.reflect_bounds {smax = 3 : si32, smin = 3 : si32, umax = 3 : ui32, umin = 3 : ui32}
+// CHECK: test.reflect_bounds <umin = 3 : ui32, umax = 3 : ui32, smin = 3 : si32, smax = 3 : si32>
 func.func @constant_splat() -> vector<8xi32> {
   %0 = arith.constant dense<3> : vector<8xi32>
   %1 = test.reflect_bounds %0 : vector<8xi32>
@@ -25,65 +25,65 @@ func.func @float_constant_splat() -> vector<8xf32> {
 }
 
 // CHECK-LABEL: func @vector_splat
-// CHECK: test.reflect_bounds {smax = 5 : index, smin = 4 : index, umax = 5 : index, umin = 4 : index}
+// CHECK: test.reflect_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index>
 func.func @vector_splat() -> vector<4xindex> {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : index
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : index
   %1 = vector.broadcast %0 : index to vector<4xindex>
   %2 = test.reflect_bounds %1 : vector<4xindex>
   func.return %2 : vector<4xindex>
 }
 
 // CHECK-LABEL: func @vector_broadcast
-// CHECK: test.reflect_bounds {smax = 5 : index, smin = 4 : index, umax = 5 : index, umin = 4 : index}
+// CHECK: test.reflect_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index>
 func.func @vector_broadcast() -> vector<4x16xindex> {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : vector<16xindex>
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : vector<16xindex>
   %1 = vector.broadcast %0 : vector<16xindex> to vector<4x16xindex>
   %2 = test.reflect_bounds %1 : vector<4x16xindex>
   func.return %2 : vector<4x16xindex>
 }
 
 // CHECK-LABEL: func @vector_shape_cast
-// CHECK: test.reflect_bounds {smax = 5 : index, smin = 4 : index, umax = 5 : index, umin = 4 : index}
+// CHECK: test.reflect_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index>
 func.func @vector_shape_cast() -> vector<4x4xindex> {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : vector<16xindex>
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : vector<16xindex>
   %1 = vector.shape_cast %0 : vector<16xindex> to vector<4x4xindex>
   %2 = test.reflect_bounds %1 : vector<4x4xindex>
   func.return %2 : vector<4x4xindex>
 }
 
 // CHECK-LABEL: func @vector_transpose
-// CHECK: test.reflect_bounds {smax = 8 : index, smin = 7 : index, umax = 8 : index, umin = 7 : index}
+// CHECK: test.reflect_bounds <umin = 7 : index, umax = 8 : index, smin = 7 : index, smax = 8 : index>
 func.func @vector_transpose() -> vector<2x4xindex> {
-  %0 = test.with_bounds { smax = 8 : index, smin = 7 : index, umax = 8 : index, umin = 7 : index } : vector<4x2xindex>
+  %0 = test.with_bounds < smax = 8 : index, smin = 7 : index, umax = 8 : index, umin = 7 : index > : vector<4x2xindex>
   %1 = vector.transpose %0, [1, 0] : vector<4x2xindex> to vector<2x4xindex>
   %2 = test.reflect_bounds %1 : vector<2x4xindex>
   func.return %2 : vector<2x4xindex>
 }
 
 // CHECK-LABEL: func @vector_extract
-// CHECK: test.reflect_bounds {smax = 6 : index, smin = 5 : index, umax = 6 : index, umin = 5 : index}
+// CHECK: test.reflect_bounds <umin = 5 : index, umax = 6 : index, smin = 5 : index, smax = 6 : index>
 func.func @vector_extract() -> index {
-  %0 = test.with_bounds { umin = 5 : index, umax = 6 : index, smin = 5 : index, smax = 6 : index } : vector<4xindex>
+  %0 = test.with_bounds < umin = 5 : index, umax = 6 : index, smin = 5 : index, smax = 6 : index > : vector<4xindex>
   %1 = vector.extract %0[0] : index from vector<4xindex>
   %2 = test.reflect_bounds %1 : index
   func.return %2 : index
 }
 
 // CHECK-LABEL: func @vector_add
-// CHECK: test.reflect_bounds {smax = 12 : index, smin = 10 : index, umax = 12 : index, umin = 10 : index}
+// CHECK: test.reflect_bounds <umin = 10 : index, umax = 12 : index, smin = 10 : index, smax = 12 : index>
 func.func @vector_add() -> vector<4xindex> {
-  %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : vector<4xindex>
-  %1 = test.with_bounds { umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index } : vector<4xindex>
+  %0 = test.with_bounds < umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index > : vector<4xindex>
+  %1 = test.with_bounds < umin = 6 : index, umax = 7 : index, smin = 6 : index, smax = 7 : index > : vector<4xindex>
   %2 = arith.addi %0, %1 : vector<4xindex>
   %3 = test.reflect_bounds %2 : vector<4xindex>
   func.return %3 : vector<4xindex>
 }
 
 // CHECK-LABEL: func @vector_insert
-// CHECK: test.reflect_bounds {smax = 8 : index, smin = 5 : index, umax = 8 : index, umin = 5 : index}
+// CHECK: test.reflect_bounds <umin = 5 : index, umax = 8 : index, smin = 5 : index, smax = 8 : index>
 func.func @vector_insert() -> vector<4xindex> {
-  %0 = test.with_bounds { umin = 5 : index, umax = 7 : index, smin = 5 : index, smax = 7 : index } : vector<4xindex>
-  %1 = test.with_bounds { umin = 6 : index, umax = 8 : index, smin = 6 : index, smax = 8 : index } : index
+  %0 = test.with_bounds < umin = 5 : index, umax = 7 : index, smin = 5 : index, smax = 7 : index > : vector<4xindex>
+  %1 = test.with_bounds < umin = 6 : index, umax = 8 : index, smin = 6 : index, smax = 8 : index > : index
   %2 = vector.insert %1, %0[0] : index into vector<4xindex>
   %3 = test.reflect_bounds %2 : vector<4xindex>
   func.return %3 : vector<4xindex>
@@ -91,7 +91,7 @@ func.func @vector_insert() -> vector<4xindex> {
 
 // CHECK-LABEL: func @test_loaded_vector_extract
 // No bounds
-// CHECK: test.reflect_bounds {smax = 2147483647 : si32, smin = -2147483648 : si32, umax = 4294967295 : ui32, umin = 0 : ui32} %{{.*}} : i32
+// CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 4294967295 : ui32, smin = -2147483648 : si32, smax = 2147483647 : si32> %{{.*}} : i32
 func.func @test_loaded_vector_extract(%memref : memref<16xi32>) -> i32 {
   %c0 = arith.constant 0 : index
   %v = vector.load %memref[%c0] : memref<16xi32>, vector<4xi32>
@@ -101,16 +101,16 @@ func.func @test_loaded_vector_extract(%memref : memref<16xi32>) -> i32 {
 }
 
 // CHECK-LABEL: func @test_vector_extsi
-// CHECK: test.reflect_bounds {smax = 5 : si32, smin = 1 : si32, umax = 5 : ui32, umin = 1 : ui32}
+// CHECK: test.reflect_bounds <umin = 1 : ui32, umax = 5 : ui32, smin = 1 : si32, smax = 5 : si32>
 func.func @test_vector_extsi() -> vector<2xi32> {
-  %0 = test.with_bounds {smax = 5 : si8, smin = 1 : si8, umax = 5 : ui8, umin = 1 : ui8 } : vector<2xi8>
+  %0 = test.with_bounds <smax = 5 : si8, smin = 1 : si8, umax = 5 : ui8, umin = 1 : ui8 > : vector<2xi8>
   %1 = arith.extsi %0 : vector<2xi8> to vector<2xi32>
   %2 = test.reflect_bounds %1 : vector<2xi32>
   func.return %2 : vector<2xi32>
 }
 
 // CHECK-LABEL: func @vector_step
-// CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
 func.func @vector_step() -> vector<8xindex> {
   %0 = vector.step : vector<8xindex>
   %1 = test.reflect_bounds %0 : vector<8xindex>
@@ -118,7 +118,7 @@ func.func @vector_step() -> vector<8xindex> {
 }
 
 // CHECK-LABEL: func @vector_step_i32
-// CHECK: test.reflect_bounds {smax = 7 : si32, smin = 0 : si32, umax = 7 : ui32, umin = 0 : ui32}
+// CHECK: test.reflect_bounds <umin = 0 : ui32, umax = 7 : ui32, smin = 0 : si32, smax = 7 : si32>
 func.func @vector_step_i32() -> vector<8xi32> {
   %0 = vector.step : vector<8xi32>
   %1 = test.reflect_bounds %0 : vector<8xi32>
@@ -127,7 +127,7 @@ func.func @vector_step_i32() -> vector<8xi32> {
 
 // Boundary: 255 lanes do not wrap, so the upper bound is the last lane (254).
 // CHECK-LABEL: func @vector_step_i8_no_wrap_boundary
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 254 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 254 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @vector_step_i8_no_wrap_boundary() -> vector<255xi8> {
   %0 = vector.step : vector<255xi8>
   %1 = test.reflect_bounds %0 : vector<255xi8>
@@ -136,7 +136,7 @@ func.func @vector_step_i8_no_wrap_boundary() -> vector<255xi8> {
 
 // Boundary: 256 lanes exactly fill the i8 range without wrapping (last lane 255).
 // CHECK-LABEL: func @vector_step_i8_exact_fit
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 255 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @vector_step_i8_exact_fit() -> vector<256xi8> {
   %0 = vector.step : vector<256xi8>
   %1 = test.reflect_bounds %0 : vector<256xi8>
@@ -145,7 +145,7 @@ func.func @vector_step_i8_exact_fit() -> vector<256xi8> {
 
 // The sequence wraps (300 > 256), so the result spans the entire i8 range.
 // CHECK-LABEL: func @vector_step_i8_wrap
-// CHECK: test.reflect_bounds {smax = 127 : si8, smin = -128 : si8, umax = 255 : ui8, umin = 0 : ui8}
+// CHECK: test.reflect_bounds <umin = 0 : ui8, umax = 255 : ui8, smin = -128 : si8, smax = 127 : si8>
 func.func @vector_step_i8_wrap() -> vector<300xi8> {
   %0 = vector.step : vector<300xi8>
   %1 = test.reflect_bounds %0 : vector<300xi8>

diff  --git a/mlir/test/IR/attribute.mlir b/mlir/test/IR/attribute.mlir
index 7448ba9ddf6a3..ea378439c0f3b 100644
--- a/mlir/test/IR/attribute.mlir
+++ b/mlir/test/IR/attribute.mlir
@@ -946,7 +946,7 @@ func.func @default_value_printing(%arg0 : i32) {
   // CHECK: test.default_value_print %arg0
   "test.default_value_print"(%arg0) {"value_with_default" = 0 : i32} : (i32) -> ()
   // The attribute SHOULD be printed because it is not equal to the default
-  // CHECK: test.default_value_print {value_with_default = 1 : i32} %arg0
+  // CHECK: test.default_value_print <value_with_default = 1> %arg0
   "test.default_value_print"(%arg0) {"value_with_default" = 1 : i32} : (i32) -> ()
   return
 }

diff  --git a/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops-invalid.mlir b/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops-invalid.mlir
index 7392b9d2ec712..73085684d7e0b 100644
--- a/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops-invalid.mlir
+++ b/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops-invalid.mlir
@@ -5,8 +5,8 @@
 // See: https://github.com/llvm/llvm-project/issues/120882
 func.func @with_bounds_mismatched_width() -> i8 {
   // expected-error at +1 {{'test.with_bounds' op bound attribute width (64) does not match result type width (8)}}
-  %0 = test.with_bounds { umin = 10 : i64, umax = 15 : i64,
-                           smin = 10 : i64, smax = 15 : i64 } : i8
+  %0 = test.with_bounds < umin = 10 : i64, umax = 15 : i64,
+                           smin = 10 : i64, smax = 15 : i64 > : i8
   %1 = test.reflect_bounds %0 : i8
   return %1 : i8
 }

diff  --git a/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops.mlir b/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops.mlir
index c6344447d9f74..8908f923ce6ba 100644
--- a/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops.mlir
+++ b/mlir/test/Interfaces/InferIntRangeInterface/infer-int-range-test-ops.mlir
@@ -4,8 +4,8 @@
 // CHECK: %[[cst:.*]] = "test.constant"() <{value = 3 : index}
 // CHECK: return %[[cst]]
 func.func @constant() -> index {
-  %0 = test.with_bounds { umin = 3 : index, umax = 3 : index,
-                               smin = 3 : index, smax = 3 : index} : index
+  %0 = test.with_bounds < umin = 3 : index, umax = 3 : index,
+                               smin = 3 : index, smax = 3 : index> : index
   func.return %0 : index
 }
 
@@ -13,16 +13,16 @@ func.func @constant() -> index {
 // CHECK: %[[cst:.*]] = "test.constant"() <{value = 4 : index}
 // CHECK: return %[[cst]]
 func.func @increment() -> index {
-  %0 = test.with_bounds { umin = 3 : index, umax = 3 : index, smin = 0 : index, smax = 0x7fffffffffffffff : index } : index
+  %0 = test.with_bounds < umin = 3 : index, umax = 3 : index, smin = 0 : index, smax = 0x7fffffffffffffff : index > : index
   %1 = test.increment %0 : index
   func.return %1 : index
 }
 
 // CHECK-LABEL: func @maybe_increment
-// CHECK: test.reflect_bounds {smax = 4 : index, smin = 3 : index, umax = 4 : index, umin = 3 : index}
+// CHECK: test.reflect_bounds <umin = 3 : index, umax = 4 : index, smin = 3 : index, smax = 4 : index>
 func.func @maybe_increment(%arg0 : i1) -> index {
-  %0 = test.with_bounds { umin = 3 : index, umax = 3 : index,
-                               smin = 3 : index, smax = 3 : index} : index
+  %0 = test.with_bounds < umin = 3 : index, umax = 3 : index,
+                               smin = 3 : index, smax = 3 : index> : index
   %1 = scf.if %arg0 -> index {
     scf.yield %0 : index
   } else {
@@ -34,10 +34,10 @@ func.func @maybe_increment(%arg0 : i1) -> index {
 }
 
 // CHECK-LABEL: func @maybe_increment_br
-// CHECK: test.reflect_bounds {smax = 4 : index, smin = 3 : index, umax = 4 : index, umin = 3 : index}
+// CHECK: test.reflect_bounds <umin = 3 : index, umax = 4 : index, smin = 3 : index, smax = 4 : index>
 func.func @maybe_increment_br(%arg0 : i1) -> index {
-  %0 = test.with_bounds { umin = 3 : index, umax = 3 : index,
-                               smin = 3 : index, smax = 3 : index} : index
+  %0 = test.with_bounds < umin = 3 : index, umax = 3 : index,
+                               smin = 3 : index, smax = 3 : index> : index
   cf.cond_br %arg0, ^bb0, ^bb1
 ^bb0:
     %1 = test.increment %0 : index
@@ -50,14 +50,14 @@ func.func @maybe_increment_br(%arg0 : i1) -> index {
 }
 
 // CHECK-LABEL: func @for_bounds
-// CHECK: test.reflect_bounds {smax = 1 : index, smin = 0 : index, umax = 1 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index>
 func.func @for_bounds() -> index {
-  %c0 = test.with_bounds { umin = 0 : index, umax = 0 : index,
-                                smin = 0 : index, smax = 0 : index} : index
-  %c1 = test.with_bounds { umin = 1 : index, umax = 1 : index,
-                                smin = 1 : index, smax = 1 : index} : index
-  %c2 = test.with_bounds { umin = 2 : index, umax = 2 : index,
-                                smin = 2 : index, smax = 2 : index} : index
+  %c0 = test.with_bounds < umin = 0 : index, umax = 0 : index,
+                                smin = 0 : index, smax = 0 : index> : index
+  %c1 = test.with_bounds < umin = 1 : index, umax = 1 : index,
+                                smin = 1 : index, smax = 1 : index> : index
+  %c2 = test.with_bounds < umin = 2 : index, umax = 2 : index,
+                                smin = 2 : index, smax = 2 : index> : index
 
   %0 = scf.for %arg0 = %c0 to %c2 step %c1 iter_args(%arg2 = %c0) -> index {
     scf.yield %arg0 : index
@@ -67,14 +67,14 @@ func.func @for_bounds() -> index {
 }
 
 // CHECK-LABEL: func @no_analysis_of_loop_variants
-// CHECK: test.reflect_bounds {smax = 9223372036854775807 : index, smin = -9223372036854775808 : index, umax = -1 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = -1 : index, smin = -9223372036854775808 : index, smax = 9223372036854775807 : index>
 func.func @no_analysis_of_loop_variants() -> index {
-  %c0 = test.with_bounds { umin = 0 : index, umax = 0 : index,
-                                smin = 0 : index, smax = 0 : index} : index
-  %c1 = test.with_bounds { umin = 1 : index, umax = 1 : index,
-                                smin = 1 : index, smax = 1 : index} : index
-  %c2 = test.with_bounds { umin = 2 : index, umax = 2 : index,
-                                smin = 2 : index, smax = 2 : index} : index
+  %c0 = test.with_bounds < umin = 0 : index, umax = 0 : index,
+                                smin = 0 : index, smax = 0 : index> : index
+  %c1 = test.with_bounds < umin = 1 : index, umax = 1 : index,
+                                smin = 1 : index, smax = 1 : index> : index
+  %c2 = test.with_bounds < umin = 2 : index, umax = 2 : index,
+                                smin = 2 : index, smax = 2 : index> : index
 
   %0 = scf.for %arg0 = %c0 to %c2 step %c1 iter_args(%arg2 = %c0) -> index {
     %1 = test.increment %arg2 : index
@@ -85,7 +85,7 @@ func.func @no_analysis_of_loop_variants() -> index {
 }
 
 // CHECK-LABEL: func @region_args
-// CHECK: test.reflect_bounds {smax = 4 : index, smin = 3 : index, umax = 4 : index, umin = 3 : index}
+// CHECK: test.reflect_bounds <umin = 3 : index, umax = 4 : index, smin = 3 : index, smax = 4 : index>
 func.func @region_args() {
   test.with_bounds_region { umin = 3 : index, umax = 4 : index,
                             smin = 3 : index, smax = 4 : index } %arg0 : index {
@@ -95,7 +95,7 @@ func.func @region_args() {
 }
 
 // CHECK-LABEL: func @func_args_unbound
-// CHECK: test.reflect_bounds {smax = 9223372036854775807 : index, smin = -9223372036854775808 : index, umax = -1 : index, umin = 0 : index}
+// CHECK: test.reflect_bounds <umin = 0 : index, umax = -1 : index, smin = -9223372036854775808 : index, smax = 9223372036854775807 : index>
 func.func @func_args_unbound(%arg0 : index) -> index {
   %0 = test.reflect_bounds %arg0 : index
   func.return %0 : index
@@ -104,8 +104,8 @@ func.func @func_args_unbound(%arg0 : index) -> index {
 // CHECK-LABEL: func @propagate_across_while_loop_false()
 func.func @propagate_across_while_loop_false() -> index {
   // CHECK: %[[C1:.*]] = "test.constant"() <{value = 1
-  %0 = test.with_bounds { umin = 0 : index, umax = 0 : index,
-                          smin = 0 : index, smax = 0 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0 : index,
+                          smin = 0 : index, smax = 0 : index > : index
   %1 = scf.while : () -> index {
     %false = arith.constant false
     scf.condition(%false) %0 : index
@@ -121,8 +121,8 @@ func.func @propagate_across_while_loop_false() -> index {
 // CHECK-LABEL: func @propagate_across_while_loop
 func.func @propagate_across_while_loop(%arg0 : i1) -> index {
   // CHECK: %[[C1:.*]] = "test.constant"() <{value = 1
-  %0 = test.with_bounds { umin = 0 : index, umax = 0 : index,
-                          smin = 0 : index, smax = 0 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0 : index,
+                          smin = 0 : index, smax = 0 : index > : index
   %1 = scf.while : () -> index {
     scf.condition(%arg0) %0 : index
   } do {
@@ -137,8 +137,8 @@ func.func @propagate_across_while_loop(%arg0 : i1) -> index {
 // CHECK-LABEL: func @dont_propagate_across_infinite_loop()
 func.func @dont_propagate_across_infinite_loop() -> index {
   // CHECK: %[[C0:.*]] = "test.constant"() <{value = 0
-  %0 = test.with_bounds { umin = 0 : index, umax = 0 : index,
-                          smin = 0 : index, smax = 0 : index } : index
+  %0 = test.with_bounds < umin = 0 : index, umax = 0 : index,
+                          smin = 0 : index, smax = 0 : index > : index
   // CHECK: %[[loopRes:.*]] = scf.while
   %1 = scf.while : () -> index {
     %true = arith.constant true
@@ -187,14 +187,14 @@ func.func @propagate_from_block_to_iterarg(%arg0: index, %arg1: i1) {
 
 // CHECK-LABEL: func @multiple_loop_ivs
 func.func @multiple_loop_ivs(%arg0: memref<?x64xi32>) {
-  %ub1 = test.with_bounds { umin = 1 : index, umax = 32 : index,
-                          smin = 1 : index, smax = 32 : index } : index
+  %ub1 = test.with_bounds < umin = 1 : index, umax = 32 : index,
+                          smin = 1 : index, smax = 32 : index > : index
   %c0_i32 = arith.constant 0 : i32
   // CHECK: scf.forall
   scf.forall (%arg1, %arg2) in (%ub1, 64) {
-    // CHECK: test.reflect_bounds {smax = 31 : index, smin = 0 : index, umax = 31 : index, umin = 0 : index}
+    // CHECK: test.reflect_bounds <umin = 0 : index, umax = 31 : index, smin = 0 : index, smax = 31 : index>
     %1 = test.reflect_bounds %arg1 : index
-    // CHECK-NEXT: test.reflect_bounds {smax = 63 : index, smin = 0 : index, umax = 63 : index, umin = 0 : index}
+    // CHECK-NEXT: test.reflect_bounds <umin = 0 : index, umax = 63 : index, smin = 0 : index, smax = 63 : index>
     %2 = test.reflect_bounds %arg2 : index
     memref.store %c0_i32, %arg0[%1, %2] : memref<?x64xi32>
   }

diff  --git a/mlir/test/Transforms/loop-invariant-code-motion.mlir b/mlir/test/Transforms/loop-invariant-code-motion.mlir
index 31a4f64dd7de0..ac4fbf72a12d3 100644
--- a/mlir/test/Transforms/loop-invariant-code-motion.mlir
+++ b/mlir/test/Transforms/loop-invariant-code-motion.mlir
@@ -1135,7 +1135,7 @@ func.func @speculate_ceildivsi_const(
 func.func @no_speculate_divui_range(
 // CHECK-LABEL: @no_speculate_divui_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK: arith.divui
@@ -1148,7 +1148,7 @@ func.func @no_speculate_divui_range(
 func.func @no_speculate_udiv_range(
 // CHECK-LABEL: @no_speculate_udiv_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK: llvm.udiv
@@ -1161,8 +1161,8 @@ func.func @no_speculate_udiv_range(
 func.func @no_speculate_divsi_range(
 // CHECK-LABEL: @no_speculate_divsi_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = -1: i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = -1: i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK-COUNT-2: arith.divsi
@@ -1176,8 +1176,8 @@ func.func @no_speculate_divsi_range(
 func.func @no_speculate_sdiv_range(
 // CHECK-LABEL: @no_speculate_sdiv_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = -1: i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = -1: i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK-COUNT-2: llvm.sdiv
@@ -1191,7 +1191,7 @@ func.func @no_speculate_sdiv_range(
 func.func @no_speculate_ceildivui_range(
 // CHECK-LABEL: @no_speculate_ceildivui_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK: arith.ceildivui
@@ -1204,8 +1204,8 @@ func.func @no_speculate_ceildivui_range(
 func.func @no_speculate_ceildivsi_range(
 // CHECK-LABEL: @no_speculate_ceildivsi_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = -1 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = -1 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = 127 : i8, smin = 0 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: scf.for
 // CHECK-COUNT-2: arith.ceildivsi
@@ -1219,7 +1219,7 @@ func.func @no_speculate_ceildivsi_range(
 func.func @speculate_divui_range(
 // CHECK-LABEL: @speculate_divui_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: arith.divui
 // CHECK: scf.for
@@ -1232,7 +1232,7 @@ func.func @speculate_divui_range(
 func.func @speculate_udiv_range(
 // CHECK-LABEL: @speculate_udiv_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: llvm.udiv
 // CHECK: scf.for
@@ -1245,8 +1245,8 @@ func.func @speculate_udiv_range(
 func.func @speculate_divsi_range(
 // CHECK-LABEL: @speculate_divsi_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK-COUNT-2: arith.divsi
 // CHECK: scf.for
@@ -1261,8 +1261,8 @@ func.func @speculate_divsi_range(
 func.func @speculate_sdiv_range(
 // CHECK-LABEL: @speculate_sdiv_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK-COUNT-2: llvm.sdiv
 // CHECK: scf.for
@@ -1277,7 +1277,7 @@ func.func @speculate_sdiv_range(
 func.func @speculate_ceildivui_range(
 // CHECK-LABEL: @speculate_ceildivui_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom = test.with_bounds {smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8} : i8
+  %denom = test.with_bounds <smax = 127 : i8, smin = -128 : i8, umax = 255 : i8, umin = 1 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK: arith.ceildivui
 // CHECK: scf.for
@@ -1290,8 +1290,8 @@ func.func @speculate_ceildivui_range(
 func.func @speculate_ceildivsi_range(
 // CHECK-LABEL: @speculate_ceildivsi_range(
     %num: i8, %lb: index, %ub: index, %step: index) {
-  %denom0 = test.with_bounds {smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8} : i8
-  %denom1 = test.with_bounds {smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8} : i8
+  %denom0 = test.with_bounds <smax = 127 : i8, smin = 1 : i8, umax = 255 : i8, umin = 0 : i8> : i8
+  %denom1 = test.with_bounds <smax = -2 : i8, smin = -128 : i8, umax = 255 : i8, umin = 0 : i8> : i8
   scf.for %i = %lb to %ub step %step {
 // CHECK-COUNT-2: arith.ceildivsi
 // CHECK: scf.for

diff  --git a/mlir/test/Transforms/make-composed-folded-affine-apply.mlir b/mlir/test/Transforms/make-composed-folded-affine-apply.mlir
index 138426827fa15..d81ddeb4f950a 100644
--- a/mlir/test/Transforms/make-composed-folded-affine-apply.mlir
+++ b/mlir/test/Transforms/make-composed-folded-affine-apply.mlir
@@ -16,8 +16,8 @@
 // Check the apply gets simplified.
 // CHECK: @apply_simplification
 func.func @apply_simplification_1() -> index {
-  %0 = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  %1 = test.value_with_bounds {max = 64 : index, min = 32 : index}
+  %0 = test.value_with_bounds <min = 32, max = 64>
+  %1 = test.value_with_bounds <min = 32, max = 64>
   %2 = affine.min #map()[%0, %1]
   // CHECK-NOT: affine.apply
   // CHECK: arith.constant 2 : index
@@ -27,9 +27,9 @@ func.func @apply_simplification_1() -> index {
 
 // Check the simplification can match non-trivial affine expressions like s1 + s2.
 func.func @apply_simplification_2() -> index {
-  %0 = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  %1 = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  %2 = test.value_with_bounds {max = 64 : index, min = 32 : index}
+  %0 = test.value_with_bounds <min = 32, max = 64>
+  %1 = test.value_with_bounds <min = 32, max = 64>
+  %2 = test.value_with_bounds <min = 32, max = 64>
   %3 = affine.min #map2()[%0, %1, %2]
   // CHECK-NOT: affine.apply
   // CHECK: arith.constant 4 : index
@@ -41,13 +41,13 @@ func.func @apply_simplification_2() -> index {
 // The apply cannot be simplified because `s1 = %0` doesn't appear in the input min.
 // CHECK: @no_simplification_0
 func.func @no_simplification_0() -> index {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 64 : index, min = 16 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 32, max = 64>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 16, max = 64>
   // CHECK: %[[V2:.*]] = affine.min #{{.*}}()[%[[V0]], %[[V1]]]
   // CHECK: %[[V3:.*]] = affine.apply #[[MAP5]]()[%[[V2]], %[[V0]]]
   // CHECK: return %[[V3]] : index
-  %0 = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  %1 = test.value_with_bounds {max = 64 : index, min = 16 : index}
+  %0 = test.value_with_bounds <min = 32, max = 64>
+  %1 = test.value_with_bounds <min = 16, max = 64>
   %2 = affine.min #map4()[%0, %1]
   %3 = affine.apply #map5()[%2, %0]
   return %3 : index
@@ -56,13 +56,13 @@ func.func @no_simplification_0() -> index {
 // The apply cannot be simplified because the min cannot be proven to be greater than 0.
 // CHECK: @no_simplification_1
 func.func @no_simplification_1() -> index {
-  // CHECK: %[[V0:.*]] = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  // CHECK: %[[V1:.*]] = test.value_with_bounds {max = 64 : index, min = 16 : index}
+  // CHECK: %[[V0:.*]] = test.value_with_bounds <min = 32, max = 64>
+  // CHECK: %[[V1:.*]] = test.value_with_bounds <min = 16, max = 64>
   // CHECK: %[[V2:.*]] = affine.min #{{.*}}()[%[[V0]], %[[V1]]]
   // CHECK: %[[V3:.*]] = affine.apply #[[MAP1]]()[%[[V2]], %[[V1]]]
   // CHECK: return %[[V3]] : index
-  %0 = test.value_with_bounds {max = 64 : index, min = 32 : index}
-  %1 = test.value_with_bounds {max = 64 : index, min = 16 : index}
+  %0 = test.value_with_bounds <min = 32, max = 64>
+  %1 = test.value_with_bounds <min = 16, max = 64>
   %2 = affine.min #map6()[%0, %1]
   %3 = affine.apply #map1()[%2, %1]
   return %3 : index

diff  --git a/mlir/test/lib/Dialect/Test/TestDialect.td b/mlir/test/lib/Dialect/Test/TestDialect.td
index ed0bedaced126..37a263f1d10b8 100644
--- a/mlir/test/lib/Dialect/Test/TestDialect.td
+++ b/mlir/test/lib/Dialect/Test/TestDialect.td
@@ -13,8 +13,6 @@ include "mlir/IR/OpBase.td"
 
 def Test_Dialect : Dialect {
   let name = "test";
-  // Keep legacy assembly format coverage for test operations.
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "::test";
   let hasCanonicalizer = 1;
   let hasConstantMaterializer = 1;

diff  --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td
index c3e06dc968a27..a6b05b55804b7 100644
--- a/mlir/test/lib/Dialect/Test/TestOps.td
+++ b/mlir/test/lib/Dialect/Test/TestOps.td
@@ -2386,7 +2386,7 @@ def TestCrashingReturnOp : TEST_Op<"crashing_return", [
        ["getMutableSuccessorOperands"]>,
     Terminator]> {
   let arguments = (ins Variadic<AnyType>:$args, UnitAttr:$valid);
-  let assemblyFormat = "($args^ `:` type($args))? attr-dict";
+  let assemblyFormat = "($args^ `:` type($args))? prop-dict attr-dict";
   let hasVerifier = 1;
 }
 def TestCastOp : TEST_Op<"cast">,
@@ -2733,12 +2733,12 @@ def TestValueWithBoundsOp : TEST_Op<"value_with_bounds", [
     Example:
 
     ```mlir
-    %0 = test.value_with_bounds { min = 4 : index, max = 5 : index}
+    %0 = test.value_with_bounds <min = 4, max = 5>
     ```
   }];
   let arguments = (ins IndexAttr:$min, IndexAttr:$max);
   let results = (outs Index:$result);
-  let assemblyFormat = "attr-dict";
+  let assemblyFormat = "prop-dict attr-dict";
 }
 
 
@@ -3422,12 +3422,12 @@ def TestNVVMRequiresSMArchOrFamilyCondOp :
 
 def TestDefaultStrAttrNoValueOp : TEST_Op<"no_str_value"> {
   let arguments = (ins DefaultValuedAttr<StrAttr, "">:$value);
-  let assemblyFormat = "attr-dict";
+  let assemblyFormat = "prop-dict attr-dict";
 }
 
 def TestDefaultStrAttrHasValueOp : TEST_Op<"has_str_value"> {
   let arguments = (ins DefaultValuedStrAttr<StrAttr, "">:$value);
-  let assemblyFormat = "attr-dict";
+  let assemblyFormat = "prop-dict attr-dict";
 }
 
 def : Pat<(TestDefaultStrAttrNoValueOp $value),
@@ -3463,7 +3463,7 @@ def : Pat<(TestVariadicRewriteSrcOp $arg, $brg, $crg),
 def TestDefaultAttrPrintOp : TEST_Op<"default_value_print"> {
   let arguments = (ins DefaultValuedAttr<I32Attr, "0">:$value_with_default,
                    I32:$operand);
-  let assemblyFormat = "attr-dict $operand";
+  let assemblyFormat = "prop-dict attr-dict $operand";
 }
 
 //===----------------------------------------------------------------------===//
@@ -3554,7 +3554,7 @@ def TestWithBoundsOp : TEST_Op<"with_bounds",
     Example:
 
     ```mlir
-    %0 = test.with_bounds { umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index } : index
+    %0 = test.with_bounds <umin = 4 : index, umax = 5 : index, smin = 4 : index, smax = 5 : index> : index
     ```
   }];
 
@@ -3564,7 +3564,7 @@ def TestWithBoundsOp : TEST_Op<"with_bounds",
                        APIntAttr:$smax);
   let results = (outs InferIntRangeType:$fakeVal);
 
-  let assemblyFormat = "attr-dict `:` type($fakeVal)";
+  let assemblyFormat = "prop-dict attr-dict `:` type($fakeVal)";
 }
 
 def TestWithoutBoundsOp : TEST_Op<"without_bounds",
@@ -3615,7 +3615,7 @@ def TestReflectBoundsOp : TEST_Op<"reflect_bounds",
     Example:
 
     ```mlir
-    CHECK: test.reflect_bounds {smax = 7 : index, smin = 0 : index, umax = 7 : index, umin = 0 : index}
+    CHECK: test.reflect_bounds <umin = 0 : index, umax = 7 : index, smin = 0 : index, smax = 7 : index>
     %1 = test.reflect_bounds %0 : index
     ```
   }];
@@ -3627,7 +3627,7 @@ def TestReflectBoundsOp : TEST_Op<"reflect_bounds",
                        OptionalAttr<APIntAttr>:$smax);
   let results = (outs InferIntRangeType:$result);
 
-  let assemblyFormat = "attr-dict $value `:` type($result)";
+  let assemblyFormat = "prop-dict attr-dict $value `:` type($result)";
 }
 
 //===----------------------------------------------------------------------===//
@@ -4430,7 +4430,7 @@ def TestCallAndStoreOp : TEST_Op<"call_and_store",
     Variadic<AnyType>:$results
   );
   let assemblyFormat =
-    "$callee `(` $callee_operands `)` `,` $address attr-dict "
+    "$callee `(` $callee_operands `)` `,` $address prop-dict attr-dict "
     "`:` functional-type(operands, results)";
 }
 
@@ -4448,7 +4448,7 @@ def TestCallOnDeviceOp : TEST_Op<"call_on_device",
   );
   let assemblyFormat =
     "$callee `(` $forwarded_operands `)` `,` $non_forwarded_device_operand "
-    "attr-dict `:` functional-type(operands, results)";
+    "prop-dict attr-dict `:` functional-type(operands, results)";
 }
 
 // A call-like operation whose first result is produced by the operation itself
@@ -4468,7 +4468,7 @@ def TestCallAndProduceOp : TEST_Op<"call_and_produce",
     Variadic<AnyType>:$forwarded
   );
   let assemblyFormat =
-    "$callee `(` $forwarded_operands `)` attr-dict "
+    "$callee `(` $forwarded_operands `)` prop-dict attr-dict "
     "`:` functional-type(operands, results)";
 }
 
@@ -4481,7 +4481,7 @@ def TestStoreWithARegion : TEST_Op<"store_with_a_region",
   );
   let regions = (region AnyRegion:$body);
   let assemblyFormat =
-    "$address attr-dict-with-keyword regions `:` type($address)";
+    "$address prop-dict attr-dict-with-keyword regions `:` type($address)";
 }
 
 def TestStoreWithALoopRegion : TEST_Op<"store_with_a_loop_region",
@@ -4493,7 +4493,7 @@ def TestStoreWithALoopRegion : TEST_Op<"store_with_a_loop_region",
   );
   let regions = (region AnyRegion:$body);
   let assemblyFormat =
-    "$address attr-dict-with-keyword regions `:` type($address)";
+    "$address prop-dict attr-dict-with-keyword regions `:` type($address)";
 }
 
 def TestStoreWithARegionTerminator : TEST_Op<"store_with_a_region_terminator",

diff  --git a/mlir/test/lib/Dialect/Test/TestOpsSyntax.td b/mlir/test/lib/Dialect/Test/TestOpsSyntax.td
index 3ab3c8b9db6e7..8b0ded9ad27d9 100644
--- a/mlir/test/lib/Dialect/Test/TestOpsSyntax.td
+++ b/mlir/test/lib/Dialect/Test/TestOpsSyntax.td
@@ -184,7 +184,7 @@ def FormatLiteralOp : TEST_Op<"format_literal_op"> {
   }];
 }
 
-// Test that we elide attributes that are within the syntax.
+// Test that inherent and discardable attributes use separate dictionaries.
 def FormatAttrOp : TEST_Op<"format_attr_op"> {
   let arguments = (ins I64Attr:$attr);
   let assemblyFormat = "$attr attr-dict";
@@ -221,7 +221,7 @@ def FormatOptSymbolRefAttrOp : TEST_Op<"format_opt_symbol_ref_attr_op"> {
 // Test that we elide attributes that are within the syntax.
 def FormatAttrDictWithKeywordOp : TEST_Op<"format_attr_dict_w_keyword"> {
   let arguments = (ins I64Attr:$attr, OptionalAttr<I64Attr>:$opt_attr);
-  let assemblyFormat = "attr-dict-with-keyword";
+  let assemblyFormat = "prop-dict attr-dict-with-keyword";
 }
 
 // Test that we don't need to provide types in the format if they are buildable.
@@ -637,7 +637,7 @@ def FormatCustomDirectiveAttrDict
     : TEST_Op<"format_custom_directive_attrdict"> {
   let arguments = (ins I64Attr:$attr, OptionalAttr<I64Attr>:$optAttr);
   let assemblyFormat = [{
-    custom<CustomDirectiveAttrDict>( attr-dict )
+    prop-dict custom<CustomDirectiveAttrDict>( attr-dict )
   }];
 }
 

diff  --git a/mlir/test/mlir-tblgen/constant-str-attr-invalid.mlir b/mlir/test/mlir-tblgen/constant-str-attr-invalid.mlir
index 1d0e62d5dec09..d0106b4ea3151 100644
--- a/mlir/test/mlir-tblgen/constant-str-attr-invalid.mlir
+++ b/mlir/test/mlir-tblgen/constant-str-attr-invalid.mlir
@@ -1,4 +1,4 @@
 // RUN: mlir-opt -verify-diagnostics %s
 
 // Test DefaultValuedAttr<StrAttr, ""> is recognized as "no default value"
-test.no_str_value {} // expected-error {{'test.no_str_value' op requires attribute 'value'}}
+test.no_str_value // expected-error {{properties dictionary is missing required attribute: value}}

diff  --git a/mlir/test/mlir-tblgen/op-format-invalid.td b/mlir/test/mlir-tblgen/op-format-invalid.td
index dc0d1688cc8ec..1b78d8177091f 100644
--- a/mlir/test/mlir-tblgen/op-format-invalid.td
+++ b/mlir/test/mlir-tblgen/op-format-invalid.td
@@ -8,8 +8,6 @@ include "mlir/Interfaces/InferTypeOpInterface.td"
 
 def TestDialect : Dialect {
   let name = "test";
-  // Exercise the legacy assembly format behavior.
-  let useStrictPropertiesInAssemblyFormat = 0;
 }
 def TestStrictPropertiesDialect : Dialect {
   let name = "test_strict_properties";

diff  --git a/mlir/test/mlir-tblgen/op-format.mlir b/mlir/test/mlir-tblgen/op-format.mlir
index 1c1e2c68ce0d3..d01273b5384c2 100644
--- a/mlir/test/mlir-tblgen/op-format.mlir
+++ b/mlir/test/mlir-tblgen/op-format.mlir
@@ -40,11 +40,11 @@ test.format_opt_symbol_name_attr_op
 test.format_opt_symbol_ref_attr_op @foo {test.unit}
 test.format_opt_symbol_ref_attr_op {test.unit}
 
-// CHECK: test.format_attr_dict_w_keyword attributes {attr = 10 : i64}
-test.format_attr_dict_w_keyword attributes {attr = 10 : i64}
+// CHECK: test.format_attr_dict_w_keyword <attr = 10>
+test.format_attr_dict_w_keyword <attr = 10>
 
-// CHECK: test.format_attr_dict_w_keyword attributes {attr = 10 : i64, opt_attr = 10 : i64}
-test.format_attr_dict_w_keyword attributes {attr = 10 : i64, opt_attr = 10 : i64}
+// CHECK: test.format_attr_dict_w_keyword <attr = 10, opt_attr = 10> attributes {tag = "test"}
+test.format_attr_dict_w_keyword <attr = 10, opt_attr = 10> attributes {tag = "test"}
 
 // CHECK: test.format_buildable_type_op %[[I64]]
 %ignored = test.format_buildable_type_op %i64

diff  --git a/mlir/test/mlir-tblgen/op-format.td b/mlir/test/mlir-tblgen/op-format.td
index f98632886449d..679d45b7fa0de 100644
--- a/mlir/test/mlir-tblgen/op-format.td
+++ b/mlir/test/mlir-tblgen/op-format.td
@@ -6,8 +6,6 @@ include "mlir/IR/EnumAttr.td"
 
 def TestDialect : Dialect {
   let name = "test";
-  // Exercise the legacy assembly format behavior.
-  let useStrictPropertiesInAssemblyFormat = 0;
 }
 def TestStrictPropertiesDialect : Dialect {
   let name = "test_strict_properties";
@@ -33,32 +31,11 @@ class TestStrictPropertiesFormat_Op<string fmt, list<Trait> traits = []>
 // CHECK: // coverity[ARRAY_VS_SINGLETON]
 // CHECK-NEXT: if (parser.resolveOperands(
 // CHECK-LABEL: AttrDictContextOperand::print
-// CHECK: ::llvm::ArrayRef<::llvm::StringRef> elidedAttrs;
-// CHECK: _odsPrinter.printOptionalAttrDict(_odsAttrs.getDictionary((*this)->getContext()).getValue(), elidedAttrs);
+// CHECK: _odsPrinter.printOptionalAttrDict((*this)->getDiscardableAttrDictionary().getValue());
 def AttrDictContextOperand : TestFormat_Op<[{
   $context `:` type($context) attr-dict
 }]>, Arguments<(ins AnyType:$context)>;
 
-// CHECK-LABEL: AttrDictDefaultInherentAttr::parse
-// CHECK: verifyInherentAttrs
-def AttrDictDefaultInherentAttr : TestFormat_Op<[{
-  $attr attr-dict
-}]>, Arguments<(ins I64Attr:$attr)>;
-
-// CHECK-LABEL: AttrDictElideDefaultAndFixedAttr::print
-// CHECK: ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs = {"used"};
-// CHECK: elidedAttrs.push_back("attr");
-def AttrDictElideDefaultAndFixedAttr : TestFormat_Op<"$used attr-dict">,
-    Arguments<(ins I64Attr:$used,
-                   DefaultValuedStrAttr<StrAttr, "default">:$attr)>;
-
-// CHECK-LABEL: AttrDictElideDefaultAttr::print
-// CHECK: ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs = {};
-// CHECK: if(attr && (attr ==
-// CHECK: elidedAttrs.push_back("attr");
-def AttrDictElideDefaultAttr : TestFormat_Op<"attr-dict">,
-    Arguments<(ins DefaultValuedStrAttr<StrAttr, "default">:$attr)>;
-
 // CHECK-LABEL: AttrDictStrictDefaultAttr::print
 // CHECK-NOT: elidedAttrs
 // CHECK: _odsPrinter.printOptionalAttrDict((*this)->getDiscardableAttrDictionary().getValue());
@@ -109,7 +86,7 @@ def AttrDictStrictPropDictInherentAttr : TestStrictPropertiesFormat_Op<[{
 // CHECK: parseFoo({{.*}}, parser.getBuilder().getI1Type())
 // CHECK-LABEL: CustomStringLiteralA::print
 // CHECK: printFoo({{.*}}, ::mlir::Builder(getContext()).getI1Type())
-// CHECK: ::llvm::ArrayRef<::llvm::StringRef> elidedAttrs;
+// CHECK: _odsPrinter.printOptionalAttrDict((*this)->getDiscardableAttrDictionary().getValue());
 def CustomStringLiteralA : TestFormat_Op<[{
   custom<Foo>("$_builder.getI1Type()") attr-dict
 }]>;
@@ -382,8 +359,7 @@ def OptionalGroupB : TestFormat_Op<[{
 //  CHECK-NEXT:   odsPrinter << ' ';
 //  CHECK-NEXT:   odsPrinter.printAttributeWithoutType(getAAttr());
 //  CHECK-NEXT: }
-//       CHECK: static constexpr ::llvm::StringRef elidedAttrs[] = {"a"};
-//       CHECK: _odsPrinter.printOptionalAttrDict
+//       CHECK: _odsPrinter.printOptionalAttrDict((*this)->getDiscardableAttrDictionary().getValue());
 def OptionalGroupC : TestFormat_Op<[{
   ($a^)? attr-dict
 }]>, Arguments<(ins DefaultValuedStrAttr<StrAttr, "default">:$a)>;
@@ -392,8 +368,7 @@ def OptionalGroupC : TestFormat_Op<[{
 //       CHECK: elidedProps.push_back("a");
 //   CHECK-NOT: elidedProps.push_back("a");
 //       CHECK: printProperties
-//       CHECK: static constexpr ::llvm::StringRef elidedAttrs[] = {"a"};
-//       CHECK: _odsPrinter.printOptionalAttrDict
+//       CHECK: _odsPrinter.printOptionalAttrDict((*this)->getDiscardableAttrDictionary().getValue());
 def OptionalGroupCPropDict : TestFormat_Op<[{
   ($a^)? prop-dict attr-dict
 }]>, Arguments<(ins DefaultValuedStrAttr<StrAttr, "default">:$a)>;

diff  --git a/mlir/test/mlir-tblgen/pattern.mlir b/mlir/test/mlir-tblgen/pattern.mlir
index ffb78c28412ce..9d1a88dbffe07 100644
--- a/mlir/test/mlir-tblgen/pattern.mlir
+++ b/mlir/test/mlir-tblgen/pattern.mlir
@@ -759,8 +759,8 @@ func.func @returnTypeAndLocation(%arg0 : i32) -> i1 {
 
 // CHECK-LABEL: @testConstantStrAttr
 func.func @testConstantStrAttr() -> () {
-  // CHECK: test.has_str_value {value = "foo"}
-  test.no_str_value {value = "bar"}
+  // CHECK: test.has_str_value <value = "foo">
+  test.no_str_value <value = "bar">
   return
 }
 

diff  --git a/mlir/test/python/dialects/python_test.py b/mlir/test/python/dialects/python_test.py
index 655862f957771..917d1eda747d0 100644
--- a/mlir/test/python/dialects/python_test.py
+++ b/mlir/test/python/dialects/python_test.py
@@ -39,17 +39,17 @@ def testAttributes():
         two = IntegerAttr.get(i32, 2)
         unit = UnitAttr.get()
 
-        # CHECK: python_test.attributed_op  {
-        # CHECK-DAG: mandatory_i32 = 1 : i32
-        # CHECK-DAG: optional_i32 = 2 : i32
+        # CHECK: python_test.attributed_op  <
+        # CHECK-DAG: mandatory_i32 = 1
+        # CHECK-DAG: optional_i32 = 2
         # CHECK-DAG: unit
-        # CHECK: }
+        # CHECK: >
         op = test.AttributedOp(one, optional_i32=two, unit=unit)
         print(f"{op}")
 
-        # CHECK: python_test.attributed_op  {
-        # CHECK: mandatory_i32 = 2 : i32
-        # CHECK: }
+        # CHECK: python_test.attributed_op  <
+        # CHECK: mandatory_i32 = 2
+        # CHECK: >
         op2 = test.AttributedOp(two)
         print(f"{op2}")
 
@@ -59,24 +59,25 @@ def testAttributes():
 
         assert "additional" not in op.attributes
 
-        # CHECK: python_test.attributed_op  {
+        # CHECK: python_test.attributed_op  <
         # CHECK-DAG: additional = 1 : i32
-        # CHECK-DAG: mandatory_i32 = 2 : i32
+        # CHECK-DAG: mandatory_i32 = 2
         # CHECK: }
         op2.attributes["additional"] = one
         print(f"{op2}")
 
-        # CHECK: python_test.attributed_op  {
+        # CHECK: python_test.attributed_op  <
         # CHECK-DAG: additional = 2 : i32
-        # CHECK-DAG: mandatory_i32 = 2 : i32
+        # CHECK-DAG: mandatory_i32 = 2
         # CHECK: }
         op2.attributes["additional"] = two
         print(f"{op2}")
 
-        # CHECK: python_test.attributed_op  {
+        # CHECK: python_test.attributed_op  <
+        # CHECK-NOT: additional = 2 : i32
+        # CHECK: mandatory_i32 = 2
+        # CHECK: >
         # CHECK-NOT: additional = 2 : i32
-        # CHECK:     mandatory_i32 = 2 : i32
-        # CHECK: }
         del op2.attributes["additional"]
         print(f"{op2}")
 
@@ -160,23 +161,23 @@ def attrBuilder():
             x_arr=[BoolAttr.get(True), StringAttr.get("x")],
             x_boolarr=[False, True],  # CHECK-DAG: x_boolarr = [false, true]
             x_bool=True,  # CHECK-DAG: x_bool = true
-            x_dboolarr=[True, False],  # CHECK-DAG: x_dboolarr = array<i1: true, false>
-            x_df16arr=[21, 22],  # CHECK-DAG: x_df16arr = array<i16: 21, 22>
-            # CHECK-DAG: x_df32arr = array<f32: 2.300000e+01, 2.400000e+01>
+            x_dboolarr=[True, False],  # CHECK-DAG: x_dboolarr = [true, false]
+            x_df16arr=[21, 22],  # CHECK-DAG: x_df16arr = [21, 22]
+            # CHECK-DAG: x_df32arr = [2.300000e+01, 2.400000e+01]
             x_df32arr=[23, 24],
-            # CHECK-DAG: x_df64arr = array<f64: 2.500000e+01, 2.600000e+01>
+            # CHECK-DAG: x_df64arr = [2.500000e+01, 2.600000e+01]
             x_df64arr=[25, 26],
-            x_di32arr=[0, 1],  # CHECK-DAG: x_di32arr = array<i32: 0, 1>
-            # CHECK-DAG: x_di64arr = array<i64: 1, 2>
+            x_di32arr=[0, 1],  # CHECK-DAG: x_di32arr = [0, 1]
+            # CHECK-DAG: x_di64arr = [1, 2]
             x_di64arr=[1, 2],
-            x_di8arr=[2, 3],  # CHECK-DAG: x_di8arr = array<i8: 2, 3>
+            x_di8arr=[2, 3],  # CHECK-DAG: x_di8arr = [2, 3]
             # CHECK-DAG: x_dictarr = [{a = false}]
             x_dictarr=[{"a": BoolAttr.get(False)}],
             x_dict={"b": BoolAttr.get(True)},  # CHECK-DAG: x_dict = {b = true}
-            x_f32=-2.25,  # CHECK-DAG: x_f32 = -2.250000e+00 : f32
+            x_f32=-2.25,  # CHECK-DAG: x_f32 = -2.250000e+00
             # CHECK-DAG: x_f32arr = [2.000000e+00 : f32, 3.000000e+00 : f32]
             x_f32arr=[2.0, 3.0],
-            x_f64=4.25,  # CHECK-DAG: x_f64 = 4.250000e+00 : f64
+            x_f64=4.25,  # CHECK-DAG: x_f64 = 4.250000e+00
             x_f64arr=[4.0, 8.0],  # CHECK-DAG: x_f64arr = [4.000000e+00, 8.000000e+00]
             # CHECK-DAG: x_f64elems = dense<[8.000000e+00, 1.600000e+01]> : tensor<2xf64>
             x_f64elems=[8.0, 16.0],
@@ -184,38 +185,38 @@ def attrBuilder():
             x_flatsymrefarr=["symbol1", "symbol2"],
             x_flatsymref="symbol3",  # CHECK-DAG: x_flatsymref = @symbol3
             x_i1=0,  # CHECK-DAG: x_i1 = false
-            x_i16=42,  # CHECK-DAG: x_i16 = 42 : i16
-            x_i32=6,  # CHECK-DAG: x_i32 = 6 : i32
+            x_i16=42,  # CHECK-DAG: x_i16 = 42
+            x_i32=6,  # CHECK-DAG: x_i32 = 6
             x_i32arr=[4, 5],  # CHECK-DAG: x_i32arr = [4 : i32, 5 : i32]
             x_i32elems=[5, 6],  # CHECK-DAG: x_i32elems = dense<[5, 6]> : tensor<2xi32>
-            x_i64=9,  # CHECK-DAG: x_i64 = 9 : i64
+            x_i64=9,  # CHECK-DAG: x_i64 = 9
             x_i64arr=[7, 8],  # CHECK-DAG: x_i64arr = [7, 8]
             x_i64elems=[8, 9],  # CHECK-DAG: x_i64elems = dense<[8, 9]> : tensor<2xi64>
             x_i64svecarr=[10, 11],  # CHECK-DAG: x_i64svecarr = [10, 11]
-            x_i8=11,  # CHECK-DAG: x_i8 = 11 : i8
-            x_idx=10,  # CHECK-DAG: x_idx = 10 : index
+            x_i8=11,  # CHECK-DAG: x_i8 = 11
+            x_idx=10,  # CHECK-DAG: x_idx = 10
             # CHECK-DAG: x_idxelems = dense<[11, 12]> : tensor<2xindex>
             x_idxelems=[11, 12],
             # CHECK-DAG: x_idxlistarr = [{{\[}}13], [14, 15]]
             x_idxlistarr=[[13], [14, 15]],
-            x_si1=-1,  # CHECK-DAG: x_si1 = -1 : si1
-            x_si16=-2,  # CHECK-DAG: x_si16 = -2 : si16
-            x_si32=-3,  # CHECK-DAG: x_si32 = -3 : si32
-            x_si64=-123,  # CHECK-DAG: x_si64 = -123 : si64
-            x_si8=-4,  # CHECK-DAG: x_si8 = -4 : si8
+            x_si1=-1,  # CHECK-DAG: x_si1 = -1
+            x_si16=-2,  # CHECK-DAG: x_si16 = -2
+            x_si32=-3,  # CHECK-DAG: x_si32 = -3
+            x_si64=-123,  # CHECK-DAG: x_si64 = -123
+            x_si8=-4,  # CHECK-DAG: x_si8 = -4
             x_strarr=["hello", "world"],  # CHECK-DAG: x_strarr = ["hello", "world"]
             x_str="hello world!",  # CHECK-DAG: x_str = "hello world!"
             # CHECK-DAG: x_symrefarr = [@flatsym, @deep::@sym]
             x_symrefarr=["flatsym", ["deep", "sym"]],
             x_symref=["deep", "sym2"],  # CHECK-DAG: x_symref = @deep::@sym2
-            x_sym="symbol",  # CHECK-DAG: x_sym = "symbol"
+            x_sym="symbol",  # CHECK-DAG: x_sym = @symbol
             x_typearr=[F32Type.get()],  # CHECK-DAG: x_typearr = [f32]
             x_type=F64Type.get(),  # CHECK-DAG: x_type = f64
-            x_ui1=1,  # CHECK-DAG: x_ui1 = 1 : ui1
-            x_ui16=2,  # CHECK-DAG: x_ui16 = 2 : ui16
-            x_ui32=3,  # CHECK-DAG: x_ui32 = 3 : ui32
-            x_ui64=4,  # CHECK-DAG: x_ui64 = 4 : ui64
-            x_ui8=5,  # CHECK-DAG: x_ui8 = 5 : ui8
+            x_ui1=1,  # CHECK-DAG: x_ui1 = 1
+            x_ui16=2,  # CHECK-DAG: x_ui16 = 2
+            x_ui32=3,  # CHECK-DAG: x_ui32 = 3
+            x_ui64=4,  # CHECK-DAG: x_ui64 = 4
+            x_ui8=5,  # CHECK-DAG: x_ui8 = 5
             x_unit=True,  # CHECK-DAG: x_unit
         )
         op.verify()
@@ -559,9 +560,9 @@ def testCustomAttribute():
         # CHECK: #python_test.test_attr
         print(a)
 
-        # CHECK: python_test.custom_attributed_op  {
+        # CHECK: python_test.custom_attributed_op  <
         # CHECK: #python_test.test_attr
-        # CHECK: }
+        # CHECK: >
         op2 = test.CustomAttributedOp(a)
         print(f"{op2}")
 

diff  --git a/mlir/test/python/python_test_ops.td b/mlir/test/python/python_test_ops.td
index 3624506a23a6d..aabd6c22efb1f 100644
--- a/mlir/test/python/python_test_ops.td
+++ b/mlir/test/python/python_test_ops.td
@@ -15,7 +15,6 @@ include "mlir/Interfaces/InferTypeOpInterface.td"
 
 def Python_Test_Dialect : Dialect {
   let name = "python_test";
-  let useStrictPropertiesInAssemblyFormat = 0;
   let cppNamespace = "python_test";
 
   let useDefaultTypePrinterParser = 1;
@@ -34,7 +33,8 @@ class TestAttr<string name, string attrMnemonic>
 
 class TestOp<string mnemonic, list<Trait> traits = []>
     : Op<Python_Test_Dialect, mnemonic, traits> {
-  let assemblyFormat = "operands attr-dict functional-type(operands, results)";
+  let assemblyFormat =
+      "operands prop-dict attr-dict functional-type(operands, results)";
 }
 
 //===----------------------------------------------------------------------===//


        


More information about the Mlir-commits mailing list