16#include "mlir/Dialect/MemRef/IR/MemRef.h"
20#define GEN_PASS_DEF_LOWERAFFINEATOMICRMWPASS
21#include "Passes/Passes.h.inc"
28struct LowerAffineAtomicRmwPass
29 :
public enzyme::impl::LowerAffineAtomicRmwPassBase<
30 LowerAffineAtomicRmwPass> {
31 void runOnOperation()
override {
32 getOperation()->walk([&](enzyme::AffineAtomicRMWOp rmw) {
33 OpBuilder builder(rmw);
34 SmallVector<Value> indices;
36 rmw.getIndices(), indices);
40 auto lowered = enzyme::AtomicRMWOp::create(
41 builder, rmw.getLoc(), rmw.getResult().getType(), rmw.getKind(),
42 rmw.getOrdering(), rmw.getValue(), rmw.getMemref(), indices,
43 rmw.getAlignmentAttr(), rmw.getFastmath());
44 rmw.getResult().replaceAllUsesWith(lowered.getResult());
void computeAffineIndices(OpBuilder &builder, Location loc, AffineMap map, ValueRange operands, SmallVectorImpl< Value > &indices)