[Coroutines][2/6] New pass manager: coro-split
authorBrian Gesiak <modocache@gmail.com>
Thu, 26 Dec 2019 13:00:00 +0000 (08:00 -0500)
committerBrian Gesiak <modocache@gmail.com>
Tue, 18 Feb 2020 04:35:27 +0000 (23:35 -0500)
commit7125d66f9969605d886b5286780101a45b5bed67
tree78cda68af0acc1f9c322630c4a7319b1f24acaff
parentccad1948618d13a86e8a30488ba1ace8b7fd6b73
[Coroutines][2/6] New pass manager: coro-split

Summary:
This patch has four dependencies:

1. The first in this series of patches that implement coroutine passes in the
   new pass manager: https://reviews.llvm.org/D71898.
2. A patch that introduces an API for CGSCC passes to add new reference
   edges to a `LazyCallGraph`, `updateCGAndAnalysisManagerForCGSCCPass`:
   https://reviews.llvm.org/D72025.
3. A patch that introduces a `CallGraphUpdater` helper class that is
   capable of mutating internal `LazyCallGraph` state in order to insert
   new function nodes into a specific SCC: https://reviews.llvm.org/D70927.
4. And finally, a small edge case fix for updating `LazyCallGraph` that
   patch 3 above happens to run into: https://reviews.llvm.org/D72226.

This is the second in a series of patches that ports the LLVM coroutines
passes to the new pass manager infrastructure. This patch implements
'coro-split'.

Some notes:
* Using the new CGSCC pass manager resulted in IR being printed in the
  reverse order in some tests. To prevent FileCheck checks from failing due
  to these reversed orders, this patch splits up test files that test
  multiple different coroutine functions: specifically
  coro-alloc-with-param.ll, coro-split-eh.ll, and coro-eh-aware-edge-split.ll.
* CoroSplit.cpp contained 2 overloads of `splitCoroutine`, one of which
  dispatched to the other based on the coroutine ABI being used (C++20
  switch-based versus Swift returned-continuation-based). I found this
  confusing, especially with the additional branching based on `CallGraph`
  vs. `LazyCallGraph`, so I removed the ABI-checking overload of
  `splitCoroutine`.

Reviewers: GorNishanov, lewissbaker, chandlerc, jdoerfert, junparser, deadalnix, wenlei

Reviewed By: wenlei

Subscribers: wenlei, qcolombet, EricWF, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71899
31 files changed:
llvm/include/llvm/Transforms/Coroutines/CoroSplit.h [new file with mode: 0644]
llvm/lib/Passes/PassBuilder.cpp
llvm/lib/Passes/PassRegistry.def
llvm/lib/Transforms/Coroutines/CoroSplit.cpp
llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll [moved from llvm/test/Transforms/Coroutines/coro-alloc-with-param.ll with 61% similarity]
llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll [new file with mode: 0644]
llvm/test/Transforms/Coroutines/coro-catchswitch.ll
llvm/test/Transforms/Coroutines/coro-debug.ll
llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll [new file with mode: 0644]
llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll [new file with mode: 0644]
llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll [new file with mode: 0644]
llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split.ll [deleted file]
llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
llvm/test/Transforms/Coroutines/coro-frame.ll
llvm/test/Transforms/Coroutines/coro-materialize.ll
llvm/test/Transforms/Coroutines/coro-padding.ll
llvm/test/Transforms/Coroutines/coro-param-copy.ll
llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
llvm/test/Transforms/Coroutines/coro-split-00.ll
llvm/test/Transforms/Coroutines/coro-split-02.ll
llvm/test/Transforms/Coroutines/coro-split-alloc.ll
llvm/test/Transforms/Coroutines/coro-split-dbg.ll
llvm/test/Transforms/Coroutines/coro-split-eh-00.ll [moved from llvm/test/Transforms/Coroutines/coro-split-eh.ll with 57% similarity]
llvm/test/Transforms/Coroutines/coro-split-eh-01.ll [new file with mode: 0644]
llvm/test/Transforms/Coroutines/coro-split-hidden.ll
llvm/test/Transforms/Coroutines/coro-split-musttail.ll
llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
llvm/test/Transforms/Coroutines/no-suspend.ll
llvm/test/Transforms/Coroutines/restart-trigger.ll