• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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