Skip to content

Commit 7f88905

Browse files
committed
Revert "using scf.parallel+memref.store to zero out a memref"
This reverts commit 5ddbd10.
1 parent 759bfb5 commit 7f88905

1 file changed

Lines changed: 10 additions & 26 deletions

File tree

enzyme/Enzyme/MLIR/Implementations/MemRefAutoDiffOpInterfaceImpl.cpp

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
#include "Interfaces/GradientUtilsReverse.h"
1919

2020
#include "mlir/Dialect/MemRef/IR/MemRef.h"
21-
#include "mlir/Dialect/SCF/IR/SCF.h"
2221
#include "mlir/IR/DialectRegistry.h"
2322
#include "mlir/Support/LogicalResult.h"
2423

24+
// TODO: We need a way to zero out a memref (which linalg.fill does), but
25+
// ideally we wouldn't depend on the linalg dialect.
26+
#include "mlir/Dialect/Linalg/IR/Linalg.h"
27+
2528
using namespace mlir;
2629
using namespace mlir::enzyme;
2730

@@ -270,33 +273,14 @@ class MemRefAutoDiffTypeInterface
270273
LogicalResult zeroInPlace(Type self, OpBuilder &builder, Location loc,
271274
Value val) const {
272275
auto MT = cast<MemRefType>(self);
273-
auto eltIface = dyn_cast<AutoDiffTypeInterface>(MT.getElementType());
274-
if (!eltIface || eltIface.isMutable())
276+
if (auto iface = dyn_cast<AutoDiffTypeInterface>(MT.getElementType())) {
277+
if (!iface.isMutable()) {
278+
Value zero = iface.createNullValue(builder, loc);
279+
linalg::FillOp::create(builder, loc, zero, val);
280+
}
281+
} else {
275282
return failure();
276-
Value zero = eltIface.createNullValue(builder, loc);
277-
278-
if (MT.getRank() == 0) {
279-
memref::StoreOp::create(builder, loc, zero, val, ValueRange{});
280-
return success();
281283
}
282-
283-
Value c0 = arith::ConstantIndexOp::create(builder, loc, 0);
284-
Value c1 = arith::ConstantIndexOp::create(builder, loc, 1);
285-
286-
SmallVector<Value> lbs(MT.getRank(), c0);
287-
SmallVector<Value> steps(MT.getRank(), c1);
288-
SmallVector<Value> ubs;
289-
for (auto [i, d] : llvm::enumerate(MT.getShape())) {
290-
ubs.push_back(
291-
d == ShapedType::kDynamic
292-
? memref::DimOp::create(builder, loc, val, i).getResult()
293-
: arith::ConstantIndexOp::create(builder, loc, d).getResult());
294-
}
295-
296-
scf::ParallelOp::create(builder, loc, lbs, ubs, steps,
297-
[&](OpBuilder &b, Location l, ValueRange ivs) {
298-
memref::StoreOp::create(b, l, zero, val, ivs);
299-
});
300284
return success();
301285
}
302286

0 commit comments

Comments
 (0)