blob: 90c96ac21b43eee49a1de1f29c2405ca74f8c566 [file] [log] [blame]
//===- RegionKindInterface.td - Region kind interfaces -----*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains a set of interfaces to query the properties of regions
// in an operation.
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_IR_REGIONKINDINTERFACE
#define MLIR_IR_REGIONKINDINTERFACE
include "mlir/IR/OpBase.td"
// OpInterface to query the properties of regions in an operation
def RegionKindInterface : OpInterface<"RegionKindInterface"> {
let description = [{
Interface for operations to describe the abstract semantics of
their regions. Currently, two kinds of regions are
supported. RegionKind::Graph represents a graph region without
control flow semantics. RegionKind::SSACFG represents an
[SSA-style control flow](../LangRef.md/#modeling-control-flow) region
with basic blocks, sequential semantics, and reachability.
}];
let cppNamespace = "::mlir";
let methods = [
StaticInterfaceMethod<
/*desc=*/[{
Return the kind of the region with the given index inside this operation.
}],
/*retTy=*/"::mlir::RegionKind",
/*methodName=*/"getRegionKind",
/*args=*/(ins "unsigned":$index)
>,
StaticInterfaceMethod<
/*desc=*/"Return true if the kind of the given region requires the "
"SSA-Dominance property",
/*retTy=*/"bool",
/*methodName=*/"hasSSADominance",
/*args=*/(ins "unsigned":$index),
/*methodBody=*/[{
return getRegionKind(index) == ::mlir::RegionKind::SSACFG;
}]
>,
];
}
def HasOnlyGraphRegion : NativeOpTrait<"HasOnlyGraphRegion">;
// Op's regions that don't need a terminator: requires some other traits
// so it defines a list that must be concatenated.
def GraphRegionNoTerminator {
list<OpTrait> traits = [
NoTerminator,
SingleBlock,
RegionKindInterface,
HasOnlyGraphRegion
];
}
#endif // MLIR_IR_REGIONKINDINTERFACE