1 ; Test the particular pass pipelines have the expected structure. This is
2 ; particularly important in order to check that the implicit scheduling of the
3 ; legacy pass manager doesn't introduce unexpected structural changes in the
6 ; RUN: opt -disable-output -disable-verify -debug-pass=Structure \
8 ; RUN: | FileCheck %s --check-prefix=CHECK-O2
10 ; In the first pipeline there should just be a function pass manager, no other
12 ; CHECK-O2: Pass Arguments:
13 ; CHECK-O2-NOT: Manager
14 ; CHECK-O2: FunctionPass Manager
15 ; CHECK-O2-NOT: Manager
17 ; CHECK-O2: Pass Arguments:
18 ; CHECK-O2: ModulePass Manager
19 ; CHECK-O2-NOT: Manager
20 ; First function pass pipeline just does early opts.
21 ; CHECK-O2: FunctionPass Manager
22 ; CHECK-O2-NOT: Manager
23 ; FIXME: It's a bit odd to do dead arg elim in the middle of early opts...
24 ; CHECK-O2: Dead Argument Elimination
25 ; CHECK-O2-NEXT: FunctionPass Manager
26 ; CHECK-O2-NOT: Manager
27 ; Very carefully assert the CGSCC pass pipeline as it is fragile and unusually
28 ; susceptible to phase ordering issues.
29 ; CHECK-O2: CallGraph Construction
30 ; CHECK-O2-NEXT: Globals Alias Analysis
31 ; CHECK-O2-NEXT: Call Graph SCC Pass Manager
32 ; CHECK-O2-NEXT: Remove unused exception handling info
33 ; CHECK-O2-NEXT: Function Integration/Inlining
34 ; CHECK-O2-NEXT: Deduce function attributes
35 ; Next up is the main function pass pipeline. It shouldn't be split up and
36 ; should contain the main loop pass pipeline as well.
37 ; CHECK-O2-NEXT: FunctionPass Manager
38 ; CHECK-O2-NOT: Manager
39 ; CHECK-O2: Loop Pass Manager
40 ; CHECK-O2-NOT: Manager
41 ; FIXME: We shouldn't be pulling out to simplify-cfg and instcombine and
42 ; causing new loop pass managers.
43 ; CHECK-O2: Simplify the CFG
44 ; CHECK-O2-NOT: Manager
45 ; CHECK-O2: Combine redundant instructions
46 ; CHECK-O2-NOT: Manager
47 ; CHECK-O2: Loop Pass Manager
48 ; CHECK-O2-NOT: Manager
49 ; FIXME: It isn't clear that we need yet another loop pass pipeline
50 ; and run of LICM here.
51 ; CHECK-O2-NOT: Manager
52 ; CHECK-O2: Loop Pass Manager
53 ; CHECK-O2-NEXT: Loop Invariant Code Motion
54 ; CHECK-O2-NOT: Manager
55 ; Next we break out of the main Function passes inside the CGSCC pipeline with
57 ; CHECK-O2: A No-Op Barrier Pass
58 ; CHECK-O2-NEXT: Eliminate Available Externally
59 ; Inferring function attribute should be right after the CGSCC pipeline, before
60 ; any other optimizations/analyses.
61 ; CHECK-O2-NEXT: CallGraph
62 ; CHECK-O2-NEXT: Deduce function attributes in RPO
63 ; CHECK-O2-NOT: Manager
64 ; Reduce the size of the IR ASAP after the inliner.
65 ; CHECK-O2-NEXT: Global Variable Optimizer
66 ; CHECK-O2: Dead Global Elimination
67 ; Next is the late function pass pipeline.
68 ; CHECK-O2: FunctionPass Manager
69 ; CHECK-O2-NOT: Manager
70 ; We rotate loops prior to vectorization.
71 ; CHECK-O2: Loop Pass Manager
72 ; CHECK-O2-NEXT: Rotate Loops
73 ; CHECK-O2-NOT: Manager
74 ; CHECK-O2: Loop Vectorization
75 ; CHECK-O2-NOT: Manager
76 ; CHECK-O2: SLP Vectorizer
77 ; CHECK-O2-NOT: Manager
78 ; After vectorization we do partial unrolling.
79 ; CHECK-O2: Loop Pass Manager
80 ; CHECK-O2-NEXT: Unroll loops
81 ; CHECK-O2-NOT: Manager
82 ; After vectorization and unrolling we try to do any cleanup of inserted code,
83 ; including a run of LICM. This shouldn't run in the same loop pass manager as
84 ; the runtime unrolling though.
85 ; CHECK-O2: Loop Pass Manager
86 ; CHECK-O2-NEXT: Loop Invariant Code Motion
87 ; CHECK-O2: FunctionPass Manager
88 ; CHECK-O2: Loop Pass Manager
89 ; CHECK-O2-NEXT: Loop Sink
90 ; CHECK-O2: Simplify the CFG
91 ; CHECK-O2-NOT: Manager
93 ; FIXME: There really shouldn't be another pass manager, especially one that
94 ; just builds the domtree. It doesn't even run the verifier.
95 ; CHECK-O2: Pass Arguments:
96 ; CHECK-O2: FunctionPass Manager
97 ; CHECK-O2-NEXT: Dominator Tree Construction