1//===- Argument.h - Argument definitions ------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This header file contains definitions for TableGen operation's arguments.
10// Operation arguments fall into two categories:
11//
12// 1. Operands: SSA values operated on by the operation
13// 2. Attributes: compile-time known properties that have influence over
14// the operation's behavior
15//
16// These two categories are modelled with the unified argument concept in
17// TableGen because we need similar pattern matching mechanisms for them.
18//
19//===----------------------------------------------------------------------===//
20
21#ifndef MLIR_TABLEGEN_ARGUMENT_H_
22#define MLIR_TABLEGEN_ARGUMENT_H_
23
24#include "mlir/TableGen/Attribute.h"
25#include "mlir/TableGen/Property.h"
26#include "mlir/TableGen/Type.h"
27#include "llvm/ADT/PointerUnion.h"
28#include <string>
29
30namespace llvm {
31class StringRef;
32} // namespace llvm
33
34namespace mlir {
35namespace tblgen {
36
37// A struct wrapping an op attribute and its name together
38struct NamedAttribute {
39 llvm::StringRef name;
40 Attribute attr;
41};
42
43// A struct wrapping an op operand/result's constraint and its name together
44struct NamedTypeConstraint {
45 // Returns true if this operand/result has constraint to be satisfied.
46 bool hasPredicate() const;
47 // Returns true if this is an optional type constraint. This is a special case
48 // of variadic for 0 or 1 type.
49 bool isOptional() const;
50 // Returns true if this operand/result is variadic.
51 bool isVariadic() const;
52 // Returns true if this operand/result is a variadic of a variadic constraint.
53 bool isVariadicOfVariadic() const;
54 // Returns true if this is a variable length type constraint. This is either
55 // variadic or optional.
56 bool isVariableLength() const { return isOptional() || isVariadic(); }
57
58 llvm::StringRef name;
59 TypeConstraint constraint;
60};
61
62// Operation argument: either attribute, property, or operand
63using Argument = llvm::PointerUnion<NamedAttribute *, NamedProperty *,
64 NamedTypeConstraint *>;
65
66} // namespace tblgen
67} // namespace mlir
68
69#endif // MLIR_TABLEGEN_ARGUMENT_H_
70

source code of mlir/include/mlir/TableGen/Argument.h