Lines Matching defs:executeOp

148 /// Erases `executeOp` and returns a clone with additional `results`.
149 async::ExecuteOp addExecuteResults(async::ExecuteOp executeOp,
152 Operation *yieldOp = executeOp.getBody()->getTerminator();
157 resultTypes.reserve(executeOp.getNumResults() + results.size());
158 transform(executeOp.getResultTypes(), std::back_inserter(resultTypes),
169 // Clone executeOp with the extra results.
170 OpBuilder builder(executeOp);
172 executeOp.getLoc(), TypeRange{resultTypes}.drop_front() /*drop token*/,
173 executeOp.getDependencies(), executeOp.getBodyOperands());
176 executeOp.getRegion().cloneInto(&newOp.getRegion(), mapper);
178 // Replace executeOp with cloned one.
179 executeOp.getOperation()->replaceAllUsesWith(
181 executeOp.erase();
189 // If the `executeOp`s token is used only in `async.execute` or `async.await`
192 void operator()(async::ExecuteOp executeOp) {
193 if (!areAllUsersExecuteOrAwait(executeOp.getToken()))
196 for (auto &op : llvm::reverse(executeOp.getBody()->without_terminator())) {
211 auto executeOp = waitOp->getParentOfType<async::ExecuteOp>();
216 executeOp = addExecuteResults(executeOp, dependencies);
219 auto asyncTokens = executeOp.getResults().take_back(dependencies.size());
220 SmallVector<Operation *, 4> users(executeOp.getToken().user_begin(),
221 executeOp.getToken().user_end());
257 .Case<async::ExecuteOp>([&](auto executeOp) {
260 it = executeOp.getBody()->begin();
261 executeOp.getBodyOperandsMutable().append(asyncTokens);
265 executeOp.getLoc());
266 copy(executeOp.getBody()->addArguments(tokenTypes, tokenLocs),
288 // worklist. 'operator()(executeOp)' would do the same, but this is faster.
289 auto executeOp = dyn_cast<async::ExecuteOp>(it->getParentOp());
290 if (executeOp && areAllUsersExecuteOrAwait(executeOp.getToken()) &&
301 void operator()(async::ExecuteOp executeOp) {
304 executeOp.getBodyResults(), [](OpResult result) {
322 assert(!executeOp.getBodyResults()[index].getUses().empty());
324 auto uses = llvm::drop_begin(executeOp.getBodyResults()[index].getUses());
326 auto yieldOp = cast<async::YieldOp>(executeOp.getBody()->getTerminator());
328 executeOp = addExecuteResults(executeOp, operands);
329 // Update 'uses' to refer to the new executeOp.
330 uses = llvm::drop_begin(executeOp.getBodyResults()[index].getUses());
331 auto results = executeOp.getBodyResults().take_back(count);