1 ; Test that all coroutine passes run in the correct order at all optimization
2 ; levels adds coroutine passes to the pipeline.
4 ; RUN: opt < %s -disable-output -passes='default<O0>' \
5 ; RUN: -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL
6 ; RUN: opt < %s -disable-output -passes='default<O1>' \
7 ; RUN: -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
8 ; RUN: opt < %s -disable-output -passes='default<O2>' \
9 ; RUN: -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
10 ; RUN: opt < %s -disable-output -passes='default<O3>' \
11 ; RUN: -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
12 ; RUN: opt < %s -disable-output -debug-pass-manager \
13 ; RUN: -passes='module(coro-early),function(coro-elide),cgscc(coro-split),module(coro-cleanup)' 2>&1 \
14 ; RUN: | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
16 ; note that we run CoroElidePass before CoroSplitPass. This is because CoroElidePass is part of
17 ; function simplification pipeline, which runs before CoroSplitPass. And since @foo is not
18 ; a coroutine, it won't be put back into the CGSCC, and hence won't trigger a CoroElidePass
19 ; after CoroSplitPass.
20 ; CHECK-ALL: CoroEarlyPass
21 ; CHECK-OPT: CoroElidePass
22 ; CHECK-ALL: CoroSplitPass
23 ; CHECK-ALL: CoroCleanupPass
25 declare token @llvm.coro.id(i32, ptr, ptr, ptr)