[Mlir-commits] [mlir] [mlir][emitc] Lower SCF using memrefs (PR #93371)
Gil Rapaport
llvmlistbot at llvm.org
Wed May 29 00:21:28 PDT 2024
================
@@ -63,21 +65,41 @@ static SmallVector<Value> createVariablesForResults(T op,
for (OpResult result : op.getResults()) {
Type resultType = result.getType();
- emitc::OpaqueAttr noInit = emitc::OpaqueAttr::get(context, "");
- emitc::VariableOp var =
- rewriter.create<emitc::VariableOp>(loc, resultType, noInit);
+ SmallVector<OpFoldResult> dimensions = {rewriter.getIndexAttr(1)};
+ memref::AllocaOp var =
+ rewriter.create<memref::AllocaOp>(loc, dimensions, resultType);
resultVariables.push_back(var);
}
return resultVariables;
}
-// Create a series of assign ops assigning given values to given variables at
+// Create a series of load ops reading the values of given variables at
+// the current insertion point of given rewriter.
+static SmallVector<Value> readValues(SmallVector<Value> &variables,
+ PatternRewriter &rewriter, Location loc) {
+ Value zero;
+ if (variables.size() > 0)
+ zero = rewriter.create<arith::ConstantOp>(loc, rewriter.getIndexAttr(0));
+ SmallVector<Value> values;
+ SmallVector<Value> indices = {zero};
+ for (Value var : variables)
+ values.push_back(
+ rewriter.create<memref::LoadOp>(loc, var, indices).getResult());
+ return values;
+}
+
+// Create a series of store ops assigning given values to given variables at
// the current insertion point of given rewriter.
static void assignValues(ValueRange values, SmallVector<Value> &variables,
PatternRewriter &rewriter, Location loc) {
- for (auto [value, var] : llvm::zip(values, variables))
- rewriter.create<emitc::AssignOp>(loc, var, value);
+ Value zero;
+ if (variables.size() > 0)
----------------
aniragil wrote:
Yes (with a `!`)
https://github.com/llvm/llvm-project/pull/93371
More information about the Mlir-commits
mailing list