[Mlir-commits] [mlir] [mlir][tosa] Fix check for isolated regions in `tosa.cond_if` (PR #143772)
Jack Frankland
llvmlistbot at llvm.org
Wed Jul 16 06:25:50 PDT 2025
================
@@ -1193,32 +1193,55 @@ bool checkErrorIfPad(Operation *op) {
return true;
}
-// Returns true if the operation takes no input operands, excluding attributes.
-static bool isNullaryOperation(Operation *op) {
- if (isa<tosa::ConstOp>(op) || isa<tosa::ConstShapeOp>(op) ||
- isa<tosa::YieldOp>(op) || isa<tosa::VariableOp>(op))
- return true;
- return false;
+static bool isOpIsolatedFromAbove(Operation *op, Region *region) {
+ return llvm::all_of(op->getOperands(), [&](auto operand) {
+ Region *operandRegion = operand.getParentRegion();
+ return region->isAncestor(operandRegion);
+ });
}
bool checkErrorIfCondIf(Operation *op) {
auto ifOp = dyn_cast<tosa::IfOp>(op);
if (!ifOp)
return true;
- // Whether the types and shapes of operands between the input/output list and
- // internal regions are validated by the operation verifier. However, with
- // support for the simplified form - where redundant operand notations are
- // omitted - is not conformant to the specification. According to the
- // specification, all operands passed into an operation must be explicitly
- // declared at each operation's structure. This code section verify that the
- // operation's form complies with this requirement.
+ // Currently the dialect supports declaring cond_if operations that
+ // have then/else regions that reference values from outside these
+ // regions. According to the specification, all values used by the
+ // then/else regions must be explicitly declared within the regions.
+ // Therefore we must check that the then/else regions are
+ // "isolated from above", in order to be conformant to the
+ // specification.
+ //
+ // Note: the dialect currently supports two styles of syntax for
+ // declaring "cond_if" operations. We'll refer to these as follows:
+ //
+ // Generic:
+ // %0 = "tosa.cond_if"(%arg0, %arg1, %arg2) ({
+ // ^bb0(%arg3, %arg4):
----------------
FranklandJack wrote:
Both blocks here use the label `bb0`, is that expected? This is also the case for the lit tests below.
https://github.com/llvm/llvm-project/pull/143772
More information about the Mlir-commits
mailing list