99 lines · plain
1;RUN: opt %s -aa-pipeline= -passes='adce,loop(loop-rotate),adce' -S -verify-analysis-invalidation=0 -debug-pass-manager -debug-only=loop-rotate 2>&1 | FileCheck %s2;RUN: opt %s -aa-pipeline= -passes='adce,loop-mssa(loop-rotate),adce' -S -verify-analysis-invalidation=0 -debug-pass-manager -debug-only=loop-rotate -verify-memoryssa 2>&1 | FileCheck %s --check-prefix=MSSA3;REQUIRES: asserts4 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: Running pass: ADCEPass on f9; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f10; CHECK-NEXT: Running pass: LoopSimplifyPass on f11; CHECK-NEXT: Running analysis: LoopAnalysis on f12; CHECK-NEXT: Running analysis: DominatorTreeAnalysis on f13; CHECK-NEXT: Running analysis: AssumptionAnalysis on f14; CHECK-NEXT: Running analysis: TargetIRAnalysis on f15; CHECK-NEXT: Running pass: LCSSAPass on f16; CHECK-NEXT: Running analysis: AAManager on f17; CHECK-NEXT: Running analysis: TargetLibraryAnalysis on f18; CHECK-NEXT: Running analysis: ScalarEvolutionAnalysis on f19; CHECK-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f20; CHECK-NEXT: Running pass: LoopRotatePass on loop %bb in function f21; CHECK-NEXT: Folding loop latch bb4 into bb22; CHECK-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f23; CHECK-NEXT: Running pass: ADCEPass on f24; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f25 26; MSSA: Running pass: ADCEPass on f27; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f28; MSSA-NEXT: Running pass: LoopSimplifyPass on f29; MSSA-NEXT: Running analysis: LoopAnalysis on f30; MSSA-NEXT: Running analysis: DominatorTreeAnalysis on f31; MSSA-NEXT: Running analysis: AssumptionAnalysis on f32; MSSA-NEXT: Running analysis: TargetIRAnalysis on f33; MSSA-NEXT: Running pass: LCSSAPass on f34; MSSA-NEXT: Running analysis: MemorySSAAnalysis on f35; MSSA-NEXT: Running analysis: AAManager on f36; MSSA-NEXT: Running analysis: TargetLibraryAnalysis on f37; MSSA-NEXT: Running analysis: ScalarEvolutionAnalysis on f38; MSSA-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f39; MSSA-NEXT: Running pass: LoopRotatePass on loop %bb in function f40; MSSA-NEXT: Folding loop latch bb4 into bb41; MSSA-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f42; MSSA-NEXT: Running pass: ADCEPass on f43; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f44 45; CHECK-LABEL: define i8 @f() {46; CHECK-NEXT: entry:47; CHECK-NEXT: br label %bb48; CHECK: bb: ; preds = %bb, %entry49; CHECK-NEXT: %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]50; CHECK-NEXT: %tmp5 = icmp eq i8 %mode.0, 151; CHECK-NEXT: %indvar.next = add i8 %mode.0, 152; CHECK-NEXT: br i1 %tmp5, label %bb5, label %bb53; CHECK: bb5: ; preds = %bb54; CHECK-NEXT: tail call void @raise_exception() #055; CHECK-NEXT: unreachable56; CHECK-NEXT: }57; CHECK: ; Function Attrs: noreturn58; CHECK: declare void @raise_exception() #059; CHECK: attributes #0 = { noreturn }60 61; MSSA-LABEL: define i8 @f() {62; MSSA-NEXT: entry:63; MSSA-NEXT: br label %bb64; MSSA: bb: ; preds = %bb, %entry65; MSSA-NEXT: %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ]66; MSSA-NEXT: %tmp5 = icmp eq i8 %mode.0, 167; MSSA-NEXT: %indvar.next = add i8 %mode.0, 168; MSSA-NEXT: br i1 %tmp5, label %bb5, label %bb69; MSSA: bb5: ; preds = %bb70; MSSA-NEXT: tail call void @raise_exception() #071; MSSA-NEXT: unreachable72; MSSA-NEXT: }73; MSSA: ; Function Attrs: noreturn74; MSSA: declare void @raise_exception() #075; MSSA: attributes #0 = { noreturn }76 77define i8 @f() {78entry:79 br label %bb80 81bb: ; preds = %bb4, %entry82 %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb4 ]83 %tmp5 = icmp eq i8 %mode.0, 184 br i1 %tmp5, label %bb5, label %bb485 86bb4: ; preds = %bb287 %indvar.next = add i8 %mode.0, 188 br label %bb89 90bb5: ; preds = %bb291 tail call void @raise_exception() #092 unreachable93}94 95; Function Attrs: noreturn96declare void @raise_exception() #097 98attributes #0 = { noreturn }99