1// RUN: mlir-tblgen -gen-op-defs -I %S/../../include %s | FileCheck %s 2 3include "mlir/IR/OpBase.td" 4 5def Test_Dialect : Dialect { 6 let name = "test"; 7} 8class NS_Op<string mnemonic, list<OpTrait> traits> : 9 Op<Test_Dialect, mnemonic, traits>; 10 11def I32OrF32 : Type<CPred<"$_self.isInteger(32) || $_self.isF32()">, 12 "32-bit integer or floating-point type">; 13 14def OpA : NS_Op<"op_for_CPred_containing_multiple_same_placeholder", []> { 15 let arguments = (ins I32OrF32:$x); 16} 17 18// CHECK-LABEL: OpA::verify 19// CHECK: auto valueGroup0 = getODSOperands(0); 20// CHECK: for (::mlir::Value v : valueGroup0) { 21// CHECK: if (!((v.getType().isInteger(32) || v.getType().isF32()))) 22 23def OpB : NS_Op<"op_for_And_PredOpTrait", [ 24 PredOpTrait<"both first and second holds", 25 And<[CPred<"first">, CPred<"second">]>>]> { 26} 27 28// CHECK-LABEL: OpB::verify 29// CHECK: if (!(((first)) && ((second)))) 30 31def OpF : NS_Op<"op_for_int_min_val", []> { 32 let arguments = (ins Confined<I32Attr, [IntMinValue<10>]>:$attr); 33} 34 35// CHECK-LABEL: OpFAdaptor::verify 36// CHECK: (tblgen_attr.cast<::mlir::IntegerAttr>().getInt() >= 10) 37// CHECK-SAME: "attribute 'attr' failed to satisfy constraint: 32-bit signless integer attribute whose minimum value is 10" 38 39def OpFX : NS_Op<"op_for_int_max_val", []> { 40 let arguments = (ins Confined<I32Attr, [IntMaxValue<10>]>:$attr); 41} 42 43// CHECK-LABEL: OpFXAdaptor::verify 44// CHECK: (tblgen_attr.cast<::mlir::IntegerAttr>().getInt() <= 10) 45// CHECK-SAME: "attribute 'attr' failed to satisfy constraint: 32-bit signless integer attribute whose maximum value is 10" 46 47def OpG : NS_Op<"op_for_arr_min_count", []> { 48 let arguments = (ins Confined<ArrayAttr, [ArrayMinCount<8>]>:$attr); 49} 50 51// CHECK-LABEL: OpGAdaptor::verify 52// CHECK: (tblgen_attr.cast<::mlir::ArrayAttr>().size() >= 8) 53// CHECK-SAME: "attribute 'attr' failed to satisfy constraint: array attribute with at least 8 elements" 54 55def OpH : NS_Op<"op_for_arr_value_at_index", []> { 56 let arguments = (ins Confined<ArrayAttr, [IntArrayNthElemEq<0, 8>]>:$attr); 57} 58 59// CHECK-LABEL: OpHAdaptor::verify 60// CHECK: (((tblgen_attr.cast<::mlir::ArrayAttr>().size() > 0)) && ((tblgen_attr.cast<::mlir::ArrayAttr>()[0].cast<::mlir::IntegerAttr>().getInt() == 8))))) 61// CHECK-SAME: "attribute 'attr' failed to satisfy constraint: array attribute whose 0-th element must be 8" 62 63def OpI: NS_Op<"op_for_arr_min_value_at_index", []> { 64 let arguments = (ins Confined<ArrayAttr, [IntArrayNthElemMinValue<0, 8>]>:$attr); 65} 66 67// CHECK-LABEL: OpIAdaptor::verify 68// CHECK: (((tblgen_attr.cast<::mlir::ArrayAttr>().size() > 0)) && ((tblgen_attr.cast<::mlir::ArrayAttr>()[0].cast<::mlir::IntegerAttr>().getInt() >= 8))))) 69// CHECK-SAME: "attribute 'attr' failed to satisfy constraint: array attribute whose 0-th element must be at least 8" 70 71def OpJ: NS_Op<"op_for_TCopVTEtAreSameAt", [ 72 PredOpTrait<"operands indexed at 0, 2, 3 should all have " 73 "the same type", TCopVTEtAreSameAt<[0, 2, 3]>>]> { 74 let arguments = (ins 75 AnyTensor:$a, 76 AnyTensor:$b, 77 AnyTensor:$c, 78 AnyTensor:$d, 79 AnyTensor:$e 80 ); 81} 82 83// CHECK-LABEL: OpJAdaptor::verify 84// CHECK: ::llvm::is_splat(::llvm::map_range( 85// CHECK-SAME: ::mlir::ArrayRef<unsigned>({0, 2, 3}), 86// CHECK-SAME: [this](unsigned i) { return getElementTypeOrSelf(this->getOperand(i)); })) 87// CHECK: "failed to verify that operands indexed at 0, 2, 3 should all have the same type" 88 89def OpK : NS_Op<"op_for_AnyTensorOf", []> { 90 let arguments = (ins TensorOf<[F32, I32]>:$x); 91} 92 93// CHECK-LABEL: OpK::verify 94// CHECK: auto valueGroup0 = getODSOperands(0); 95// CHECK: for (::mlir::Value v : valueGroup0) { 96// CHECK: if (!(((v.getType().isa<::mlir::TensorType>())) && (((v.getType().cast<::mlir::ShapedType>().getElementType().isF32())) || ((v.getType().cast<::mlir::ShapedType>().getElementType().isSignlessInteger(32)))))) 97