diff --git a/mlir/docs/OpDefinitions.md b/mlir/docs/OpDefinitions.md --- a/mlir/docs/OpDefinitions.md +++ b/mlir/docs/OpDefinitions.md @@ -117,8 +117,8 @@ let arguments = (ins TF_FpTensor:$value, - Confined]>:$ksize, - Confined]>:$strides, + ConfinedAttr]>:$ksize, + ConfinedAttr]>:$strides, TF_AnyStrAttrOf<["SAME", "VALID"]>:$padding, DefaultValuedAttr:$data_format ); @@ -275,11 +275,11 @@ #### Confining attributes -`Confined` is provided as a general mechanism to help modelling further +`ConfinedAttr` is provided as a general mechanism to help modelling further constraints on attributes beyond the ones brought by value types. You can use -`Confined` to compose complex constraints out of more primitive ones. For +`ConfinedAttr` to compose complex constraints out of more primitive ones. For example, a 32-bit integer attribute whose minimum value must be 10 can be -expressed as `Confined]>`. +expressed as `ConfinedAttr]>`. Right now, the following primitive constraints are supported: @@ -1287,7 +1287,7 @@ * `DefaultValuedAttr`: specifies the [default value](#attributes-with-default-values) for an attribute. * `OptionalAttr`: specifies an attribute as [optional](#optional-attributes). -* `Confined`: adapts an attribute with +* `ConfinedAttr`: adapts an attribute with [further constraints](#confining-attributes). ### Enum attributes diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td --- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td @@ -779,7 +779,7 @@ let arguments = (ins AnyMemRef:$memref, Variadic:$indices, BoolAttr:$isWrite, - Confined, + ConfinedAttr, IntMaxValue<3>]>:$localityHint, BoolAttr:$isDataCache); diff --git a/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td b/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td --- a/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td +++ b/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td @@ -505,7 +505,7 @@ }]; let arguments = (ins Async_AnyAsyncType:$operand, - Confined:$count); + ConfinedAttr:$count); let assemblyFormat = [{ $operand attr-dict `:` type($operand) @@ -520,7 +520,7 @@ }]; let arguments = (ins Async_AnyAsyncType:$operand, - Confined:$count); + ConfinedAttr:$count); let assemblyFormat = [{ $operand attr-dict `:` type($operand) diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -1201,7 +1201,7 @@ UnitAttr:$thread_local_, OptionalAttr:$value, OptionalAttr:$alignment, - DefaultValuedAttr, "0">:$addr_space, + DefaultValuedAttr, "0">:$addr_space, OptionalAttr:$unnamed_addr, OptionalAttr:$section ); diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td --- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td +++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td @@ -148,7 +148,7 @@ } def Linalg_IndexOp : Linalg_Op<"index", [NoSideEffect]>, - Arguments<(ins Confined]>:$dim)>, + Arguments<(ins ConfinedAttr]>:$dim)>, Results<(outs Index:$result)> { let summary = "linalg index operation"; let description = [{ diff --git a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td --- a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td +++ b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td @@ -66,7 +66,7 @@ // The symbolic operands (the ones in square brackets) // bind to the symbols of the memref's layout map. Variadic:$symbolOperands, - Confined, + ConfinedAttr, [IntMinValue<0>]>:$alignment); let results = (outs Res]>:$memref); @@ -123,7 +123,7 @@ optimization only, and the optimization is best-effort. }]; let arguments = (ins AnyMemRef:$memref, - Confined:$alignment); + ConfinedAttr:$alignment); let results = (outs); let assemblyFormat = "$memref `,` $alignment attr-dict `:` type($memref)"; @@ -965,7 +965,7 @@ let arguments = (ins AnyMemRef:$memref, Variadic:$indices, BoolAttr:$isWrite, - Confined, + ConfinedAttr, IntMaxValue<3>]>:$localityHint, BoolAttr:$isDataCache); diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td @@ -240,7 +240,7 @@ def SingleOp : OpenMP_Op<"single", [AttrSizedOperandSegments]> { let summary = "single directive"; let description = [{ - The single construct specifies that the associated structured block is + The single construct specifies that the associated structured block is executed by only one of the threads in the team (not necessarily the master thread), in the context of its implicit task. The other threads in the team, which do not execute the block, wait at an implicit barrier @@ -345,7 +345,7 @@ OptionalAttr:$schedule_modifier, UnitAttr:$simd_modifier, UnitAttr:$nowait, - Confined, [IntMinValue<0>]>:$ordered_val, + ConfinedAttr, [IntMinValue<0>]>:$ordered_val, OptionalAttr:$order_val, UnitAttr:$inclusive); @@ -395,17 +395,17 @@ } //===----------------------------------------------------------------------===// -// Simd construct [2.9.3.1] +// Simd construct [2.9.3.1] //===----------------------------------------------------------------------===// def SimdLoopOp : OpenMP_Op<"simdloop", [AttrSizedOperandSegments, AllTypesMatch<["lowerBound", "upperBound", "step"]>]> { let summary = "simd loop construct"; let description = [{ - The simd construct can be applied to a loop to indicate that the loop can be - transformed into a SIMD loop (that is, multiple iterations of the loop can - be executed concurrently using SIMD instructions).. The lower and upper - bounds specify a half-open range: the range includes the lower bound but + The simd construct can be applied to a loop to indicate that the loop can be + transformed into a SIMD loop (that is, multiple iterations of the loop can + be executed concurrently using SIMD instructions).. The lower and upper + bounds specify a half-open range: the range includes the lower bound but does not include the upper bound. If the `inclusive` attribute is specified then the upper bound is also included. @@ -424,7 +424,7 @@ // block operations omp.yield } - ``` + ``` }]; // TODO: Add other clauses @@ -432,10 +432,10 @@ Variadic:$upperBound, Variadic:$step, Optional:$if_expr, - Confined, [IntPositive]>:$simdlen, + ConfinedAttr, [IntPositive]>:$simdlen, UnitAttr:$inclusive ); - + let regions = (region AnyRegion:$region); let assemblyFormat = [{ oilist(`if` `(` $if_expr `)` @@ -449,15 +449,15 @@ unsigned getNumLoops() { return lowerBound().size(); } }]; - + let hasCustomAssemblyFormat = 1; - let hasVerifier = 1; + let hasVerifier = 1; } def YieldOp : OpenMP_Op<"yield", [NoSideEffect, ReturnLike, Terminator, - ParentOneOf<["WsLoopOp", "ReductionDeclareOp", + ParentOneOf<["WsLoopOp", "ReductionDeclareOp", "AtomicUpdateOp", "SimdLoopOp"]>]> { let summary = "loop yield and termination operation"; let description = [{ @@ -967,7 +967,7 @@ }]; let arguments = (ins OptionalAttr:$depend_type_val, - Confined, [IntMinValue<0>]>:$num_loops_val, + ConfinedAttr, [IntMinValue<0>]>:$num_loops_val, Variadic:$depend_vec_vars); let assemblyFormat = [{ @@ -1046,7 +1046,7 @@ DefaultValuedAttr:$hint_val, OptionalAttr:$memory_order_val); let assemblyFormat = [{ - $v `=` $x + $v `=` $x oilist( `memory_order` `(` custom($memory_order_val) `)` | `hint` `(` custom($hint_val) `)`) `:` type($x) attr-dict @@ -1329,7 +1329,7 @@ // 2.19.5.7 declare reduction Directive //===----------------------------------------------------------------------===// -def ReductionDeclareOp : OpenMP_Op<"reduction.declare", [Symbol, +def ReductionDeclareOp : OpenMP_Op<"reduction.declare", [Symbol, IsolatedFromAbove]> { let summary = "declares a reduction kind"; diff --git a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td --- a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td +++ b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td @@ -369,7 +369,7 @@ /// Returns true if the operation type referenced supports result type /// inference. bool hasTypeInference(); - + /// Returns true if the operation type referenced might support result type /// inference, i.e. it supports type reference or is currently not /// registered in the context. Returns false if the root operation name @@ -411,7 +411,7 @@ ``` }]; - let arguments = (ins Confined:$benefit, + let arguments = (ins ConfinedAttr:$benefit, OptionalAttr:$sym_name); let regions = (region SizedRegion<1>:$body); let assemblyFormat = [{ diff --git a/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td b/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td --- a/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td +++ b/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td @@ -236,7 +236,7 @@ }]; let arguments = (ins PDL_Operation:$inputOp, - Confined:$count, + ConfinedAttr:$count, UnitAttr:$compareAtLeast); let assemblyFormat = [{ `of` $inputOp `is` (`at_least` $compareAtLeast^)? $count attr-dict @@ -293,7 +293,7 @@ }]; let arguments = (ins PDL_Operation:$inputOp, - Confined:$count, + ConfinedAttr:$count, UnitAttr:$compareAtLeast); let assemblyFormat = [{ `of` $inputOp `is` (`at_least` $compareAtLeast^)? $count attr-dict @@ -552,7 +552,7 @@ }]; let arguments = (ins PDL_RangeOf:$range, - Confined:$index); + ConfinedAttr:$index); let results = (outs PDL_AnyType:$result); let assemblyFormat = "$index `of` $range `:` type($result) attr-dict"; @@ -774,7 +774,7 @@ }]; let arguments = (ins PDL_Operation:$inputOp, - Confined:$index); + ConfinedAttr:$index); let results = (outs PDL_Value:$value); let assemblyFormat = "$index `of` $inputOp attr-dict"; } @@ -809,7 +809,7 @@ let arguments = (ins PDL_Operation:$inputOp, - OptionalAttr>:$index + OptionalAttr>:$index ); let results = (outs PDL_InstOrRangeOf:$value); let assemblyFormat = "($index^)? `of` $inputOp `:` type($value) attr-dict"; @@ -841,7 +841,7 @@ }]; let arguments = (ins PDL_Operation:$inputOp, - Confined:$index); + ConfinedAttr:$index); let results = (outs PDL_Value:$value); let assemblyFormat = "$index `of` $inputOp attr-dict"; } @@ -876,7 +876,7 @@ let arguments = (ins PDL_Operation:$inputOp, - OptionalAttr>:$index + OptionalAttr>:$index ); let results = (outs PDL_InstOrRangeOf:$value); let assemblyFormat = "($index^)? `of` $inputOp `:` type($value) attr-dict"; @@ -1019,7 +1019,7 @@ SymbolRefAttr:$rewriter, OptionalAttr:$rootKind, OptionalAttr:$generatedOps, - Confined:$benefit); + ConfinedAttr:$benefit); let successors = (successor AnySuccessor:$dest); let assemblyFormat = [{ $rewriter (`(` $inputs^ `:` type($inputs) `)`)? `:` diff --git a/mlir/include/mlir/Dialect/SCF/TransformOps/SCFTransformOps.td b/mlir/include/mlir/Dialect/SCF/TransformOps/SCFTransformOps.td --- a/mlir/include/mlir/Dialect/SCF/TransformOps/SCFTransformOps.td +++ b/mlir/include/mlir/Dialect/SCF/TransformOps/SCFTransformOps.td @@ -31,7 +31,7 @@ let arguments = (ins PDL_Operation:$target, - DefaultValuedAttr, + DefaultValuedAttr, "1">:$num_loops); let results = (outs PDL_Operation:$parent); @@ -74,7 +74,7 @@ even if the step always divides the range evenly at runtime. #### Return modes - + This operation ignores non-scf::ForOp ops and drops them in the return. This operation always succeeds and returns the scf::ForOp with the @@ -92,19 +92,19 @@ let arguments = (ins PDL_Operation:$target, DefaultValuedAttr:$fail_if_already_divisible); - // TODO: Return both the peeled loop and the remainder loop. + // TODO: Return both the peeled loop and the remainder loop. let results = (outs PDL_Operation:$transformed); let assemblyFormat = "$target attr-dict"; let extraClassDeclaration = [{ ::mlir::DiagnosedSilenceableFailure applyToOne( - ::mlir::scf::ForOp target, - ::llvm::SmallVector<::mlir::Operation *> &results, + ::mlir::scf::ForOp target, + ::llvm::SmallVector<::mlir::Operation *> &results, ::mlir::transform::TransformState &state); }]; } - + def LoopPipelineOp : Op { @@ -114,20 +114,20 @@ each of them. That is, performs some amount of reads from memory before the loop rather than inside the loop, the same amount of writes into memory after the loop, and updates each iteration to read the data for a following - iteration rather than the current one. - - The amount is specified by the attributes. - + iteration rather than the current one. + + The amount is specified by the attributes. + The values read and about to be stored are transferred as loop iteration - arguments. Currently supports memref and vector transfer operations as + arguments. Currently supports memref and vector transfer operations as memory reads/writes. #### Return modes - + This operation ignores non-scf::For ops and drops them in the return. If all the operations referred to by the `target` PDLOperation pipeline properly, the transform succeeds. Otherwise the transform silently fails. - The return handle points to only the subset of successfully produced + The return handle points to only the subset of successfully produced pipelined loops, which can be empty. }]; @@ -140,8 +140,8 @@ let extraClassDeclaration = [{ ::mlir::DiagnosedSilenceableFailure applyToOne( - ::mlir::scf::ForOp target, - ::llvm::SmallVector<::mlir::Operation *> &results, + ::mlir::scf::ForOp target, + ::llvm::SmallVector<::mlir::Operation *> &results, ::mlir::transform::TransformState &state); }]; } @@ -156,24 +156,24 @@ than the loop trip count, the latter is used as the unroll factor instead. #### Return modes - + This operation ignores non-scf::For ops and drops them in the return. If all the operations referred to by the `target` PDLOperation unroll properly, the transform succeeds. Otherwise the transform silently fails. - + Does not return handles as the operation may result in the loop being removed after a full unrolling. }]; let arguments = (ins PDL_Operation:$target, - Confined:$factor); + ConfinedAttr:$factor); let assemblyFormat = "$target attr-dict"; let extraClassDeclaration = [{ ::mlir::DiagnosedSilenceableFailure applyToOne( - ::mlir::scf::ForOp target, - ::llvm::SmallVector<::mlir::Operation *> &results, + ::mlir::scf::ForOp target, + ::llvm::SmallVector<::mlir::Operation *> &results, ::mlir::transform::TransformState &state); }]; } diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td @@ -101,7 +101,7 @@ def Tosa_Int32Tensor : TensorOf<[Tosa_Int32]>; def Tosa_Int32Or64Tensor : TensorOf<[Tosa_Int32Or64]>; -// Either ranked or unranked tensor of TOSA supported element types. +// Either ranked or unranked tensor of TOSA supported element types. def Tosa_Tensor : TensorOf<[Tosa_AnyNumber]>; // Must be ranked but no further constraints def Tosa_RankedTensor : RankedTensorOf<[Tosa_AnyNumber]>; @@ -167,21 +167,21 @@ CPred<"$_self.cast<::mlir::ArrayAttr>().size() <= " # n>, "with at least " # n # " elements">; -def Tosa_Fp32ArrayAttr2 : Confined]>; -def Tosa_Fp32ArrayAttr3 : Confined]>; -def Tosa_Fp32ArrayAttr4 : Confined]>; -def Tosa_Fp32ArrayAttr5 : Confined]>; -def Tosa_Fp32ArrayAttr6 : Confined]>; - -def Tosa_IntArrayAttr2 : Confined]>; -def Tosa_IntArrayAttr3 : Confined]>; -def Tosa_IntArrayAttr4 : Confined]>; -def Tosa_IntArrayAttr5 : Confined]>; -def Tosa_IntArrayAttr6 : Confined]>; - -def Tosa_IntArrayAttrUpto2 : Confined]>; -def Tosa_IntArrayAttrUpto4 : Confined]>; -def Tosa_IntArrayAttrUpto5 : Confined]>; +def Tosa_Fp32ArrayAttr2 : ConfinedAttr]>; +def Tosa_Fp32ArrayAttr3 : ConfinedAttr]>; +def Tosa_Fp32ArrayAttr4 : ConfinedAttr]>; +def Tosa_Fp32ArrayAttr5 : ConfinedAttr]>; +def Tosa_Fp32ArrayAttr6 : ConfinedAttr]>; + +def Tosa_IntArrayAttr2 : ConfinedAttr]>; +def Tosa_IntArrayAttr3 : ConfinedAttr]>; +def Tosa_IntArrayAttr4 : ConfinedAttr]>; +def Tosa_IntArrayAttr5 : ConfinedAttr]>; +def Tosa_IntArrayAttr6 : ConfinedAttr]>; + +def Tosa_IntArrayAttrUpto2 : ConfinedAttr]>; +def Tosa_IntArrayAttrUpto4 : ConfinedAttr]>; +def Tosa_IntArrayAttrUpto5 : ConfinedAttr]>; //===----------------------------------------------------------------------===// // Iterable attributes. diff --git a/mlir/include/mlir/IR/OpBase.td b/mlir/include/mlir/IR/OpBase.td --- a/mlir/include/mlir/IR/OpBase.td +++ b/mlir/include/mlir/IR/OpBase.td @@ -693,7 +693,7 @@ // list, and which additionally satisfies an optional list of predicates. // // TODO: use `Constraint` instead of `Pred`, so we can generate a better -// default summary (a la `Confined`). +// default summary (a la `ConfinedAttr`). class TensorOf< list allowedTypes, list preds = [], @@ -1585,7 +1585,7 @@ // A general mechanism to further confine the given `attr` with all the // `constraints`. This allows to compose complex constraints out of a series // of more primitive ones. -class Confined constraints> : Attr< +class ConfinedAttr constraints> : Attr< And, !foldl(/*init*/attr.summary, /*list*/constraints, @@ -1603,9 +1603,9 @@ // An AttrConstraint that holds if all attr constraints specified in // 'constraints' hold. -class AllAttrConstraintsOf constraints> : AttrConstraint< +class AllAttrOf constraints> : AttrConstraint< And, + !foreach(pred, !tail(constraints), pred.predicate))>, !interleave(!foreach(con, constraints, con.summary), " and ")> { } diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp --- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp +++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp @@ -2100,7 +2100,7 @@ result.addAttribute(getStridesAttrStrName(), stridesAttr); } -// TODO: Should be moved to Tablegen Confined attributes. +// TODO: Should be moved to Tablegen ConfinedAttr attributes. template static LogicalResult isIntegerArrayAttrSmallerThanShape(OpType op, ArrayAttr arrayAttr, diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -170,15 +170,15 @@ def NonNegIntAttrOp : TEST_Op<"non_negative_int_attr"> { let arguments = (ins - Confined:$i32attr, - Confined:$i64attr + ConfinedAttr:$i32attr, + ConfinedAttr:$i64attr ); } def PositiveIntAttrOp : TEST_Op<"positive_int_attr"> { let arguments = (ins - Confined:$i32attr, - Confined:$i64attr + ConfinedAttr:$i32attr, + ConfinedAttr:$i64attr ); } @@ -377,7 +377,7 @@ def SymbolRefOp : TEST_Op<"symbol_ref_attr"> { let arguments = (ins - Confined]>:$symbol + ConfinedAttr]>:$symbol ); } @@ -1127,7 +1127,7 @@ [(OpNativeCodeCall7 (BindMultipleNativeCodeCallResult:$native__0 $arg1, $arg2)), (OpNativeCodeCall7 $native__1)]>; -// Test AllAttrConstraintsOf. +// Test AllAttrOf. def OpAllAttrConstraint1 : TEST_Op<"all_attr_constraint_of1"> { let arguments = (ins I64ArrayAttr:$attr); let results = (outs I32); @@ -1144,7 +1144,7 @@ CPred<"$_self.cast()[1].cast<::mlir::IntegerAttr>().getInt() == 1">, "[1] == 1">; def : Pat<(OpAllAttrConstraint1 - AllAttrConstraintsOf<[Constraint0, Constraint1]>:$attr), + AllAttrOf<[Constraint0, Constraint1]>:$attr), (OpAllAttrConstraint2 $attr)>; // Op for testing RewritePattern removing op with inner ops. diff --git a/mlir/test/mlir-pdll/Parser/include/ops.td b/mlir/test/mlir-pdll/Parser/include/ops.td --- a/mlir/test/mlir-pdll/Parser/include/ops.td +++ b/mlir/test/mlir-pdll/Parser/include/ops.td @@ -10,7 +10,7 @@ let arguments = (ins I64:$operand, I64Attr:$attr, - Confined:$nonNegativeAttr + ConfinedAttr:$nonNegativeAttr ); let results = (outs I64:$result); } diff --git a/mlir/test/mlir-tblgen/predicate.td b/mlir/test/mlir-tblgen/predicate.td --- a/mlir/test/mlir-tblgen/predicate.td +++ b/mlir/test/mlir-tblgen/predicate.td @@ -50,7 +50,7 @@ // CHECK: if (!(((first)) && ((second)))) def OpF : NS_Op<"op_for_int_min_val", []> { - let arguments = (ins Confined]>:$attr); + let arguments = (ins ConfinedAttr]>:$attr); } // CHECK-LABEL: OpFAdaptor::verify @@ -58,7 +58,7 @@ // CHECK-NEXT: "attribute 'attr' failed to satisfy constraint: 32-bit signless integer attribute whose minimum value is 10" def OpFX : NS_Op<"op_for_int_max_val", []> { - let arguments = (ins Confined]>:$attr); + let arguments = (ins ConfinedAttr]>:$attr); } // CHECK-LABEL: OpFXAdaptor::verify @@ -66,7 +66,7 @@ // CHECK-NEXT: "attribute 'attr' failed to satisfy constraint: 32-bit signless integer attribute whose maximum value is 10" def OpG : NS_Op<"op_for_arr_min_count", []> { - let arguments = (ins Confined]>:$attr); + let arguments = (ins ConfinedAttr]>:$attr); } // CHECK-LABEL: OpGAdaptor::verify @@ -74,7 +74,7 @@ // CHECK-NEXT: "attribute 'attr' failed to satisfy constraint: array attribute with at least 8 elements" def OpH : NS_Op<"op_for_arr_value_at_index", []> { - let arguments = (ins Confined]>:$attr); + let arguments = (ins ConfinedAttr]>:$attr); } // CHECK-LABEL: OpHAdaptor::verify @@ -82,7 +82,7 @@ // CHECK-NEXT: "attribute 'attr' failed to satisfy constraint: array attribute whose 0-th element must be 8" def OpI: NS_Op<"op_for_arr_min_value_at_index", []> { - let arguments = (ins Confined]>:$attr); + let arguments = (ins ConfinedAttr]>:$attr); } // CHECK-LABEL: OpIAdaptor::verify