This allows assuming_all to be replaced when all inputs are known to be
statically passing witnesses.
Details
- Reviewers
jpienaar silvas herhut - Commits
- rG6b3a5bff93cd: [mlir] Folding of shape.assuming_all
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
LGTM, but let's look into using a fold for this (the good thing is that all the test cases will carry over :) )
| mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td | ||
|---|---|---|
| 1 | Missing file header? | |
| 4 | Could we indent by 2 instead? def AllInputsTrueWitnesses : Constraint<CPred<[
llvm::all_of($0.getOwner()->getOperands(), [](mlir::Value op) {
return op.getDefiningOp<mlir::shape::TrueWitnessOp>();
})}]>>; | |
| 12 | Could we just indent these by 2 instead? [yes we need a formatter ... and many other variants as below] def ConstantAssumingAll : Pat< (Shape_AssumingAllOp:$op $input), (Shape_TrueWitnessOp), [(AllInputsTrueWitnesses $op)]>; | |
Feel free to land. Comments are just suggestions and can also be addressed in a follow up.
| mlir/lib/Dialect/Shape/IR/ShapeCanonicalization.td | ||
|---|---|---|
| 6 | This would be a great place to use the isTrueWitness helper. | |
| 11 | This could also be formulated as a pattern that drops constant true witnesses from the operands and a pattern that replaces an assuming_all with no operands by a constant true witness. That way we also get removal of constant operands (which is more a cosmetic cleanup and does not really propagate any knowledge). | |
Missing file header?