13 #ifndef MLIR_IR_BLOCK_H 14 #define MLIR_IR_BLOCK_H 22 public llvm::ilist_node_with_parent<Block, Region> {
34 operations.pop_back();
93 void eraseArgument(
unsigned index,
bool updatePredTerms =
true);
115 bool empty() {
return operations.empty(); }
154 template <
typename OpT>
155 class op_filter_iterator
156 :
public llvm::filter_iterator<Block::iterator, bool (*)(Operation &)> {
157 static bool filter(
Operation &op) {
return llvm::isa<OpT>(op); }
161 : llvm::filter_iterator<Block::iterator, bool (*)(Operation &)>(
171 template <
typename OpT>
172 class op_iterator :
public llvm::mapped_iterator<op_filter_iterator<OpT>,
173 OpT (*)(Operation &)> {
174 static OpT unwrap(
Operation &op) {
return cast<OpT>(op); }
181 :
llvm::mapped_iterator<op_filter_iterator<OpT>, OpT (*)(
Operation &)>(
192 return {op_filter_iterator<OpT>(
begin(), endIt),
193 op_filter_iterator<OpT>(endIt, endIt)};
196 return op_filter_iterator<OpT>(
begin(),
end());
199 return op_filter_iterator<OpT>(
end(),
end());
207 auto endIt = --
end();
208 return {
begin(), endIt};
261 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
263 return walk(
begin(),
end(), std::forward<FnT>(callback));
270 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
271 typename std::enable_if<std::is_same<RetT, void>::value, RetT>::type
273 for (
auto &op : llvm::make_early_inc_range(llvm::make_range(begin, end)))
281 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
282 typename std::enable_if<std::is_same<RetT, WalkResult>::value, RetT>::type
284 for (
auto &op : llvm::make_early_inc_range(llvm::make_range(begin, end)))
311 return &Block::operations;
314 void print(raw_ostream &os);
325 llvm::PointerIntPair<
Region *, 1,
bool> parentValidOpOrderPair;
331 std::vector<BlockArgument> arguments;
334 void operator=(
Block &) =
delete;
336 friend struct llvm::ilist_traits<
Block>;
340 #endif // MLIR_IR_BLOCK_H Definition: InferTypeOpInterface.cpp:20
std::enable_if< std::is_same< RetT, void >::value, RetT >::type walk(Block::iterator begin, Block::iterator end, FnT &&callback)
Definition: Block.h:272
Block * getSuccessor(unsigned i)
Definition: Block.cpp:215
iterator begin()
Definition: Block.h:110
void clear()
Definition: Block.h:27
std::enable_if< std::is_same< RetT, WalkResult >::value, RetT >::type walk(Block::iterator begin, Block::iterator end, FnT &&callback)
Definition: Block.h:283
Definition: PassRegistry.cpp:413
Definition: Operation.h:27
void eraseArgument(unsigned index, bool updatePredTerms=true)
Definition: Block.cpp:163
Operation & back()
Definition: Block.h:119
Operation * getParentOp()
Returns the closest surrounding operation that contains this block.
Definition: Block.cpp:40
Block represents an ordered list of Operations.
Definition: Block.h:21
OpListType::reverse_iterator reverse_iterator
Definition: Block.h:108
pred_iterator pred_end()
Definition: Block.h:228
void moveBefore(Block *block)
Definition: Block.cpp:57
OpListType & getOperations()
Definition: Block.h:104
void invalidateOpOrder()
Invalidates the current ordering of operations.
Definition: Block.cpp:105
Terminator operations can have Block operands to represent successors.
Definition: UseDefLists.h:288
iterator_range< pred_iterator > getPredecessors()
Definition: Block.h:229
args_iterator args_begin()
Definition: Block.h:72
BlockArgument insertArgument(args_iterator it, Type type)
Definition: Block.cpp:184
void printAsOperand(raw_ostream &os, bool printType=true)
Print out the name of the block without printing its body.
Definition: AsmPrinter.cpp:2170
Operation & front()
Definition: Block.h:120
void push_front(Operation *op)
Definition: Block.h:117
iterator_range< iterator > without_terminator()
Definition: Block.h:204
bool args_empty()
Definition: Block.h:77
reverse_args_iterator args_rend()
Definition: Block.h:75
BlockArgument getArgument(unsigned i)
Definition: Block.h:96
Region * getParent() const
Definition: Block.cpp:36
BlockOperand * getFirstUse() const
Definition: UseDefLists.h:95
BlockArgListType::iterator args_iterator
Definition: Block.h:70
~Block()
Definition: Block.cpp:29
This class represents a single IR object that contains a use list.
Definition: UseDefLists.h:34
void erase()
Unlink this Block from its parent region and delete it.
Definition: Block.cpp:64
Block * splitBlock(Operation *splitBeforeOp)
Definition: Block.h:305
OpListType::iterator iterator
Definition: Block.h:107
SuccessorRange::iterator succ_iterator
Definition: Block.h:249
PredecessorIterator pred_iterator
Definition: Block.h:224
reverse_iterator rbegin()
Definition: Block.h:112
iterator end()
Definition: Block.h:111
unsigned getNumArguments()
Definition: Block.h:95
BlockArgument addArgument(Type type)
Add one value to the argument list.
Definition: Block.cpp:146
static WalkResult advance()
Definition: Visitors.h:44
iterator begin() const
Definition: STLExtras.h:228
void walkOperations(Operation *op, function_ref< void(Operation *op)> callback)
Walk all of the operations nested under and including the given operation.
Definition: Visitors.cpp:15
bool isEntryBlock()
Return if this block is the entry block in the parent region.
Definition: Block.cpp:45
static WalkResult interrupt()
Definition: Visitors.h:43
BlockArgListType getArguments()
Definition: Block.h:68
Block arguments are values.
Definition: Value.h:235
reverse_args_iterator args_rbegin()
Definition: Block.h:74
op_iterator(op_filter_iterator< OpT > it)
Initializes the iterator to the specified filter iterator.
Definition: Block.h:180
void dropAllDefinedValueUses()
Definition: Block.cpp:92
BlockArgListType::reverse_iterator reverse_args_iterator
Definition: Block.h:71
bool empty()
Definition: Block.h:115
This class implements the successor iterators for Block.
Definition: BlockSupport.h:56
bool isOpOrderValid()
Definition: Block.cpp:102
args_iterator args_end()
Definition: Block.h:73
iterator_range< args_iterator > addArguments(ArrayRef< Type > types)
Add one argument to the argument list for each type specified in the list.
Definition: Block.cpp:153
static OpListType Block::* getSublistAccess(Operation *)
Returns pointer to member of operation list.
Definition: Block.h:310
Operation * getTerminator()
Definition: Block.cpp:202
void dropAllReferences()
Definition: Block.cpp:87
void push_back(Operation *op)
Definition: Block.h:116
void dump()
Definition: AsmPrinter.cpp:2167
RetT walk(FnT &&callback)
Definition: Block.h:262
iterator end() const
Definition: STLExtras.h:229
op_iterator< OpT > op_begin()
Definition: Block.h:195
llvm::iplist< Operation > OpListType
This is the list of operations in the block.
Definition: Block.h:103
unsigned getNumSuccessors()
Definition: Block.cpp:211
reverse_iterator rend()
Definition: Block.h:113
bool hasNoPredecessors()
Return true if this block has no predecessors.
Definition: Block.cpp:208
iterator_range< op_iterator< OpT > > getOps()
Definition: Block.h:190
succ_iterator succ_end()
Definition: Block.h:251
void recomputeOpOrder()
Recomputes the ordering of child operations within the block.
Definition: Block.cpp:134
Definition: BlockSupport.h:32
Block * getSinglePredecessor()
Definition: Block.cpp:226
void insertBefore(Block *block)
Definition: Block.cpp:49
op_iterator< OpT > op_end()
Definition: Block.h:198
SuccessorRange getSuccessors()
Definition: Block.h:252
Block()
Definition: Block.h:24
void print(raw_ostream &os)
Definition: AsmPrinter.cpp:2151
OpT reference
Definition: Block.h:177
Operation * findAncestorOpInBlock(Operation &op)
Definition: Block.cpp:72
succ_iterator succ_begin()
Definition: Block.h:250
bool verifyOpOrder()
Definition: Block.cpp:113
Block * splitBlock(iterator splitBefore)
Definition: Block.cpp:249
pred_iterator pred_begin()
Definition: Block.h:225