blob: a705642c435abf28089f236825bd2bb02de12f29 [file] [log] [blame]
Craig Topperbf6495f2017-11-15 00:22:42 +00001;RUN: opt %s -passes='adce,loop(rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate 2>&1 | FileCheck %s
Alina Sbirleaad4d0182018-10-24 22:46:45 +00002;RUN: opt %s -passes='adce,loop(rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa 2>&1 | FileCheck %s --check-prefix=MSSA
NAKAMURA Takumi5ce714a2017-11-15 06:46:58 +00003;REQUIRES: asserts
Craig Topperbf6495f2017-11-15 00:22:42 +00004
5; This test is to make sure we invalidate the post dominator pass after loop rotate simplifies the loop latch.
6; The adce passes are here to make sure post dominator analysis is required.
7
8; CHECK: Starting llvm::Function pass manager run.
9; CHECK-NEXT: Running pass: ADCEPass on f
Craig Topperbf6495f2017-11-15 00:22:42 +000010; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f
11; CHECK-NEXT: Running pass: FunctionToLoopPassAdaptor{{.*}} on f
Fedor Sergeev02e7f022017-12-29 08:16:06 +000012; CHECK-NEXT: Starting llvm::Function pass manager run.
13; CHECK-NEXT: Running pass: LoopSimplifyPass on f
Craig Topperbf6495f2017-11-15 00:22:42 +000014; CHECK-NEXT: Running analysis: LoopAnalysis on f
Chijun Simaeacad792018-08-04 02:50:12 +000015; CHECK-NEXT: Running analysis: DominatorTreeAnalysis on f
Craig Topperbf6495f2017-11-15 00:22:42 +000016; CHECK-NEXT: Running analysis: AssumptionAnalysis on f
Fedor Sergeev02e7f022017-12-29 08:16:06 +000017; CHECK-NEXT: Running pass: LCSSAPass on f
18; CHECK-NEXT: Finished llvm::Function pass manager run.
Craig Topperbf6495f2017-11-15 00:22:42 +000019; CHECK-NEXT: Running analysis: AAManager on f
20; CHECK-NEXT: Running analysis: TargetLibraryAnalysis on f
21; CHECK-NEXT: Running analysis: ScalarEvolutionAnalysis on f
22; CHECK-NEXT: Running analysis: TargetIRAnalysis on f
23; CHECK-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f
24; CHECK-NEXT: Starting Loop pass manager run.
Fedor Sergeevee8d31c2018-09-20 17:08:45 +000025; CHECK-NEXT: Running analysis: PassInstrumentationAnalysis on bb
Craig Topperbf6495f2017-11-15 00:22:42 +000026; CHECK-NEXT: Running pass: LoopRotatePass on Loop at depth 1 containing: %bb<header><exiting>,%bb4<latch>
27; CHECK-NEXT: Folding loop latch bb4 into bb
28; CHECK-NEXT: Invalidating all non-preserved analyses for: bb
29; CHECK-NEXT: Finished Loop pass manager run.
30; CHECK-NEXT: Invalidating all non-preserved analyses for: f
31; CHECK-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f
32; CHECK-NEXT: Running pass: ADCEPass on f
33; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f
34; CHECK-NEXT: Finished llvm::Function pass manager run.
35
Alina Sbirleaad4d0182018-10-24 22:46:45 +000036; MSSA: Starting llvm::Function pass manager run.
37; MSSA-NEXT: Running pass: ADCEPass on f
38; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f
39; MSSA-NEXT: Running pass: FunctionToLoopPassAdaptor{{.*}} on f
40; MSSA-NEXT: Starting llvm::Function pass manager run.
41; MSSA-NEXT: Running pass: LoopSimplifyPass on f
42; MSSA-NEXT: Running analysis: LoopAnalysis on f
43; MSSA-NEXT: Running analysis: DominatorTreeAnalysis on f
44; MSSA-NEXT: Running analysis: AssumptionAnalysis on f
45; MSSA-NEXT: Running pass: LCSSAPass on f
46; MSSA-NEXT: Finished llvm::Function pass manager run.
47; MSSA-NEXT: Running analysis: MemorySSAAnalysis on f
48; MSSA-NEXT: Running analysis: AAManager on f
49; MSSA-NEXT: Running analysis: TargetLibraryAnalysis on f
50; MSSA-NEXT: Running analysis: ScalarEvolutionAnalysis on f
51; MSSA-NEXT: Running analysis: TargetIRAnalysis on f
52; MSSA-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f
53; MSSA-NEXT: Starting Loop pass manager run.
54; MSSA-NEXT: Running analysis: PassInstrumentationAnalysis on bb
55; MSSA-NEXT: Running pass: LoopRotatePass on Loop at depth 1 containing: %bb<header><exiting>,%bb4<latch>
56; MSSA-NEXT: Folding loop latch bb4 into bb
57; MSSA-NEXT: Invalidating all non-preserved analyses for: bb
58; MSSA-NEXT: Finished Loop pass manager run.
59; MSSA-NEXT: Invalidating all non-preserved analyses for: f
60; MSSA-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f
61; MSSA-NEXT: Running pass: ADCEPass on f
62; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f
63; MSSA-NEXT: Finished llvm::Function pass manager run.
64
65
Craig Topperbf6495f2017-11-15 00:22:42 +000066; CHECK-LABEL: define i8 @f() {
67; CHECK-NEXT : entry:
68; CHECK-NEXT : br label %bb
69; CHECK-NEXT :
70; CHECK-NEXT : bb: ; preds = %bb, %entry
71; CHECK-NEXT : %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]
72; CHECK-NEXT : %tmp5 = icmp eq i8 %mode.0, 1
73; CHECK-NEXT : %indvar.next = add i8 %mode.0, 1
74; CHECK-NEXT : br i1 %tmp5, label %bb5, label %bb
75; CHECK-NEXT :
76; CHECK-NEXT : bb5: ; preds = %bb
77; CHECK-NEXT : tail call void @raise_exception() #0
78; CHECK-NEXT : unreachable
79; CHECK-NEXT : }
80; CHECK-NEXT :
81; CHECK-NEXT : ; Function Attrs: noreturn
82; CHECK-NEXT : declare void @raise_exception() #0
83; CHECK-NEXT :
84; CHECK-NEXT : attributes #0 = { noreturn }
85
Alina Sbirleaad4d0182018-10-24 22:46:45 +000086; MSSA-LABEL: define i8 @f() {
87; MSSA-NEXT : entry:
88; MSSA-NEXT : br label %bb
89; MSSA-NEXT :
90; MSSA-NEXT : bb: ; preds = %bb, %entry
91; MSSA-NEXT : %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]
92; MSSA-NEXT : %tmp5 = icmp eq i8 %mode.0, 1
93; MSSA-NEXT : %indvar.next = add i8 %mode.0, 1
94; MSSA-NEXT : br i1 %tmp5, label %bb5, label %bb
95; MSSA-NEXT :
96; MSSA-NEXT : bb5: ; preds = %bb
97; MSSA-NEXT : tail call void @raise_exception() #0
98; MSSA-NEXT : unreachable
99; MSSA-NEXT : }
100; MSSA-NEXT :
101; MSSA-NEXT : ; Function Attrs: noreturn
102; MSSA-NEXT : declare void @raise_exception() #0
103; MSSA-NEXT :
104; MSSA-NEXT : attributes #0 = { noreturn }
105
Craig Topperbf6495f2017-11-15 00:22:42 +0000106define i8 @f() {
107entry:
108 br label %bb
109
110bb: ; preds = %bb4, %entry
111 %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb4 ]
112 %tmp5 = icmp eq i8 %mode.0, 1
113 br i1 %tmp5, label %bb5, label %bb4
114
115bb4: ; preds = %bb2
116 %indvar.next = add i8 %mode.0, 1
117 br label %bb
118
119bb5: ; preds = %bb2
120 tail call void @raise_exception() #0
121 unreachable
122}
123
124; Function Attrs: noreturn
125declare void @raise_exception() #0
126
127attributes #0 = { noreturn }