blob: de19a700a7125206a6188008eb05758ec3c84ffc [file] [log] [blame]
Arthur Eubanks9e6a1e52020-08-05 12:22:07 -07001;RUN: opt %s -passes='adce,loop(loop-rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate 2>&1 | FileCheck %s
2;RUN: opt %s -passes='adce,loop-mssa(loop-rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate -verify-memoryssa 2>&1 | FileCheck %s --check-prefix=MSSA
Eric Christophercee313d2019-04-17 04:52:47 +00003;REQUIRES: asserts
4
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
10; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f
Eric Christophercee313d2019-04-17 04:52:47 +000011; CHECK-NEXT: Starting llvm::Function pass manager run.
12; CHECK-NEXT: Running pass: LoopSimplifyPass on f
13; CHECK-NEXT: Running analysis: LoopAnalysis on f
14; CHECK-NEXT: Running analysis: DominatorTreeAnalysis on f
15; CHECK-NEXT: Running analysis: AssumptionAnalysis on f
16; CHECK-NEXT: Running pass: LCSSAPass on f
17; CHECK-NEXT: Finished llvm::Function pass manager run.
18; CHECK-NEXT: Running analysis: AAManager on f
19; CHECK-NEXT: Running analysis: TargetLibraryAnalysis on f
20; CHECK-NEXT: Running analysis: ScalarEvolutionAnalysis on f
21; CHECK-NEXT: Running analysis: TargetIRAnalysis on f
22; CHECK-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f
23; CHECK-NEXT: Starting Loop pass manager run.
Eric Christophercee313d2019-04-17 04:52:47 +000024; CHECK-NEXT: Running pass: LoopRotatePass on Loop at depth 1 containing: %bb<header><exiting>,%bb4<latch>
25; CHECK-NEXT: Folding loop latch bb4 into bb
Eric Christophercee313d2019-04-17 04:52:47 +000026; CHECK-NEXT: Finished Loop pass manager run.
Eric Christophercee313d2019-04-17 04:52:47 +000027; CHECK-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f
28; CHECK-NEXT: Running pass: ADCEPass on f
29; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f
30; CHECK-NEXT: Finished llvm::Function pass manager run.
31
32; MSSA: Starting llvm::Function pass manager run.
33; MSSA-NEXT: Running pass: ADCEPass on f
34; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f
Eric Christophercee313d2019-04-17 04:52:47 +000035; MSSA-NEXT: Starting llvm::Function pass manager run.
36; MSSA-NEXT: Running pass: LoopSimplifyPass on f
37; MSSA-NEXT: Running analysis: LoopAnalysis on f
38; MSSA-NEXT: Running analysis: DominatorTreeAnalysis on f
39; MSSA-NEXT: Running analysis: AssumptionAnalysis on f
40; MSSA-NEXT: Running pass: LCSSAPass on f
41; MSSA-NEXT: Finished llvm::Function pass manager run.
42; MSSA-NEXT: Running analysis: MemorySSAAnalysis on f
43; MSSA-NEXT: Running analysis: AAManager on f
44; MSSA-NEXT: Running analysis: TargetLibraryAnalysis on f
45; MSSA-NEXT: Running analysis: ScalarEvolutionAnalysis on f
46; MSSA-NEXT: Running analysis: TargetIRAnalysis on f
47; MSSA-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f
48; MSSA-NEXT: Starting Loop pass manager run.
Eric Christophercee313d2019-04-17 04:52:47 +000049; MSSA-NEXT: Running pass: LoopRotatePass on Loop at depth 1 containing: %bb<header><exiting>,%bb4<latch>
50; MSSA-NEXT: Folding loop latch bb4 into bb
Eric Christophercee313d2019-04-17 04:52:47 +000051; MSSA-NEXT: Finished Loop pass manager run.
Eric Christophercee313d2019-04-17 04:52:47 +000052; MSSA-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f
53; MSSA-NEXT: Running pass: ADCEPass on f
54; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f
55; MSSA-NEXT: Finished llvm::Function pass manager run.
56
Eric Christophercee313d2019-04-17 04:52:47 +000057; CHECK-LABEL: define i8 @f() {
Simon Pilgrim43d2fc72020-04-03 17:21:37 +010058; CHECK-NEXT: entry:
59; CHECK-NEXT: br label %bb
60; CHECK: bb: ; preds = %bb, %entry
61; CHECK-NEXT: %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]
62; CHECK-NEXT: %tmp5 = icmp eq i8 %mode.0, 1
63; CHECK-NEXT: %indvar.next = add i8 %mode.0, 1
64; CHECK-NEXT: br i1 %tmp5, label %bb5, label %bb
65; CHECK: bb5: ; preds = %bb
66; CHECK-NEXT: tail call void @raise_exception() #0
67; CHECK-NEXT: unreachable
68; CHECK-NEXT: }
69; CHECK: ; Function Attrs: noreturn
70; CHECK: declare void @raise_exception() #0
71; CHECK: attributes #0 = { noreturn }
Eric Christophercee313d2019-04-17 04:52:47 +000072
73; MSSA-LABEL: define i8 @f() {
Simon Pilgrim43d2fc72020-04-03 17:21:37 +010074; MSSA-NEXT: entry:
75; MSSA-NEXT: br label %bb
76; MSSA: bb: ; preds = %bb, %entry
77; MSSA-NEXT: %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]
78; MSSA-NEXT: %tmp5 = icmp eq i8 %mode.0, 1
79; MSSA-NEXT: %indvar.next = add i8 %mode.0, 1
80; MSSA-NEXT: br i1 %tmp5, label %bb5, label %bb
81; MSSA: bb5: ; preds = %bb
82; MSSA-NEXT: tail call void @raise_exception() #0
83; MSSA-NEXT: unreachable
84; MSSA-NEXT: }
85; MSSA: ; Function Attrs: noreturn
86; MSSA: declare void @raise_exception() #0
87; MSSA: attributes #0 = { noreturn }
Eric Christophercee313d2019-04-17 04:52:47 +000088
89define i8 @f() {
90entry:
91 br label %bb
92
93bb: ; preds = %bb4, %entry
94 %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb4 ]
95 %tmp5 = icmp eq i8 %mode.0, 1
96 br i1 %tmp5, label %bb5, label %bb4
97
98bb4: ; preds = %bb2
99 %indvar.next = add i8 %mode.0, 1
100 br label %bb
101
102bb5: ; preds = %bb2
103 tail call void @raise_exception() #0
104 unreachable
105}
106
107; Function Attrs: noreturn
108declare void @raise_exception() #0
109
110attributes #0 = { noreturn }