13 #ifndef MLIR_IR_REGION_H 14 #define MLIR_IR_REGION_H 19 class BlockAndValueMapping;
49 bool empty() {
return blocks.empty(); }
58 return &Region::blocks;
73 if (
auto parent = dyn_cast_or_null<ParentT>(region->container))
75 }
while ((region = region->getParentRegion()));
104 blocks.splice(blocks.end(), other.
getBlocks());
121 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
122 typename std::enable_if<std::is_same<RetT, void>::value, RetT>::type
124 for (
auto &block : *
this)
125 block.walk(callback);
131 template <
typename FnT,
typename RetT = detail::walkResultType<FnT>>
132 typename std::enable_if<std::is_same<RetT, WalkResult>::value, RetT>::type
134 for (
auto &block : *
this)
135 if (block.walk(callback).wasInterrupted())
161 RegionRange, PointerUnion<Region *, const std::unique_ptr<Region> *>,
162 Region *, Region *, Region *> {
172 template <
typename Arg,
173 typename =
typename std::enable_if_t<std::is_constructible<
182 static OwnerT offset_base(
const OwnerT &owner, ptrdiff_t index);
184 static Region *dereference_iterator(
const OwnerT &owner, ptrdiff_t index);
192 #endif // MLIR_IR_REGION_H Definition: InferTypeOpInterface.cpp:20
Definition: Operation.h:27
Operation * getParentOp()
Return the parent operation this region is attached to.
Definition: Region.cpp:41
BlockListType & getBlocks()
Definition: Region.h:38
Block represents an ordered list of Operations.
Definition: Block.h:21
Block & front()
Definition: Region.h:54
void push_front(Block *block)
Definition: Region.h:51
void push_back(Block *block)
Definition: Region.h:50
BlockListType::iterator iterator
Definition: Region.h:41
std::enable_if< std::is_same< RetT, WalkResult >::value, RetT >::type walk(FnT &&callback)
Definition: Region.h:133
void takeBody(Region &other)
Definition: Region.h:102
void dropAllReferences()
Definition: Region.cpp:111
BlockListType::reverse_iterator reverse_iterator
Definition: Region.h:42
Definition: Location.h:52
Definition: STLExtras.h:196
Region * getParentRegion()
Definition: Region.cpp:36
RegionRange(Arg &&arg)
Definition: Region.h:175
bool empty()
Definition: Region.h:49
unsigned getRegionNumber()
Return the number of this region in the parent operation.
Definition: Region.cpp:55
iterator begin()
Definition: Region.h:44
Block & back()
Definition: Region.h:53
static WalkResult advance()
Definition: Visitors.h:44
static WalkResult interrupt()
Definition: Visitors.h:43
void cloneInto(Region *dest, BlockAndValueMapping &mapper)
Definition: Region.cpp:63
reverse_iterator rend()
Definition: Region.h:47
ParentT getParentOfType()
Definition: Region.h:70
bool isIsolatedFromAbove(Optional< Location > noteLoc=llvm::None)
Definition: Region.cpp:168
~Region()
Definition: Region.cpp:16
Definition: BlockAndValueMapping.h:26
reverse_iterator rbegin()
Definition: Region.h:46
MLIRContext * getContext()
Definition: Region.cpp:24
iterator end()
Definition: Region.h:45
bool isProperAncestor(Region *other)
Return true if this region is a proper ancestor of the other region.
Definition: Region.cpp:43
Definition: MLIRContext.h:34
static BlockListType Region::* getSublistAccess(Block *)
getSublistAccess() - Returns pointer to member of region.
Definition: Region.h:57
Definition: StandardTypes.h:63
void viewGraph()
Definition: ViewRegionGraph.cpp:60
Location getLoc()
Definition: Region.cpp:31
std::enable_if< std::is_same< RetT, void >::value, RetT >::type walk(FnT &&callback)
Definition: Region.h:123
bool isAncestor(Region *other)
Definition: Region.h:87
llvm::iplist< Block > BlockListType
Definition: Region.h:37