[Mlir-commits] [mlir] d78374b - [MLIR] Add callback builder for `shape.assuming` op
Frederik Gossen
llvmlistbot at llvm.org
Tue Mar 23 03:46:18 PDT 2021
Author: Frederik Gossen
Date: 2021-03-23T11:46:01+01:00
New Revision: d78374b2d364e6124c82eefdae8175db11580c43
URL: https://github.com/llvm/llvm-project/commit/d78374b2d364e6124c82eefdae8175db11580c43
DIFF: https://github.com/llvm/llvm-project/commit/d78374b2d364e6124c82eefdae8175db11580c43.diff
LOG: [MLIR] Add callback builder for `shape.assuming` op
Differential Revision: https://reviews.llvm.org/D99153
Added:
Modified:
mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
mlir/lib/Dialect/Shape/IR/Shape.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
index a17be3834dc2c..cc0ff5702af9b 100644
--- a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
+++ b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
@@ -713,10 +713,10 @@ def Shape_AssumingAllOp : Shape_Op<"assuming_all", [Commutative, NoSideEffect]>
let verifier = [{ return ::verify(*this); }];
}
-def Shape_AssumingOp : Shape_Op<"assuming",
- [SingleBlockImplicitTerminator<"AssumingYieldOp">,
- DeclareOpInterfaceMethods<RegionBranchOpInterface>,
- RecursiveSideEffects]> {
+def Shape_AssumingOp : Shape_Op<"assuming", [
+ SingleBlockImplicitTerminator<"AssumingYieldOp">,
+ DeclareOpInterfaceMethods<RegionBranchOpInterface>,
+ RecursiveSideEffects]> {
let summary = "Execute the region";
let description = [{
Executes the region assuming all witnesses are true.
@@ -742,6 +742,11 @@ def Shape_AssumingOp : Shape_Op<"assuming",
static void inlineRegionIntoParent(AssumingOp &op, PatternRewriter &rewriter);
}];
+ let builders = [
+ OpBuilder<(ins "Value":$witness,
+ CArg<"function_ref<SmallVector<Value, 2>(OpBuilder &, Location)>">)>
+ ];
+
let hasCanonicalizer = 1;
}
@@ -757,7 +762,9 @@ def Shape_AssumingYieldOp : Shape_Op<"assuming_yield",
let arguments = (ins Variadic<AnyType>:$operands);
- let builders = [OpBuilder<(ins), [{ /* nothing to do */ }]>];
+ let builders = [
+ OpBuilder<(ins), [{ /* nothing to do */ }]>,
+ ];
let assemblyFormat = "attr-dict ($operands^ `:` type($operands))?";
}
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index 89f3422e126f1..f68478042e65d 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -311,6 +311,27 @@ void AssumingOp::inlineRegionIntoParent(AssumingOp &op,
rewriter.mergeBlocks(blockAfterAssuming, blockBeforeAssuming);
}
+void AssumingOp::build(
+ OpBuilder &builder, OperationState &result, Value witness,
+ function_ref<SmallVector<Value, 2>(OpBuilder &, Location)> bodyBuilder) {
+
+ result.addOperands(witness);
+ Region *bodyRegion = result.addRegion();
+ bodyRegion->push_back(new Block);
+ Block &bodyBlock = bodyRegion->front();
+
+ // Build body.
+ OpBuilder::InsertionGuard guard(builder);
+ builder.setInsertionPointToStart(&bodyBlock);
+ SmallVector<Value, 2> yieldValues = bodyBuilder(builder, result.location);
+ builder.create<AssumingYieldOp>(result.location, yieldValues);
+
+ SmallVector<Type, 2> assumingTypes;
+ for (Value v : yieldValues)
+ assumingTypes.push_back(v.getType());
+ result.addTypes(assumingTypes);
+}
+
//===----------------------------------------------------------------------===//
// AssumingAllOp
//===----------------------------------------------------------------------===//
More information about the Mlir-commits
mailing list