230 lines · plain
1; The IR below was crafted so as:2; 1) To have a loop, so we create a loop pass manager3; 2) To be "immutable" in the sense that no pass in the standard4; pipeline will modify it.5; Since no transformations take place, we don't expect any analyses6; to be invalidated.7; Any invalidation that shows up here is a bug, unless we started modifying8; the IR, in which case we need to make it immutable harder.9;10; Prelink pipelines:11; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \12; RUN: -passes='thinlto-pre-link<O1>' -S %s 2>&1 \13; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-O-NODIS14; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \15; RUN: -unified-lto -passes='lto-pre-link<O1>' -S %s 2>&1 \16; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-O-NODIS17; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \18; RUN: -passes='thinlto-pre-link<O2>' -S %s 2>&1 \19; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-O-NODIS20; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \21; RUN: -unified-lto -passes='lto-pre-link<O2>' -S %s 2>&1 \22; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-O-NODIS23; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \24; RUN: -passes='thinlto-pre-link<O3>' -S -passes-ep-pipeline-start='no-op-module' %s 2>&1 \25; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-PIPELINE-START26; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \27; RUN: -unified-lto -passes='lto-pre-link<O3>' -S -passes-ep-pipeline-start='no-op-module' %s 2>&1 \28; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-PIPELINE-START29; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \30; RUN: -passes='thinlto-pre-link<O3>' -S -passes-ep-optimizer-early='no-op-module' %s 2>&1 \31; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-OPT-EARLY32; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \33; RUN: -unified-lto -passes='lto-pre-link<O3>' -S -passes-ep-optimizer-early='no-op-module' %s 2>&1 \34; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-OPT-EARLY35; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \36; RUN: -passes='thinlto-pre-link<O3>' -S -passes-ep-optimizer-last='no-op-module' %s 2>&1 \37; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-OPT-LAST38; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \39; RUN: -unified-lto -passes='lto-pre-link<O3>' -S -passes-ep-optimizer-last='no-op-module' %s 2>&1 \40; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-O-NODIS,CHECK-EP-OPT-LAST41; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \42; RUN: -passes='thinlto-pre-link<Os>' -S %s 2>&1 \43; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O23SZ,CHECK-O-NODIS44; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \45; RUN: -unified-lto -passes='lto-pre-link<Os>' -S %s 2>&1 \46; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O23SZ,CHECK-O-NODIS47; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \48; RUN: -passes='thinlto-pre-link<Oz>' -S %s 2>&1 \49; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O23SZ,CHECK-O-NODIS50; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \51; RUN: -unified-lto -passes='lto-pre-link<Oz>' -S %s 2>&1 \52; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O23SZ,CHECK-O-NODIS53; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager -debug-info-for-profiling \54; RUN: -passes='thinlto-pre-link<O2>' -S %s 2>&1 \55; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-O23SZ56; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager -debug-info-for-profiling \57; RUN: -unified-lto -passes='lto-pre-link<O2>' -S %s 2>&1 \58; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-O23SZ59;60 61; Suppress FileCheck --allow-unused-prefixes=false diagnostics.62; CHECK-NOEXT: {{^}}63 64; CHECK-O: Running pass: Annotation2MetadataPass65; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass66; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass67; CHECK-DIS-NEXT: Running analysis: InnerAnalysisManagerProxy68; CHECK-DIS-NEXT: Running pass: AddDiscriminatorsPass69; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass70; CHECK-O-NODIS-NEXT: Running analysis: InnerAnalysisManagerProxy71; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis72; CHECK-O-NEXT: Running pass: CoroEarlyPass73; CHECK-O-NEXT: Running pass: EntryExitInstrumenterPass74; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass75; CHECK-O-NEXT: Running pass: SimplifyCFGPass76; CHECK-O-NEXT: Running analysis: TargetIRAnalysis77; CHECK-O-NEXT: Running analysis: AssumptionAnalysis78; CHECK-O-NEXT: Running pass: SROAPass79; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis80; CHECK-O-NEXT: Running pass: EarlyCSEPass81; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis82; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass83; CHECK-O-NEXT: Running pass: OpenMPOptPass84; CHECK-O-NEXT: Running pass: IPSCCPPass85; CHECK-O-NEXT: Running pass: CalledValuePropagationPass86; CHECK-O-NEXT: Running pass: GlobalOptPass87; CHECK-O-NEXT: Running pass: PromotePass88; CHECK-O-NEXT: Running pass: InstCombinePass89; CHECK-O-NEXT: Running analysis: LastRunTrackingAnalysis90; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis91; CHECK-O-NEXT: Running analysis: AAManager92; CHECK-O-NEXT: Running analysis: BasicAA93; CHECK-O-NEXT: Running analysis: ScopedNoAliasAA94; CHECK-O-NEXT: Running analysis: TypeBasedAA95; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy96; CHECK-O-NEXT: Running pass: SimplifyCFGPass97; CHECK-O-NEXT: Running pass: AlwaysInlinerPass98; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis99; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass100; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis101; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA102; CHECK-O-NEXT: Running analysis: GlobalsAA103; CHECK-O-NEXT: Running analysis: CallGraphAnalysis104; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager105; CHECK-O-NEXT: Invalidating analysis: AAManager106; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis107; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy108; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis109; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy110; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy111; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass112; CHECK-O-NEXT: Running pass: InlinerPass113; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass114; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass115; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)116; CHECK-O3-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)117; CHECK-O-NEXT: Running pass: SROAPass118; CHECK-O-NEXT: Running pass: EarlyCSEPass119; CHECK-O-NEXT: Running analysis: MemorySSAAnalysis120; CHECK-O-NEXT: Running analysis: AAManager121; CHECK-O23SZ-NEXT: Running pass: SpeculativeExecutionPass122; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass123; CHECK-O23SZ-NEXT: Running analysis: LazyValueAnalysis124; CHECK-O23SZ-NEXT: Running pass: CorrelatedValuePropagationPass125; CHECK-O23SZ-NEXT: Invalidating analysis: LazyValueAnalysis126; CHECK-O-NEXT: Running pass: SimplifyCFGPass127; CHECK-O-NEXT: Running pass: InstCombinePass128; CHECK-O23SZ-NEXT: Running pass: AggressiveInstCombinePass129; CHECK-O1-NEXT: Running pass: LibCallsShrinkWrapPass130; CHECK-O2-NEXT: Running pass: LibCallsShrinkWrapPass131; CHECK-O3-NEXT: Running pass: LibCallsShrinkWrapPass132; CHECK-O23SZ-NEXT: Running pass: TailCallElimPass133; CHECK-O-NEXT: Running pass: SimplifyCFGPass134; CHECK-O-NEXT: Running pass: ReassociatePass135; CHECK-O23SZ-NEXT: Running pass: ConstraintEliminationPass136; CHECK-O23SZ-NEXT: Running analysis: LoopAnalysis137; CHECK-O23SZ-NEXT: Running analysis: ScalarEvolutionAnalysis138; CHECK-O-NEXT: Running pass: LoopSimplifyPass139; CHECK-O1-NEXT: Running analysis: LoopAnalysis140; CHECK-O-NEXT: Running pass: LCSSAPass141; CHECK-O1-NEXT: Running analysis: ScalarEvolutionAnalysis142; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy143; CHECK-O-NEXT: Running pass: LoopInstSimplifyPass144; CHECK-O-NEXT: Running pass: LoopSimplifyCFGPass145; CHECK-O-NEXT: Running pass: LICM146; CHECK-O-NEXT: Running pass: LoopRotatePass147; CHECK-O-NEXT: Running pass: LICM148; CHECK-O-NEXT: Running pass: SimpleLoopUnswitchPass149; CHECK-O-NEXT: Running pass: SimplifyCFGPass150; CHECK-O-NEXT: Running pass: InstCombinePass151; CHECK-O-NEXT: Running pass: LoopSimplifyPass152; CHECK-O-NEXT: Running pass: LCSSAPass153; CHECK-O-NEXT: Running pass: LoopIdiomRecognizePass154; CHECK-O-NEXT: Running pass: IndVarSimplifyPass155; CHECK-O-NEXT: Running pass: LoopDeletionPass156; CHECK-O-NEXT: Running pass: LoopFullUnrollPass157; CHECK-O-NEXT: Running pass: SROAPass on foo158; CHECK-O23SZ-NEXT: Running pass: VectorCombinePass159; CHECK-O23SZ-NEXT: Running pass: MergedLoadStoreMotionPass160; CHECK-O23SZ-NEXT: Running pass: GVNPass161; CHECK-O23SZ-NEXT: Running analysis: MemoryDependenceAnalysis162; CHECK-O1-NEXT: Running pass: MemCpyOptPass163; CHECK-O1-NEXT: Running analysis: PostDominatorTreeAnalysis164; CHECK-O-NEXT: Running pass: SCCPPass165; CHECK-O-NEXT: Running pass: BDCEPass166; CHECK-O-NEXT: Running analysis: DemandedBitsAnalysis167; CHECK-O-NEXT: Running pass: InstCombinePass168; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass169; CHECK-O23SZ-NEXT: Running analysis: LazyValueAnalysis170; CHECK-O23SZ-NEXT: Running pass: CorrelatedValuePropagationPass171; CHECK-O23SZ-NEXT: Invalidating analysis: LazyValueAnalysis172; CHECK-O1-NEXT: Running pass: CoroElidePass173; CHECK-O-NEXT: Running pass: ADCEPass174; CHECK-O23SZ-NEXT: Running analysis: PostDominatorTreeAnalysis175; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass176; CHECK-O23SZ-NEXT: Running pass: DSEPass177; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass178; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass179; CHECK-O23SZ-NEXT: Running pass: LCSSAPass180; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop181; CHECK-O23SZ-NEXT: Running pass: CoroElidePass182; CHECK-O-NEXT: Running pass: SimplifyCFGPass183; CHECK-O-NEXT: Running pass: InstCombinePass184; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass185; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis186; CHECK-O-NEXT: Running analysis: ShouldNotRunFunctionPassesAnalysis187; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis188; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis189; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis190; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass191; CHECK-O-NEXT: Running pass: GlobalOptPass192; CHECK-O-NEXT: Running pass: GlobalDCEPass193; CHECK-EXT: Running pass: {{.*}}::Bye194; CHECK-EP-OPT-EARLY-NEXT: Running pass: NoOpModulePass195; CHECK-EP-OPT-LAST-NEXT: Running pass: NoOpModulePass196; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo197; CHECK-O-NEXT: Running pass: CanonicalizeAliasesPass198; CHECK-O-NEXT: Running pass: NameAnonGlobalPass199; CHECK-O-NEXT: Running pass: PrintModulePass200 201; Make sure we get the IR back out without changes when we print the module.202; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr {203; CHECK-O-NEXT: entry:204; CHECK-O-NEXT: br label %loop205; CHECK-O: loop:206; CHECK-O-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]207; CHECK-O-NEXT: %iv.next = add i32 %iv, 1208; CHECK-O-NEXT: tail call void @bar()209; CHECK-O-NEXT: %cmp = icmp eq i32 %iv, %n210; CHECK-O-NEXT: br i1 %cmp, label %exit, label %loop211; CHECK-O: exit:212; CHECK-O-NEXT: ret void213; CHECK-O-NEXT: }214;215 216declare void @bar() local_unnamed_addr217 218define void @foo(i32 %n) local_unnamed_addr {219entry:220 br label %loop221loop:222 %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]223 %iv.next = add i32 %iv, 1224 tail call void @bar()225 %cmp = icmp eq i32 %iv, %n226 br i1 %cmp, label %exit, label %loop227exit:228 ret void229}230