[all-commits] [llvm/llvm-project] 9c53b8: [mlir:Async] Add intermediate async.coro and async...

Eugene Zhulenev via All-commits all-commits at lists.llvm.org
Mon Jan 25 14:09:39 PST 2021


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 9c53b8e52e0584030ef76c3b9373e4077f8d80c3
      https://github.com/llvm/llvm-project/commit/9c53b8e52e0584030ef76c3b9373e4077f8d80c3
  Author: Eugene Zhulenev <ezhulenev at google.com>
  Date:   2021-01-25 (Mon, 25 Jan 2021)

  Changed paths:
    M mlir/include/mlir/Dialect/Async/IR/Async.h
    M mlir/include/mlir/Dialect/Async/IR/AsyncBase.td
    M mlir/include/mlir/Dialect/Async/IR/AsyncOps.td
    M mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp
    M mlir/lib/Dialect/Async/IR/Async.cpp
    M mlir/lib/Dialect/Async/Transforms/AsyncRefCounting.cpp
    M mlir/lib/Dialect/Async/Transforms/AsyncRefCountingOptimization.cpp
    A mlir/test/Conversion/AsyncToLLVM/convert-coro-to-llvm.mlir
    A mlir/test/Conversion/AsyncToLLVM/convert-runtime-to-llvm.mlir
    M mlir/test/Conversion/AsyncToLLVM/convert-to-llvm.mlir
    M mlir/test/Dialect/Async/async-ref-counting-optimization.mlir
    M mlir/test/Dialect/Async/async-ref-counting.mlir
    A mlir/test/Dialect/Async/coro.mlir
    M mlir/test/Dialect/Async/ops.mlir
    A mlir/test/Dialect/Async/runtime.mlir

  Log Message:
  -----------
  [mlir:Async] Add intermediate async.coro and async.runtime operations to simplify Async to LLVM lowering

[NFC] No new functionality, mostly a cleanup and one more abstraction level between Async and LLVM IR.

Instead of lowering from Async to LLVM coroutines and Async Runtime API in one shot, do it progressively via async.coro and async.runtime operations.

1. Lower from async to async.runtime/coro (e.g. async.execute to function with coro setup and runtime calls)
2. Lower from async.runtime/coro to LLVM intrinsics and runtime API calls

Intermediate coro/runtime operations will allow to run transformations on a higher level IR and do not try to match IR based on the LLVM::CallOp properties.

Although async.coro is very close to LLVM coroutines, it is not exactly the same API, instead it is optimized for usability in async lowering, and misses a lot of details that are present in @llvm.coro intrinsic.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D94923




More information about the All-commits mailing list