xref: /llvm-project/llvm/test/CodeGen/LoongArch/opt-pipeline.ll (revision 3630d9ef65b30af7e4ca78e668649bbc48b5be66)
1;; When EXPENSIVE_CHECKS are enabled, the machine verifier appears between each
2;; pass. Ignore it with 'grep -v'.
3; RUN: llc --mtriple=loongarch32 -mattr=+d -O1 --debug-pass=Structure %s -o /dev/null 2>&1 | \
4; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefix=LAXX
5; RUN: llc --mtriple=loongarch32 -mattr=+d -O2 --debug-pass=Structure %s -o /dev/null 2>&1 | \
6; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefix=LAXX
7; RUN: llc --mtriple=loongarch32 -mattr=+d -O3 --debug-pass=Structure %s -o /dev/null 2>&1 | \
8; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefix=LAXX
9; RUN: llc --mtriple=loongarch64 -mattr=+d -O1 --debug-pass=Structure %s -o /dev/null 2>&1 | \
10; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefixes=LAXX,LA64
11; RUN: llc --mtriple=loongarch64 -mattr=+d -O2 --debug-pass=Structure %s -o /dev/null 2>&1 | \
12; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefixes=LAXX,LA64
13; RUN: llc --mtriple=loongarch64 -mattr=+d -O3 --debug-pass=Structure %s -o /dev/null 2>&1 | \
14; RUN:   grep -v "Verify generated machine code" | FileCheck %s --check-prefixes=LAXX,LA64
15
16; REQUIRES: asserts
17
18; LAXX-LABEL: Pass Arguments:
19; LAXX-NEXT: Target Library Information
20; LAXX-NEXT: Target Pass Configuration
21; LAXX-NEXT: Machine Module Information
22; LAXX-NEXT: Target Transform Information
23; LAXX-NEXT: Type-Based Alias Analysis
24; LAXX-NEXT: Scoped NoAlias Alias Analysis
25; LAXX-NEXT: Assumption Cache Tracker
26; LAXX-NEXT: Profile summary info
27; LAXX-NEXT: Create Garbage Collector Module Metadata
28; LAXX-NEXT: Machine Branch Probability Analysis
29; LAXX-NEXT: Default Regalloc Eviction Advisor
30; LAXX-NEXT: Default Regalloc Priority Advisor
31; LAXX-NEXT:   ModulePass Manager
32; LAXX-NEXT:     Pre-ISel Intrinsic Lowering
33; LAXX-NEXT:     FunctionPass Manager
34; LAXX-NEXT:       Expand large div/rem
35; LAXX-NEXT:       Expand large fp convert
36; LAXX-NEXT:       Expand Atomic instructions
37; LAXX-NEXT:       Module Verifier
38; LAXX-NEXT:       Dominator Tree Construction
39; LAXX-NEXT:       Basic Alias Analysis (stateless AA impl)
40; LAXX-NEXT:       Natural Loop Information
41; LAXX-NEXT:       Canonicalize natural loops
42; LAXX-NEXT:       Scalar Evolution Analysis
43; LAXX-NEXT:       Loop Pass Manager
44; LAXX-NEXT:         Canonicalize Freeze Instructions in Loops
45; LAXX-NEXT:         Induction Variable Users
46; LAXX-NEXT:         Loop Strength Reduction
47; LAXX-NEXT:       Basic Alias Analysis (stateless AA impl)
48; LAXX-NEXT:       Function Alias Analysis Results
49; LAXX-NEXT:       Merge contiguous icmps into a memcmp
50; LAXX-NEXT:       Natural Loop Information
51; LAXX-NEXT:       Lazy Branch Probability Analysis
52; LAXX-NEXT:       Lazy Block Frequency Analysis
53; LAXX-NEXT:       Expand memcmp() to load/stores
54; LAXX-NEXT:       Lower Garbage Collection Instructions
55; LAXX-NEXT:       Shadow Stack GC Lowering
56; LAXX-NEXT:       Remove unreachable blocks from the CFG
57; LAXX-NEXT:       Natural Loop Information
58; LAXX-NEXT:       Post-Dominator Tree Construction
59; LAXX-NEXT:       Branch Probability Analysis
60; LAXX-NEXT:       Block Frequency Analysis
61; LAXX-NEXT:       Constant Hoisting
62; LAXX-NEXT:       Replace intrinsics with calls to vector library
63; LAXX-NEXT:       Lazy Branch Probability Analysis
64; LAXX-NEXT:       Lazy Block Frequency Analysis
65; LAXX-NEXT:       Optimization Remark Emitter
66; LAXX-NEXT:       Partially inline calls to library functions
67; LAXX-NEXT:       Instrument function entry/exit with calls to e.g. mcount() (post inlining)
68; LAXX-NEXT:       Scalarize Masked Memory Intrinsics
69; LAXX-NEXT:       Expand reduction intrinsics
70; LAXX-NEXT:       Natural Loop Information
71; LAXX-NEXT:       Type Promotion
72; LAXX-NEXT:       CodeGen Prepare
73; LAXX-NEXT:       Dominator Tree Construction
74; LAXX-NEXT:       Exception handling preparation
75; LAXX-NEXT:       Basic Alias Analysis (stateless AA impl)
76; LAXX-NEXT:       Function Alias Analysis Results
77; LAXX-NEXT:       ObjC ARC contraction
78; LAXX-NEXT:       Prepare callbr
79; LAXX-NEXT:       Safe Stack instrumentation pass
80; LAXX-NEXT:       Insert stack protectors
81; LAXX-NEXT:       Module Verifier
82; LAXX-NEXT:       Basic Alias Analysis (stateless AA impl)
83; LAXX-NEXT:       Function Alias Analysis Results
84; LAXX-NEXT:       Natural Loop Information
85; LAXX-NEXT:       Post-Dominator Tree Construction
86; LAXX-NEXT:       Branch Probability Analysis
87; LAXX-NEXT:       Assignment Tracking Analysis
88; LAXX-NEXT:       Lazy Branch Probability Analysis
89; LAXX-NEXT:       Lazy Block Frequency Analysis
90; LAXX-NEXT:       LoongArch DAG->DAG Pattern Instruction Selection
91; LAXX-NEXT:       Finalize ISel and expand pseudo-instructions
92; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
93; LAXX-NEXT:       Early Tail Duplication
94; LAXX-NEXT:       Optimize machine instruction PHIs
95; LAXX-NEXT:       Slot index numbering
96; LAXX-NEXT:       Merge disjoint stack slots
97; LAXX-NEXT:       Local Stack Slot Allocation
98; LAXX-NEXT:       Remove dead machine instructions
99; LAXX-NEXT:       MachineDominator Tree Construction
100; LAXX-NEXT:       Machine Natural Loop Construction
101; LAXX-NEXT:       Machine Block Frequency Analysis
102; LAXX-NEXT:       Early Machine Loop Invariant Code Motion
103; LAXX-NEXT:       MachineDominator Tree Construction
104; LAXX-NEXT:       Machine Block Frequency Analysis
105; LAXX-NEXT:       Machine Common Subexpression Elimination
106; LAXX-NEXT:       MachinePostDominator Tree Construction
107; LAXX-NEXT:       Machine Cycle Info Analysis
108; LAXX-NEXT:       Machine code sinking
109; LAXX-NEXT:       Peephole Optimizations
110; LAXX-NEXT:       Remove dead machine instructions
111; LA64-NEXT:       LoongArch Optimize W Instructions
112; LAXX-NEXT:       LoongArch Pre-RA pseudo instruction expansion pass
113; LAXX-NEXT:       LoongArch Merge Base Offset
114; LAXX-NEXT:       Detect Dead Lanes
115; LAXX-NEXT:       Init Undef Pass
116; LAXX-NEXT:       Process Implicit Definitions
117; LAXX-NEXT:       Remove unreachable machine basic blocks
118; LAXX-NEXT:       Live Variable Analysis
119; LAXX-NEXT:       Eliminate PHI nodes for register allocation
120; LAXX-NEXT:       Two-Address instruction pass
121; LAXX-NEXT:       MachineDominator Tree Construction
122; LAXX-NEXT:       Slot index numbering
123; LAXX-NEXT:       Live Interval Analysis
124; LAXX-NEXT:       Register Coalescer
125; LAXX-NEXT:       Rename Disconnected Subregister Components
126; LAXX-NEXT:       Machine Instruction Scheduler
127; LAXX-NEXT:       LoongArch Dead register definitions
128; LAXX-NEXT:       Machine Block Frequency Analysis
129; LAXX-NEXT:       Debug Variable Analysis
130; LAXX-NEXT:       Live Stack Slot Analysis
131; LAXX-NEXT:       Virtual Register Map
132; LAXX-NEXT:       Live Register Matrix
133; LAXX-NEXT:       Bundle Machine CFG Edges
134; LAXX-NEXT:       Spill Code Placement Analysis
135; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
136; LAXX-NEXT:       Machine Optimization Remark Emitter
137; LAXX-NEXT:       Greedy Register Allocator
138; LAXX-NEXT:       Virtual Register Rewriter
139; LAXX-NEXT:       Register Allocation Pass Scoring
140; LAXX-NEXT:       Stack Slot Coloring
141; LAXX-NEXT:       Machine Copy Propagation Pass
142; LAXX-NEXT:       Machine Loop Invariant Code Motion
143; LAXX-NEXT:       Remove Redundant DEBUG_VALUE analysis
144; LAXX-NEXT:       Fixup Statepoint Caller Saved
145; LAXX-NEXT:       PostRA Machine Sink
146; LAXX-NEXT:       Machine Block Frequency Analysis
147; LAXX-NEXT:       MachineDominator Tree Construction
148; LAXX-NEXT:       MachinePostDominator Tree Construction
149; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
150; LAXX-NEXT:       Machine Optimization Remark Emitter
151; LAXX-NEXT:       Shrink Wrapping analysis
152; LAXX-NEXT:       Prologue/Epilogue Insertion & Frame Finalization
153; LAXX-NEXT:       Machine Late Instructions Cleanup Pass
154; LAXX-NEXT:       Control Flow Optimizer
155; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
156; LAXX-NEXT:       Tail Duplication
157; LAXX-NEXT:       Machine Copy Propagation Pass
158; LAXX-NEXT:       Post-RA pseudo instruction expansion pass
159; LAXX-NEXT:       MachineDominator Tree Construction
160; LAXX-NEXT:       Machine Natural Loop Construction
161; LAXX-NEXT:       Post RA top-down list latency scheduler
162; LAXX-NEXT:       Analyze Machine Code For Garbage Collection
163; LAXX-NEXT:       Machine Block Frequency Analysis
164; LAXX-NEXT:       MachinePostDominator Tree Construction
165; LAXX-NEXT:       Branch Probability Basic Block Placement
166; LAXX-NEXT:       Insert fentry calls
167; LAXX-NEXT:       Insert XRay ops
168; LAXX-NEXT:       Implement the 'patchable-function' attribute
169; LAXX-NEXT:       Branch relaxation pass
170; LAXX-NEXT:       Contiguously Lay Out Funclets
171; LAXX-NEXT:       Remove Loads Into Fake Uses
172; LAXX-NEXT:       StackMap Liveness Analysis
173; LAXX-NEXT:       Live DEBUG_VALUE analysis
174; LAXX-NEXT:       Machine Sanitizer Binary Metadata
175; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
176; LAXX-NEXT:       Machine Optimization Remark Emitter
177; LAXX-NEXT:       Stack Frame Layout Analysis
178; LAXX-NEXT:       LoongArch pseudo instruction expansion pass
179; LAXX-NEXT:       LoongArch atomic pseudo instruction expansion pass
180; LAXX-NEXT:       Lazy Machine Block Frequency Analysis
181; LAXX-NEXT:       Machine Optimization Remark Emitter
182; LAXX-NEXT:       LoongArch Assembly Printer
183; LAXX-NEXT:       Free MachineFunction
184