49 int acquireTknVal,
int releaseTknVal, Value buf,
50 int offset,
int len, DMAChannelDir dmaDir,
52 ConversionPatternRewriter &rewriter)
const {
54 Region &r = mem.getBody();
55 Block &endBlock = r.back();
56 Block *dmaBlock = rewriter.createBlock(&endBlock);
57 Block *bdBlock = rewriter.createBlock(&endBlock);
59 rewriter.setInsertionPointToStart(dmaBlock);
60 DMAStartOp::create(rewriter, loc, dmaDir, channelIndex,
62 false, bdBlock, &endBlock);
68 rewriter.setInsertionPointToStart(bdBlock);
69 UseTokenOp::create(rewriter, loc, tokenName, acquireTknVal,
71 DMABDOp::create(rewriter, loc, buf, offset, len);
72 UseTokenOp::create(rewriter, loc, tokenName, releaseTknVal,
74 NextBDOp::create(rewriter, loc, &endBlock);
79 ConversionPatternRewriter &rewriter)
const override {
80 Value srcBuf = op.getSrcBuf();
81 Value dstBuf = op.getDstBuf();
83 StringRef tokenName = op.getTokenName();
84 int acquireTknVal = op.getAcquireTokenValue();
85 int releaseTknVal = op.getReleaseTokenValue();
86 int srcOffset = op.getSrcOffsetValue();
87 int dstOffset = op.getDstOffsetValue();
88 int srcLen = op.getSrcLenValue();
89 int dstLen = op.getDstLenValue();
91 MemOp srcMem = srcTileOp(op).getMemOp();
92 MemOp dstMem = dstTileOp(op).getMemOp();
95 releaseTknVal, srcBuf, srcOffset, srcLen,
96 DMAChannelDir::MM2S, 0, rewriter);
98 releaseTknVal, dstBuf, dstOffset, dstLen,
99 DMAChannelDir::S2MM, 0, rewriter);
101 rewriter.eraseOp(op);