[Mlir-commits] [mlir] [MLIR][Transform][SMT] Allow for declarative computations in schedules (PR #160895)
Rolf Morel
llvmlistbot at llvm.org
Thu Oct 9 06:13:57 PDT 2025
================
@@ -37,19 +38,111 @@ transform::smt::ConstrainParamsOp::apply(transform::TransformRewriter &rewriter,
// and allow for users to attach their own implementation, which would,
// e.g., translate the ops to SMTLIB and hand that over to the user's
// favourite solver. This requires changes to the dialect's verifier.
- return emitDefiniteFailure() << "op does not have interpreted semantics yet";
+ return emitSilenceableFailure(getLoc())
+ << "op does not have interpreted semantics yet";
}
LogicalResult transform::smt::ConstrainParamsOp::verify() {
+ auto yieldTerminator =
+ llvm::dyn_cast_if_present<mlir::smt::YieldOp>(getRegion().front().back());
+ if (!yieldTerminator)
+ return emitOpError() << "expected '"
+ << mlir::smt::YieldOp::getOperationName()
+ << "' as terminator";
----------------
rolfmorel wrote:
Changing the `dyn_cast` to `auto yieldTerminator = cast<mlir::smt::YieldOp>(getRegion().front().back());` and removing the check does make it possible for me to crash on the cast. Either by having the wrong terminator, e.g. `transform.yield` or, using the Python API, I can construct the op without its region without a terminator as the last op. As an example:
```python
compute_with_params = transform_smt.ConstrainParamsOp(
[transform.ParamType.get(ir.IntegerType.get_signless(32))],
[symbolic_value_as_param],
[smt.IntType.get()],
)
with ir.InsertionPoint(compute_with_params.body):
symbolic_value_as_smt_var = compute_with_params.body.arguments[0]
twice_symb = smt.IntAddOp(
[symbolic_value_as_smt_var, symbolic_value_as_smt_var]
)
```
this then yields the following at runtime:
```
python: PATH_TO_REPO/llvm/include/llvm/Support/Casting.h:572: decltype(auto) llvm::cast(From &) [To = mlir::smt::YieldOp, From = mlir::Operation]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
```
https://github.com/llvm/llvm-project/pull/160895
More information about the Mlir-commits
mailing list