[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / Coroutines / smoketest.ll
blob10c0f6bbd1ced4b722a4071159ae34be3e83ceed
1 ; Test that all coroutine passes run in the correct order at all optimization
2 ; levels and -enable-coroutines adds coroutine passes to the pipeline.
4 ; RUN: opt < %s -disable-output -passes='default<O0>' -enable-coroutines \
5 ; RUN:     -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL
6 ; RUN: opt < %s -disable-output -passes='default<O1>' -enable-coroutines \
7 ; RUN:     -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
8 ; RUN: opt < %s -disable-output -passes='default<O2>' -enable-coroutines \
9 ; RUN:     -debug-pass-manager 2>&1 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-OPT
10 ; RUN: opt < %s -disable-output -passes='default<O3>' -enable-coroutines \
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='function(coro-early),function(coro-elide),cgscc(coro-split),function(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 define void @foo() {
26   ret void