19 #ifndef MLIR_IR_OPDEFINITION_H 20 #define MLIR_IR_OPDEFINITION_H 23 #include <type_traits> 45 explicit operator bool()
const {
return failed(*
this); }
62 bool hasValue()
const {
return impl.hasValue(); }
82 template <
typename OpTy>
86 OpTy::build(&builder, state);
101 operator bool() {
return getOperation() !=
nullptr; }
115 return getOperation()->getParentOfType<OpTy>();
123 state->print(os, flags);
143 return state->dialect_attr_begin();
152 return getAttr(name).dyn_cast_or_null<AttrClass>();
158 state->setAttr(name, value);
166 state->setAttrs(attributes);
172 state->setDialectAttrs(std::move(attrs));
178 return state->removeAttr(name);
209 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
211 return state->walk(std::forward<FnT>(callback));
259 template <
typename ConcreteType,
bool isSingleResult,
typename =
void>
266 return cast<ConcreteType>(op).fold(operands, results);
300 template <
typename ConcreteType,
bool isSingleResult>
302 typename std::enable_if<isSingleResult>::type> {
307 return static_cast<ConcreteType *
>(
this)->getOperation()->getResult(0);
314 auto result = cast<ConcreteType>(op).fold(operands);
320 if (result.template dyn_cast<Value>() != op->
getResult(0))
321 results.push_back(result);
385 template <
typename ConcreteType,
template <
typename>
class TraitType>
394 auto *trait =
static_cast<TraitType<ConcreteType> *
>(
this);
395 auto *concrete =
static_cast<ConcreteType *
>(trait);
396 auto *base =
static_cast<OpState *
>(concrete);
411 template <
typename ConcreteType,
template <
typename>
class TraitType>
426 this->getOperation()->setOperand(i, value);
431 return this->getOperation()->operand_begin();
438 return this->getOperation()->operand_type_begin();
441 return this->getOperation()->operand_type_end();
444 return this->getOperation()->getOperandTypes();
451 template <
typename ConcreteType>
466 template <
typename ConcreteType>
485 static_assert(N > 1,
"use ZeroOperands/OneOperand for N < 2");
487 template <
typename ConcreteType>
504 template <
typename ConcreteType>
506 AtLeastNOperands<N>::Impl> {
516 template <
typename ConcreteType>
522 template <
typename ConcreteType>
533 template <
typename ConcreteType,
template <
typename>
class TraitType>
549 this->getOperation()->replaceAllUsesWith(std::forward<ValuesT>(values));
557 return this->getOperation()->result_begin();
564 return this->getOperation()->result_type_begin();
567 return this->getOperation()->result_type_end();
570 return this->getOperation()->getResultTypes();
577 template <
typename ConcreteType>
587 getResult()->replaceAllUsesWith(newValue);
592 this->getOperation()->replaceAllUsesWith(op);
607 static_assert(N > 1,
"use ZeroResult/OneResult for N < 2");
609 template <
typename ConcreteType>
626 template <
typename ConcreteType>
628 AtLeastNResults<N>::Impl> {
638 template <
typename ConcreteType>
645 template <
typename ConcreteType>
656 template <
typename ConcreteType>
658 :
public TraitBase<ConcreteType, SameOperandsAndResultShape> {
668 template <
typename ConcreteType>
670 :
public TraitBase<ConcreteType, SameOperandsElementType> {
680 template <
typename ConcreteType>
682 :
public TraitBase<ConcreteType, SameOperandsAndResultElementType> {
694 template <
typename ConcreteType>
696 :
public TraitBase<ConcreteType, SameOperandsAndResultType> {
705 template <
typename ConcreteType>
715 template <
typename ConcreteType>
717 :
public TraitBase<ConcreteType, ResultsAreFloatLike> {
726 template <
typename ConcreteType>
728 :
public TraitBase<ConcreteType, ResultsAreIntegerLike> {
736 template <
typename ConcreteType>
746 template <
typename ConcreteType>
757 template <
typename ConcreteType>
759 :
public TraitBase<ConcreteType, OperandsAreFloatLike> {
768 template <
typename ConcreteType>
770 :
public TraitBase<ConcreteType, OperandsAreIntegerLike> {
779 template <
typename ConcreteType>
788 template <
typename ConcreteType>
800 return this->getOperation()->getNumSuccessors();
803 return this->getOperation()->getNumSuccessorOperands(index);
811 return this->getOperation()->setSuccessor(block, index);
815 return this->getOperation()->addSuccessorOperand(index, value);
818 return this->getOperation()->addSuccessorOperand(index, values);
824 template <
typename ConcreteType>
826 :
public TraitBase<ConcreteType, IsIsolatedFromAbove> {
834 if (!region.isIsolatedFromAbove(op->
getLoc()))
843 template <
typename ConcreteType>
855 if (std::next(region.
begin()) != region.
end())
857 << i <<
" to have 0 or 1 blocks";
861 return op->
emitOpError() <<
"expects a non-empty block";
863 if (isa<TerminatorOpType>(terminator))
866 return op->
emitOpError(
"expects regions to end with '" +
867 TerminatorOpType::getOperationName() +
871 <<
"in custom textual format, the absence of terminator implies " 873 << TerminatorOpType::getOperationName() <<
'\'';
882 ::mlir::impl::template ensureRegionTerminator<TerminatorOpType>(
883 region, builder, loc);
890 template <
typename ConcreteType>
897 << ParentOpType::getOperationName() <<
"'";
912 template <
typename ConcreteType>
914 :
public TraitBase<ConcreteType, AttrSizedOperandSegments> {
917 return "operand_segment_sizes";
922 op, getOperandSegmentSizeAttr());
927 template <
typename ConcreteType>
929 :
public TraitBase<ConcreteType, AttrSizedResultSegments> {
935 op, getResultSegmentSizeAttr());
948 template <
typename ConcreteType,
template <
typename T>
class... Traits>
950 public Traits<ConcreteType>...,
952 llvm::is_one_of<OpTrait::OneResult<ConcreteType>,
953 Traits<ConcreteType>...>::value> {
956 template <
template <
typename T>
class Trait>
958 return llvm::is_one_of<Trait<ConcreteType>, Traits<ConcreteType>...>::value;
965 ConcreteType
clone() {
return cast<ConcreteType>(getOperation()->clone()); }
971 return cast<ConcreteType>(getOperation()->cloneWithoutRegions());
983 return &classof == abstractOp->classof;
993 return ConcreteType::parse(parser, result);
999 auto opPointer = dyn_cast<ConcreteType>(op);
1001 "op's name does not match name of concrete type instantiated with");
1014 failed(BaseVerifier<Traits<ConcreteType>...>::verifyTrait(op)) ||
1021 return BaseProperties<Traits<ConcreteType>...>::getTraitProperties();
1038 return static_cast<const void *
>((
Operation *)*
this);
1042 reinterpret_cast<Operation *>(const_cast<void *>(pointer)));
1046 template <
typename... Types>
struct BaseVerifier;
1048 template <
typename First,
typename... Rest>
1049 struct BaseVerifier<First, Rest...> {
1052 failed(BaseVerifier<Rest...>::verifyTrait(op)));
1056 template <
typename...>
struct BaseVerifier {
1060 template <
typename... Types>
struct BaseProperties;
1062 template <
typename First,
typename... Rest>
1063 struct BaseProperties<First, Rest...> {
1065 return First::getTraitProperties() |
1066 BaseProperties<Rest...>::getTraitProperties();
1070 template <
typename...>
struct BaseProperties {
1077 static bool hasTrait(
ClassID *traitID) {
1078 return llvm::is_contained(llvm::makeArrayRef({ClassID::getID<Traits>()...}),
1084 static void *getRawInterface(
ClassID *
id) {
1085 return InterfaceLookup::template lookup<Traits<ConcreteType>...>(id);
1088 struct InterfaceLookup {
1090 template <
typename T,
typename... Args>
1091 using has_get_interface_id = decltype(T::getInterfaceID());
1095 template <
typename T>
1096 static typename std::enable_if<is_detected<has_get_interface_id, T>::value,
1098 lookup(
ClassID *interfaceID) {
1099 return (T::getInterfaceID() == interfaceID) ? &T::instance() :
nullptr;
1103 template <
typename T>
1104 static typename std::enable_if<!is_detected<has_get_interface_id, T>::value,
1110 template <
typename T,
typename T2,
typename... Ts>
1111 static void *lookup(
ClassID *interfaceID) {
1112 auto *concept = lookup<T>(interfaceID);
1113 return concept ? concept : lookup<T2, Ts...>(interfaceID);
1140 template <
typename ConcreteType,
typename Traits>
1147 :
Op<ConcreteType>(op), impl(op ? getInterfaceFor(op) : nullptr) {
1148 assert((!op || impl) &&
1149 "instantiating an interface with an unregistered operation");
1161 template <
typename ConcreteOp>
1190 return abstractOp ? abstractOp->
getInterface<ConcreteType>() :
nullptr;
ParseResult(LogicalResult result=success())
Definition: OpDefinition.h:38
operand_range::iterator operand_iterator
Definition: Operation.h:214
Definition: InferTypeOpInterface.cpp:20
Attribute getAttr(StringRef name)
Return an attribute with the specified name.
Definition: OpDefinition.h:148
void setAttr(StringRef name, Attribute value)
Definition: OpDefinition.h:160
Block * getSuccessor(unsigned i)
Definition: Block.cpp:215
OptionalParseResult(const InFlightDiagnostic &)
Definition: OpDefinition.h:57
static LogicalResult foldHook(Operation *op, ArrayRef< Attribute > operands, SmallVectorImpl< OpFoldResult > &results)
Definition: OpDefinition.h:264
Similar to AttrSizedOperandSegments but used for results.
Definition: OpDefinition.h:928
static ParseResult parseAssembly(OpAsmParser &parser, OperationState &result)
Definition: OpDefinition.h:991
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:708
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:402
Definition: STLExtras.h:95
Definition: PassRegistry.cpp:413
Definition: Operation.h:27
void buildBinaryOp(Builder *builder, OperationState &result, Value lhs, Value rhs)
Definition: Operation.cpp:1057
static AbstractOperation::OperationProperties getTraitProperties()
Definition: OpDefinition.h:403
MutableArrayRef< Region > getRegions()
Returns the regions held by this operation.
Definition: Operation.h:363
LogicalResult verifyZeroOperands(Operation *op)
Definition: Operation.cpp:747
This class adds property that the operation is commutative.
Definition: OpDefinition.h:737
Operation & back()
Definition: Block.h:119
Value getResult(unsigned i)
Return the result at index 'i'.
Definition: OpDefinition.h:544
LogicalResult verifyResultsAreFloatLike(Operation *op)
Definition: Operation.cpp:994
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:698
Definition: OpDefinition.h:98
Definition: OpDefinition.h:260
Definition: OpDefinition.h:844
unsigned getNumRegions()
Returns the number of regions held by this operation.
Definition: Operation.h:360
Definition: Diagnostics.h:320
operand_type_range getOperandTypes()
Definition: OpDefinition.h:443
operand_iterator operand_end()
Definition: OpDefinition.h:433
Definition: OpDefinition.h:1162
LogicalResult verifyResultSizeAttr(Operation *op, StringRef sizeAttrName)
Definition: Operation.cpp:1045
NamedAttributeList::RemoveResult removeAttr(StringRef name)
Definition: OpDefinition.h:180
Block represents an ordered list of Operations.
Definition: Block.h:21
Block & front()
Definition: Region.h:54
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:920
LogicalResult verifySameOperandsAndResultShape(Operation *op)
Definition: Operation.cpp:858
Definition: OpDefinition.h:716
This class represents a single result from folding an operation.
Definition: OpDefinition.h:251
Definition: OpDefinition.h:913
Definition: OpDefinition.h:669
LogicalResult verify(Operation *op)
Definition: Verifier.cpp:264
LogicalResult verifyNOperands(Operation *op, unsigned numOperands)
Definition: Operation.cpp:759
void print(raw_ostream &os, OpPrintingFlags flags=llvm::None)
Print the operation to the given stream.
Definition: OpDefinition.h:122
static ClassID * getInterfaceID()
Define an accessor for the ID of this interface.
Definition: OpDefinition.h:1157
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:684
bool failed(LogicalResult result)
Definition: LogicalResult.h:45
Definition: OpDefinition.h:29
void setOperand(Value value)
Definition: OpDefinition.h:471
bool operator!=(IntInfty lhs, IntInfty rhs)
Definition: SDBM.h:94
LogicalResult verifySameOperandsElementType(Operation *op)
Definition: Operation.cpp:877
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:660
static Identifier get(StringRef str, MLIRContext *context)
Return an identifier for the specified string.
Definition: MLIRContext.cpp:426
void setSuccessor(Block *block, unsigned index)
Definition: OpDefinition.h:810
Operation * getParentOp()
Definition: OpDefinition.h:111
Definition: Identifier.h:26
ParseResult parseCastOp(OpAsmParser &parser, OperationState &result)
Definition: Operation.cpp:1104
MLIRContext * getContext()
Return the context this operation belongs to.
Definition: OpDefinition.h:119
LogicalResult verify()
Definition: OpDefinition.h:224
LogicalResult verifyZeroResult(Operation *op)
Definition: Operation.cpp:819
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:933
This class implements the result iterators for the Operation class.
Definition: OperationSupport.h:588
This class provides the API for ops that are known to be terminators.
Definition: OpDefinition.h:789
Operation * getOperation()
Return the operation that this refers to.
Definition: OpDefinition.h:107
static bool classof(Operation *op)
Return true if this "op class" can match against the specified operation.
Definition: OpDefinition.h:981
Definition: OpImplementation.h:214
Definition: OpDefinition.h:769
LogicalResult verifySameOperandsAndResultElementType(Operation *op)
Definition: Operation.cpp:891
LogicalResult verifyOperandsAreFloatLike(Operation *op)
Definition: Operation.cpp:797
LogicalResult verifyResultsAreBoolLike(Operation *op)
Definition: Operation.cpp:983
Definition: AffineOps.h:392
Op(Operation *state)
Definition: OpDefinition.h:1034
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:613
InFlightDiagnostic emitWarning(Location loc)
Utility method to emit a warning message using this location.
Definition: Diagnostics.cpp:307
Operation * getOperation()
Return the operation that this refers to.
Definition: OpDefinition.h:962
LogicalResult verifySameOperandsAndResultType(Operation *op)
Definition: Operation.cpp:915
static AbstractOperation::OperationProperties getTraitProperties()
Definition: OpDefinition.h:739
Definition: OpDefinition.h:639
Definition: Location.h:52
LogicalResult verifyOneOperand(Operation *op)
Definition: Operation.cpp:753
result_range::type_iterator result_type_iterator
Support result type iteration.
Definition: Operation.h:260
operand_iterator operand_begin()
Operand iterator access.
Definition: OpDefinition.h:430
LogicalResult verifyAtLeastNResults(Operation *op, unsigned numOperands)
Definition: Operation.cpp:838
LogicalResult verifyOperandsAreIntegerLike(Operation *op)
Definition: Operation.cpp:788
OpState(Operation *state)
Definition: OpDefinition.h:236
LogicalResult verifySameTypeOperands(Operation *op)
Definition: Operation.cpp:806
Concept * getImpl()
Get the raw concept in the correct derived concept type.
Definition: OpDefinition.h:1183
Region * getParentRegion()
Definition: Region.cpp:36
typename Traits::Concept Concept
Definition: OpDefinition.h:1143
void replaceAllUsesWith(ValuesT &&values)
Definition: OpDefinition.h:548
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:782
Type getType()
Definition: OpDefinition.h:581
bool use_empty()
Return true if there are no users of any results of this operation.
Definition: OpDefinition.h:185
void dump()
Dump this operation.
Definition: OpDefinition.h:127
LogicalResult success(bool isSuccess=true)
Definition: LogicalResult.h:25
This class implements iteration on the types of a given range of values.
Definition: OperationSupport.h:540
Definition: Diagnostics.h:173
Definition: OpDefinition.h:488
Region * getParentRegion()
Return the parent Region of this operation.
Definition: OpDefinition.h:978
Definition: LogicalResult.h:18
LogicalResult verifyOneResult(Operation *op)
Definition: Operation.cpp:825
LogicalResult failure(bool isFailure=true)
Definition: LogicalResult.h:32
AttrClass getAttrOfType(StringRef name)
If the operation has an attribute of the specified type, return it.
Definition: OpDefinition.h:151
void setAttr(Identifier name, Attribute value)
Definition: OpDefinition.h:157
Definition: OpDefinition.h:505
bool empty()
Definition: Region.h:49
unsigned getNumResults()
Return the number of results.
Definition: OpDefinition.h:541
Definition: OpDefinition.h:627
iterator begin()
Definition: Region.h:44
ParseResult(const Diagnostic &)
Definition: OpDefinition.h:42
ParseResult(const InFlightDiagnostic &)
Definition: OpDefinition.h:41
Definition: OpDefinition.h:706
Definition: OpDefinition.h:695
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:846
dialect_attr_iterator dialect_attr_end()
Definition: OpDefinition.h:145
unsigned getNumSuccessors()
Definition: OpDefinition.h:799
void replaceAllUsesWith(Value newValue)
Definition: OpDefinition.h:586
Definition: Attributes.h:53
void setOperand(unsigned i, Value value)
Set the operand at index 'i' to 'value'.
Definition: OpDefinition.h:425
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:648
result_type_range getResultTypes()
Definition: OpDefinition.h:569
static Concept & instance()
Definition: OpDefinition.h:1175
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:795
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:672
Definition: OpDefinition.h:727
OptionalParseResult(ParseResult result)
Definition: OpDefinition.h:56
ParseResult parseOneResultOneOperandTypeOp(OpAsmParser &parser, OperationState &result)
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:595
ParseResult operator*() const
Definition: OpDefinition.h:66
void printOneResultOp(Operation *op, OpAsmPrinter &p)
Definition: Operation.cpp:1075
Definition: OpDefinition.h:517
OpResult getResult(unsigned idx)
Get the 'idx'th result of this operation.
Definition: Operation.h:246
T::Concept * getInterface() const
Definition: OperationSupport.h:142
Definition: OpDefinition.h:483
iterator_range< result_type_iterator > result_type_range
Definition: Operation.h:261
void ensureRegionTerminator(Region ®ion, Builder &builder, Location loc)
Templated version that fills the generates the provided operation type.
Definition: OpDefinition.h:83
OpFoldResult fold(ArrayRef< Attribute > operands)
Definition: OpDefinition.h:346
Definition: OperationSupport.h:83
Definition: OpDefinition.h:842
Definition: OpImplementation.h:32
This class provides a verifier for ops that are expecting a specific parent.
Definition: OpDefinition.h:889
void erase()
Remove this operation from its parent block and delete it.
Definition: OpDefinition.h:188
Location getLoc()
The source location the operation was defined or derived from.
Definition: Operation.h:107
operand_range getOperands()
Definition: OpDefinition.h:434
NamedAttributeList::RemoveResult removeAttr(Identifier name)
Definition: OpDefinition.h:177
operand_type_iterator operand_type_end()
Definition: OpDefinition.h:440
Definition: OperationSupport.h:261
ConcreteType clone()
Create a deep copy of this operation.
Definition: OpDefinition.h:965
Definition: Attributes.h:1374
static AbstractOperation::OperationProperties getTraitProperties()
Definition: OpDefinition.h:791
StringRef getStringRef() const
Return the name of this operation. This always succeeds.
Definition: Operation.cpp:52
LogicalResult verifyResultsAreIntegerLike(Operation *op)
Definition: Operation.cpp:1002
void setDialectAttrs(DialectAttrs &&attrs)
Set the dialect attributes for this operation, and preserve all dependent.
Definition: OpDefinition.h:171
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:454
void setLoc(Location loc)
Definition: OpDefinition.h:131
Definition: OpDefinition.h:1141
Op()
This is a public constructor. Any op can be initialized to null.
Definition: OpDefinition.h:1029
Block * getSuccessor(unsigned index)
Definition: OpDefinition.h:806
bool empty()
Definition: Block.h:115
Value getResult()
Definition: OpDefinition.h:580
bool operator==(IntInfty lhs, IntInfty rhs)
Definition: SDBM.h:90
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:508
static StringRef getOperandSegmentSizeAttr()
Definition: OpDefinition.h:916
uint32_t OperationProperties
Definition: OperationSupport.h:85
Value foldCastOp(Operation *op)
Definition: Operation.cpp:1122
void replaceAllUsesWith(Operation *op)
Replace all uses of 'this' value with the result of 'op'.
Definition: OpDefinition.h:591
static ClassID * getInterfaceID()
Define an accessor for the ID of this interface.
Definition: OpDefinition.h:1164
Definition: OpDefinition.h:681
LogicalResult verifySameOperandsShape(Operation *op)
Definition: Operation.cpp:846
static AbstractOperation::OperationProperties getTraitProperties()
Definition: OpDefinition.h:828
result_type_iterator result_type_begin()
Result type access.
Definition: OpDefinition.h:563
ParseResult getValue() const
Access the internal ParseResult value.
Definition: OpDefinition.h:65
Definition: OpDefinition.h:52
static void ensureTerminator(Region ®ion, Builder &builder, Location loc)
Ensure that the given region has the terminator required by this trait.
Definition: OpDefinition.h:880
static Operation * create(Location location, OperationName name, ArrayRef< Type > resultTypes, ArrayRef< Value > operands, ArrayRef< NamedAttribute > attributes, ArrayRef< Block *> successors, unsigned numRegions, bool resizableOperandList)
Create a new Operation with the specific fields.
Definition: Operation.cpp:71
result_type_iterator result_type_end()
Definition: OpDefinition.h:566
LogicalResult verifyAtLeastNOperands(Operation *op, unsigned numOperands)
Definition: Operation.cpp:768
ConcreteType cloneWithoutRegions()
Definition: OpDefinition.h:970
Value getOperand()
Definition: OpDefinition.h:469
OpTy getParentOfType()
Return the closest surrounding parent operation that is of type 'OpTy'.
Definition: OpDefinition.h:114
Definition: OpDefinition.h:386
Definition: OpDefinition.h:610
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:630
dialect_attr_iterator dialect_attr_begin()
Definition: OpDefinition.h:142
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
Definition: Diagnostics.cpp:301
Definition: OperationSupport.h:474
result_range getResults()
Definition: OpDefinition.h:560
Definition: PatternMatch.h:418
Definition: Builders.h:47
Location getLoc()
The source location the operation was defined or derived from.
Definition: OpDefinition.h:130
ParseResult parseOneResultSameOperandTypeOp(OpAsmParser &parser, OperationState &result)
Definition: Operation.cpp:1064
Definition: OpDefinition.h:657
A utility iterator that filters out non-dialect attributes.
Definition: Operation.h:311
iterator end()
Definition: Region.h:45
Definition: OpDefinition.h:825
OperandRange operand_range
Definition: Operation.h:213
OptionalParseResult(llvm::NoneType)
Definition: OpDefinition.h:59
OpInterface(Operation *op=nullptr)
Definition: OpDefinition.h:1146
result_iterator result_end()
Definition: OpDefinition.h:559
void setAttrs(ArrayRef< NamedAttribute > attributes)
Set the attributes held by this operation.
Definition: OpDefinition.h:165
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:473
static constexpr bool hasTrait()
Return if this operation contains the provided trait.
Definition: OpDefinition.h:957
static void getCanonicalizationPatterns(OwningRewritePatternList &results, MLIRContext *context)
Definition: OpDefinition.h:218
Definition: OpDefinition.h:502
void addSuccessorOperands(unsigned index, ArrayRef< Value > values)
Definition: OpDefinition.h:817
void buildCastOp(Builder *builder, OperationState &result, Value source, Type destType)
Definition: Operation.cpp:1098
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:893
Definition: OpDefinition.h:646
Op(std::nullptr_t)
Definition: OpDefinition.h:1030
Definition: OpDefinition.h:412
static AbstractOperation::OperationProperties getOperationProperties()
Definition: OpDefinition.h:1020
Definition: MLIRContext.h:34
static AbstractOperation::OperationProperties getTraitProperties()
Definition: OpDefinition.h:749
Operation::operand_iterator operand_iterator
Definition: OpDefinition.h:413
Definition: OpDefinition.h:452
void print(OpAsmPrinter &p, AffineIfOp op)
Definition: AffineOps.cpp:1671
Operation * getParentOp()
Definition: Operation.cpp:265
typename Traits::template Model< T > Model
Definition: OpDefinition.h:1144
iterator_range< dialect_attr_iterator > dialect_attr_range
Definition: Operation.h:327
static ConcreteOpType getFromOpaquePointer(const void *pointer)
Definition: OpDefinition.h:1040
static bool classof(Operation *op)
Definition: OpDefinition.h:1154
operand_type_iterator operand_type_begin()
Operand type access.
Definition: OpDefinition.h:437
void setAttrs(NamedAttributeList newAttrs)
Definition: OpDefinition.h:168
static LogicalResult foldHook(Operation *op, ArrayRef< Attribute > operands, SmallVectorImpl< OpFoldResult > &results)
Definition: OpDefinition.h:312
Dialect * getDialect()
Return the dialect that this refers to.
Definition: OpDefinition.h:975
Operation::result_iterator result_iterator
Definition: OpDefinition.h:535
RetT walk(FnT &&callback)
Definition: OpDefinition.h:210
Definition: OpDefinition.h:467
This class implements the operand iterators for the Operation class.
Definition: OperationSupport.h:559
Definition: OpDefinition.h:949
void printCastOp(Operation *op, OpAsmPrinter &p)
Definition: Operation.cpp:1115
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:719
result_range::iterator result_iterator
Definition: Operation.h:250
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:730
Definition: StandardTypes.h:63
RemoveResult
Definition: Attributes.h:1405
This class adds property that the operation has no side effects.
Definition: OpDefinition.h:747
dialect_attr_range getDialectAttrs()
Return a range corresponding to the dialect attributes for this operation.
Definition: OpDefinition.h:141
unsigned getNumSuccessorOperands(unsigned index)
Definition: OpDefinition.h:802
Definition: OpDefinition.h:605
bool hasValue() const
Returns true if we contain a valid ParseResult value.
Definition: OpDefinition.h:62
ResultRange result_range
Support result iteration.
Definition: Operation.h:249
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:525
InFlightDiagnostic emitRemark(Location loc)
Utility method to emit a remark message using this location.
Definition: Diagnostics.cpp:315
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:761
Definition: OpDefinition.h:780
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:832
LogicalResult verifyNResults(Operation *op, unsigned numOperands)
Definition: Operation.cpp:831
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:491
InFlightDiagnostic emitOpError(const Twine &message={})
Definition: Operation.cpp:625
Definition: OpDefinition.h:534
LogicalResult fold(ArrayRef< Attribute > operands, SmallVectorImpl< OpFoldResult > &results)
Definition: OpDefinition.h:291
OperationName getName()
The name of an operation is the key identifier for it.
Definition: Operation.h:61
ArrayRef< NamedAttribute > getAttrs()
Return all of the attributes on this operation.
Definition: OpDefinition.h:134
static void printAssembly(Operation *op, OpAsmPrinter &p)
Definition: OpDefinition.h:998
static StringRef getResultSegmentSizeAttr()
Definition: OpDefinition.h:931
Definition: OpDefinition.h:36
void addSuccessorOperand(unsigned index, Value value)
Definition: OpDefinition.h:814
OptionalParseResult(LogicalResult result)
Definition: OpDefinition.h:55
static LogicalResult verifyInvariants(Operation *op)
Definition: OpDefinition.h:1012
unsigned getNumOperands()
Return the number of operands.
Definition: OpDefinition.h:419
Definition: OpDefinition.h:523
static LogicalResult verifyTrait(Operation *op)
Definition: OpDefinition.h:772
Type getType(unsigned i)
Return the type of the i-th result.
Definition: OpDefinition.h:553
Definition: OpDefinition.h:891
Value getOperand(unsigned i)
Return the operand at index 'i'.
Definition: OpDefinition.h:422
LogicalResult verifyOperandSizeAttr(Operation *op, StringRef sizeAttrName)
Definition: Operation.cpp:1040
Region & getRegion(unsigned index)
Returns the region held by this operation at position 'index'.
Definition: Operation.h:369
Definition: OpDefinition.h:758
LogicalResult verifyIsTerminator(Operation *op)
Definition: Operation.cpp:971
Operation * getOperation()
Return the ultimate Operation being worked on.
Definition: OpDefinition.h:389
iterator_range< operand_type_iterator > operand_type_range
Definition: Operation.h:233
result_iterator result_begin()
Result iterator access.
Definition: OpDefinition.h:556
const AbstractOperation * getAbstractOperation()
Definition: Operation.h:65
const void * getAsOpaquePointer() const
Methods for supporting PointerLikeTypeTraits.
Definition: OpDefinition.h:1037
Definition: OpDefinition.h:624
operand_range::type_iterator operand_type_iterator
Definition: Operation.h:232