9 #ifndef MLIR_IR_BUILDERS_H 10 #define MLIR_IR_BUILDERS_H 17 class BlockAndValueMapping;
27 class RankedTensorType;
28 class UnrankedTensorType;
39 class DenseElementsAttr;
40 class DenseIntElementsAttr;
78 template <
typename Ty,
typename... Args> Ty
getType(Args... args) {
79 return Ty::get(
context, args...);
165 if (!region->
empty())
175 setInsertionPoint(op);
182 setInsertionPoint(block, insertPoint);
193 : block(insertBlock), point(insertPt) {}
196 bool isSet()
const {
return (block !=
nullptr); }
202 Block *block =
nullptr;
210 : builder(builder), ip(builder.saveInsertionPoint()) {}
222 this->block =
nullptr;
228 return InsertPoint(getInsertionBlock(), getInsertionPoint());
236 clearInsertionPoint();
243 this->insertPoint = insertPoint;
260 setInsertionPoint(block, block->
begin());
265 setInsertionPoint(block, block->
end());
293 template <
typename OpTy,
typename... Args>
296 OpTy::build(
this, state, std::forward<Args>(args)...);
297 auto *op = createOperation(state);
298 auto result = dyn_cast<OpTy>(op);
299 assert(result &&
"Builder didn't return the right type");
306 template <
typename OpTy,
typename... Args>
312 OpTy::build(
this, state, std::forward<Args>(args)...);
323 template <
typename OpTy,
typename... Args>
324 typename std::enable_if<OpTy::template hasTrait<OpTrait::OneResult>(),
328 createOrFold<OpTy>(results, location, std::forward<Args>(args)...);
329 return results.front();
333 template <
typename OpTy,
typename... Args>
334 typename std::enable_if<OpTy::template hasTrait<OpTrait::ZeroResult>(),
337 auto op = create<OpTy>(location, std::forward<Args>(args)...);
339 tryFold(op.getOperation(), unused);
357 return insert(op.
clone(mapper));
371 return cast<OpT>(cloneWithoutRegions(*op.getOperation()));
375 Block *block =
nullptr;
Location getUnknownLoc()
Definition: Builders.cpp:31
Definition: Attributes.h:456
OpBuilder(Region ®ion)
Definition: Builders.h:168
Definition: InferTypeOpInterface.cpp:20
Operation * clone(Operation &op)
Definition: Builders.h:359
AffineMap getEmptyAffineMap()
Returns a zero result affine map with no dimensions or symbols: () -> ().
Definition: Builders.cpp:256
InsertionGuard(OpBuilder &builder)
Definition: Builders.h:209
iterator begin()
Definition: Block.h:110
MLIRContext * getContext() const
Definition: Builders.h:52
AffineMap getMultiDimIdentityMap(unsigned rank)
Definition: Builders.cpp:268
Block * getInsertionBlock() const
Definition: Builders.h:270
Definition: Operation.h:27
Ty getType(Args... args)
Get or construct an instance of the type 'ty' with provided arguments.
Definition: Builders.h:78
Integer types can have arbitrary bitwidth up to a large fixed limit.
Definition: StandardTypes.h:82
AffineMap getSingleDimShiftAffineMap(int64_t shift)
Definition: Builders.cpp:281
Block::iterator getPoint() const
Definition: Builders.h:199
Attribute getZeroAttr(Type type)
Definition: Builders.cpp:213
Definition: Attributes.h:139
Definition: Attributes.h:129
Block represents an ordered list of Operations.
Definition: Block.h:21
Block & front()
Definition: Region.h:54
OpBuilder(MLIRContext *ctx)
Create a builder with the given context.
Definition: Builders.h:161
Definition: Attributes.h:491
void setInsertionPoint(Block *block, Block::iterator insertPoint)
Set the insertion point to the specified location.
Definition: Builders.h:240
Operation * cloneWithoutRegions(Operation &op)
Definition: Builders.h:367
Location getFileLineColLoc(Identifier filename, unsigned line, unsigned column)
Definition: Builders.cpp:33
Operation * cloneWithoutRegions(Operation &op, BlockAndValueMapping &mapper)
Definition: Builders.h:364
AffineExpr getAffineSymbolExpr(unsigned position)
Definition: Builders.cpp:248
FloatType getF16Type()
Definition: Builders.cpp:48
void createOrFold(SmallVectorImpl< Value > &results, Location location, Args &&... args)
Definition: Builders.h:307
Function types map from a list of inputs to a list of results.
Definition: Types.h:190
BlockListType::iterator iterator
Definition: Region.h:41
Definition: Identifier.h:26
NoneType getNoneType()
Definition: Builders.cpp:71
FloatAttr getF64FloatAttr(double value)
Definition: Builders.cpp:125
Definition: Attributes.h:269
FlatSymbolRefAttr getSymbolRefAttr(Operation *value)
Definition: Builders.cpp:153
Definition: StandardTypes.h:113
FloatType getF32Type()
Definition: Builders.cpp:50
bool succeeded(LogicalResult result)
Definition: LogicalResult.h:39
Definition: Attributes.h:198
NamedAttribute getNamedAttr(StringRef name, Attribute val)
Definition: Builders.cpp:77
ArrayAttr getI64ArrayAttr(ArrayRef< int64_t > values)
Definition: Builders.cpp:174
Block * getBlock()
Returns the operation block that contains this operation.
Definition: Operation.h:97
Identifier getIdentifier(StringRef str)
Definition: Builders.cpp:23
void destroy()
Destroys this operation and its subclass data.
Definition: Operation.cpp:242
TupleType getTupleType(ArrayRef< Type > elementTypes)
Definition: Builders.cpp:67
IntegerAttr getI16IntegerAttr(int16_t value)
Definition: Builders.cpp:107
Definition: Location.h:52
std::pair< Identifier, Attribute > NamedAttribute
Definition: Attributes.h:264
FloatAttr getF16FloatAttr(float value)
Definition: Builders.cpp:133
ArrayAttr getIndexArrayAttr(ArrayRef< int64_t > values)
Definition: Builders.cpp:180
Block * getBlock() const
Returns the current block of the builder.
Definition: Builders.h:287
void setInsertionPointAfter(Operation *op)
Definition: Builders.h:254
std::enable_if< OpTy::template hasTrait< OpTrait::OneResult >), Value >::type createOrFold(Location location, Args &&... args)
Overload to create or fold a single result operation.
Definition: Builders.h:326
ArrayAttr getAffineMapArrayAttr(ArrayRef< AffineMap > values)
Definition: Builders.cpp:207
FloatAttr getFloatAttr(Type type, double value)
Definition: Builders.cpp:137
IntegerAttr getI32IntegerAttr(int32_t value)
Definition: Builders.cpp:103
Definition: LogicalResult.h:18
OpListType::iterator iterator
Definition: Block.h:107
OpTy create(Location location, Args &&... args)
Create an operation of specific op type at the current insertion point.
Definition: Builders.h:294
bool empty()
Definition: Region.h:49
InsertPoint(Block *insertBlock, Block::iterator insertPt)
Creates a new insertion point at the given location.
Definition: Builders.h:192
IntegerAttr getIntegerAttr(Type type, int64_t value)
Definition: Builders.cpp:115
IntegerAttr getI64IntegerAttr(int64_t value)
Definition: Builders.cpp:91
iterator end()
Definition: Block.h:111
UnitAttr getUnitAttr()
Definition: Builders.cpp:81
IntegerAttr getI8IntegerAttr(int8_t value)
Definition: Builders.cpp:111
Definition: Attributes.h:53
auto map(Fn fun, IterType begin, IterType end) -> SmallVector< typename std::result_of< Fn(decltype(*begin))>::type, 8 >
Map with iterators.
Definition: Functional.h:28
Definition: Attributes.h:243
DictionaryAttr getDictionaryAttr(ArrayRef< NamedAttribute > value)
Definition: Builders.cpp:87
OpT cloneWithoutRegions(OpT op)
Definition: Builders.h:370
IntegerType getIntegerType(unsigned width)
Definition: Builders.cpp:58
Definition: AffineExpr.h:66
Location getFusedLoc(ArrayRef< Location > locs, Attribute metadata=Attribute())
Definition: Builders.cpp:38
Definition: Attributes.h:343
ArrayAttr getI32ArrayAttr(ArrayRef< int32_t > values)
Definition: Builders.cpp:168
IntegerType getI1Type()
Definition: Builders.cpp:56
Definition: Attributes.h:428
Definition: StandardTypes.h:481
Definition: OperationSupport.h:261
Definition: AffineMap.h:37
Block * getBlock() const
Definition: Builders.h:198
InsertPoint saveInsertionPoint() const
Return a saved insertion point.
Definition: Builders.h:227
FloatType getBF16Type()
Definition: Builders.cpp:46
ValueBuilder< mlir::LLVM::ConstantOp > constant
Definition: LinalgToLLVM.cpp:56
Builder(MLIRContext *context)
Definition: Builders.h:49
void setInsertionPoint(Operation *op)
Definition: Builders.h:248
AffineMap getSymbolIdentityMap()
Definition: Builders.cpp:276
Definition: BlockAndValueMapping.h:26
void clearInsertionPoint()
Definition: Builders.h:221
ArrayAttr getF32ArrayAttr(ArrayRef< float > values)
Definition: Builders.cpp:189
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
Definition: Attributes.h:302
void setInsertionPointToStart(Block *block)
Sets the insertion point to the start of the specified block.
Definition: Builders.h:259
AffineExpr getAffineConstantExpr(int64_t constant)
Definition: Builders.cpp:252
RAII guard to reset the insertion point of the builder when destroyed.
Definition: Builders.h:207
AffineMap getShiftedAffineMap(AffineMap map, int64_t shift)
Definition: Builders.cpp:287
Definition: Builders.h:47
IndexType getIndexType()
Definition: Builders.cpp:54
AffineMap getDimIdentityMap()
Definition: Builders.cpp:263
This class represents a saved insertion point.
Definition: Builders.h:186
FloatType getF64Type()
Definition: Builders.cpp:52
BoolAttr getBoolAttr(bool value)
Definition: Builders.cpp:83
Operation * clone(Operation &op, BlockAndValueMapping &mapper)
Definition: Builders.h:356
Definition: MLIRContext.h:34
DenseIntElementsAttr getI32VectorAttr(ArrayRef< int32_t > values)
Definition: Builders.cpp:95
AffineExpr getAffineDimExpr(unsigned position)
Definition: Builders.cpp:244
Operation * clone(BlockAndValueMapping &mapper)
Definition: Operation.cpp:692
FunctionType getFunctionType(ArrayRef< Type > inputs, ArrayRef< Type > results)
Definition: Builders.cpp:62
void setInsertionPointToEnd(Block *block)
Sets the insertion point to the end of the specified block.
Definition: Builders.h:264
AffineMap getConstantAffineMap(int64_t val)
Definition: Builders.cpp:258
OpBuilder(Operation *op)
Definition: Builders.h:174
MLIRContext * context
Definition: Builders.h:153
OpBuilder(Block *block, Block::iterator insertPoint)
Definition: Builders.h:180
Definition: Attributes.h:539
OpBuilder(Region *region)
Create a builder and set the insertion point to the start of the region.
Definition: Builders.h:164
Block::iterator getInsertionPoint() const
Returns the current insertion point of the builder.
Definition: Builders.h:273
FloatAttr getF32FloatAttr(float value)
Definition: Builders.cpp:129
Definition: StandardTypes.h:70
OpBuilder(Block *block)
Definition: Builders.h:178
void restoreInsertionPoint(InsertPoint ip)
Restore the insert point to a previously saved point.
Definition: Builders.h:232
Definition: Builders.h:158
ArrayAttr getArrayAttr(ArrayRef< Attribute > value)
Definition: Builders.cpp:149
Operation * cloneWithoutRegions(BlockAndValueMapping &mapper)
Definition: Operation.cpp:636
std::enable_if< OpTy::template hasTrait< OpTrait::ZeroResult >), OpTy >::type createOrFold(Location location, Args &&... args)
Overload to create or fold a zero result operation.
Definition: Builders.h:336
~InsertionGuard()
Definition: Builders.h:211
Definition: StandardTypes.h:521
bool isSet() const
Returns true if this insert point is set.
Definition: Builders.h:196
Definition: Attributes.h:1012
StringAttr getStringAttr(StringRef bytes)
Definition: Builders.cpp:145
ArrayAttr getF64ArrayAttr(ArrayRef< double > values)
Definition: Builders.cpp:195
ArrayAttr getStrArrayAttr(ArrayRef< StringRef > values)
Definition: Builders.cpp:201