245 lines · plain
1; Test that the loop PM infrastructure is invalidated appropriately.2;3; Check that we always nuke the LPM stuff when the loops themselves are4; invalidated.5; RUN: opt -disable-output -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager -aa-pipeline= %s 2>&1 \6; RUN: -passes='loop(no-op-loop),invalidate<loops>,loop(no-op-loop)' \7; RUN: | FileCheck %s --check-prefix=CHECK-LOOP-INV8;9; If we ended up building the standard analyses, their invalidation should nuke10; stuff as well.11; RUN: opt -disable-output -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager %s -aa-pipeline= 2>&1 \12; RUN: -passes='loop(no-op-loop),invalidate<scalar-evolution>,loop(no-op-loop)' \13; RUN: | FileCheck %s --check-prefix=CHECK-SCEV-INV14;15; Also provide a test that can delete loops after populating analyses for them.16; RUN: opt -disable-output -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager %s -aa-pipeline= 2>&1 \17; RUN: -passes='loop(no-op-loop,loop-deletion),invalidate<scalar-evolution>,loop(no-op-loop)' \18; RUN: | FileCheck %s --check-prefix=CHECK-SCEV-INV-AFTER-DELETE19 20define void @no_loops() {21; CHECK-LOOP-INV: Running pass: LoopSimplifyPass22; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis23; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis24; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis25; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis26; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass27; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis28; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis29; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass30; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis31; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass32;33; CHECK-SCEV-INV: Running pass: LoopSimplifyPass34; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis35; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis36; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis37; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis38; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass39; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis40; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass41; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass42 43entry:44 ret void45}46 47define void @one_loop(ptr %ptr) {48; CHECK-LOOP-INV: Running pass: LoopSimplifyPass49; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis50; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis51; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis52; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis53; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass54; CHECK-LOOP-INV-NEXT: Running analysis: AAManager55; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis56; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis57; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop58; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass59; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis60; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>61; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis62; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis63; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop64; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass65; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis66; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass67; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis68; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop69; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass70;71; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass72; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis73; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis74; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis75; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis76; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass77; CHECK-SCEV-INV-NEXT: Running analysis: AAManager78; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis79; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis80; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop81; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass82; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis83; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>84; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis85; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop86; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass87; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass88; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis89; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop90; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass91 92entry:93 br label %l0.header94 95l0.header:96 %flag0 = load volatile i1, ptr %ptr97 br i1 %flag0, label %l0.header, label %exit98 99exit:100 ret void101}102 103define void @nested_loops(ptr %ptr) {104; CHECK-LOOP-INV: Running pass: LoopSimplifyPass105; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis106; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis107; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis108; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis109; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass110; CHECK-LOOP-INV-NEXT: Running analysis: AAManager111; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis112; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis113; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop114; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass115; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass116; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis117; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>118; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>119; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis120; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis121; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop122; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass123; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis124; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass125; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis126; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop127; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass128; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass129;130; CHECK-SCEV-INV: Running pass: LoopSimplifyPass131; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis132; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis133; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis134; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis135; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass136; CHECK-SCEV-INV-NEXT: Running analysis: AAManager137; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis138; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis139; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop140; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass141; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass142; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis143; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>144; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>145; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis146; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop147; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass148; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass149; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis150; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop151; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass152; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass153 154entry:155 br label %l.0.header156 157l.0.header:158 br label %l.0.0.header159 160l.0.0.header:161 %flag.0.0 = load volatile i1, ptr %ptr162 br i1 %flag.0.0, label %l.0.0.header, label %l.0.latch163 164l.0.latch:165 %flag.0 = load volatile i1, ptr %ptr166 br i1 %flag.0, label %l.0.header, label %exit167 168exit:169 ret void170}171 172define void @dead_loop() {173; CHECK-LOOP-INV: Running pass: LoopSimplifyPass174; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis175; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis176; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis177; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis178; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass179; CHECK-LOOP-INV-NEXT: Running analysis: AAManager180; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis181; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis182; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop183; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass184; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis185; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>186; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis187; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis188; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop189; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass190; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis191; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass192; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis193; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop194; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass195;196; CHECK-SCEV-INV: Running pass: LoopSimplifyPass197; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis198; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis199; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis200; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis201; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass202; CHECK-SCEV-INV-NEXT: Running analysis: AAManager203; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis204; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis205; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop206; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass207; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis208; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>209; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis210; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop211; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass212; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass213; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis214; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop215; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass216;217; CHECK-SCEV-INV-AFTER-DELETE-LABEL: Running pass: LoopSimplifyPass on dead_loop218; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: LoopAnalysis219; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: DominatorTreeAnalysis220; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AssumptionAnalysis221; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetIRAnalysis222; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass223; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AAManager224; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetLibraryAnalysis225; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: ScalarEvolutionAnalysis226; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop227; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: NoOpLoopPass228; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopDeletionPass229; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Clearing all analysis results for:230; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis231; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: ScalarEvolutionAnalysis232; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop233; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass234; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass235 236entry:237 br label %l0.header238 239l0.header:240 br i1 false, label %l0.header, label %exit241 242exit:243 ret void244}245