199 lines · plain
1; Basic test for the new LTO pipeline.2 3; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \4; RUN: -passes='lto<O1>' -S %s 2>&1 \5; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O16; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \7; RUN: -passes='lto<O1>' -S %s -passes-ep-full-link-time-optimization-early=no-op-module \8; RUN: -passes-ep-full-link-time-optimization-last=no-op-module 2>&1 \9; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-EP10; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \11; RUN: -passes='lto<O2>' -S %s 2>&1 \12; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ13; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \14; RUN: -passes='lto<O2>' -S %s -passes-ep-full-link-time-optimization-early=no-op-module \15; RUN: -passes-ep-full-link-time-optimization-last=no-op-module 2>&1 \16; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-EP17; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \18; RUN: -passes='lto<O3>' -S %s 2>&1 \19; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ20; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \21; RUN: -passes='lto<O3>' -S %s -passes-ep-vectorizer-start='no-op-function' 2>&1 \22; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-EP-VECTORIZER-START23; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \24; RUN: -passes='lto<O3>' -S %s -passes-ep-vectorizer-end='no-op-function' 2>&1 \25; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-EP-VECTORIZER-END26; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \27; RUN: -passes='lto<Os>' -S %s 2>&1 \28; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-OS,CHECK-O23SZ29; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \30; RUN: -passes='lto<Oz>' -S %s 2>&1 \31; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O23SZ32; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \33; RUN: -passes='lto<O3>' -S %s -passes-ep-peephole='no-op-function' 2>&1 \34; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-O23SZ,CHECK-EP-PEEPHOLE35 36; CHECK-EP: Running pass: NoOpModulePass37; CHECK-O: Running pass: CrossDSOCFIPass38; CHECK-O-NEXT: Running pass: OpenMPOptPass39; CHECK-O-NEXT: Running pass: GlobalDCEPass40; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass41; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Module42; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis43; CHECK-O23SZ-NEXT: Running pass: CallSiteSplittingPass on foo44; CHECK-O23SZ-NEXT: Running analysis: TargetLibraryAnalysis on foo45; CHECK-O23SZ-NEXT: Running analysis: TargetIRAnalysis on foo46; CHECK-O23SZ-NEXT: Running analysis: DominatorTreeAnalysis on foo47; CHECK-O23SZ-NEXT: PGOIndirectCallPromotion48; CHECK-O23SZ-NEXT: Running analysis: ProfileSummaryAnalysis49; CHECK-O23SZ-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis50; CHECK-O23SZ-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC51; CHECK-O23SZ-NEXT: Running analysis: LazyCallGraphAnalysis52; CHECK-O23SZ-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy53; CHECK-O23SZ-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>54; CHECK-O23SZ-NEXT: Running pass: PostOrderFunctionAttrsPass55; CHECK-O23SZ-NEXT: Running analysis: AAManager56; CHECK-O23SZ-NEXT: Running analysis: BasicAA57; CHECK-O23SZ-NEXT: Running analysis: AssumptionAnalysis on foo58; CHECK-O23SZ-NEXT: Running analysis: ScopedNoAliasAA59; CHECK-O23SZ-NEXT: Running analysis: TypeBasedAA60; CHECK-O23SZ-NEXT: Running analysis: OuterAnalysisManagerProxy61; CHECK-O23SZ-NEXT: Running pass: ArgumentPromotionPass62; CHECK-O23SZ-NEXT: Running pass: SROAPass63; CHECK-O23SZ-NEXT: Running pass: IPSCCPPass64; CHECK-O23SZ-NEXT: Running pass: CalledValuePropagationPass65; CHECK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass66; CHECK-O1-NEXT: Running analysis: LazyCallGraphAnalysis67; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis68; CHECK-O-NEXT: Running pass: GlobalSplitPass69; CHECK-O-NEXT: Running pass: WholeProgramDevirtPass70; CHECK-O-NEXT: Running pass: NoRecurseLTOInferencePass71; CHECK-O23SZ-NEXT: Running pass: CoroEarlyPass72; CHECK-O1-NEXT: Running pass: LowerTypeTestsPass73; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass74; CHECK-O23SZ-NEXT: Running pass: PromotePass75; CHECK-O23SZ-NEXT: Running pass: ConstantMergePass76; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass77; CHECK-O23SZ-NEXT: Running pass: InstCombinePass78; CHECK-O23SZ-NEXT: Running analysis: LastRunTrackingAnalysis79; CHECK-O23SZ-NEXT: Running pass: AggressiveInstCombinePass80; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass81; CHECK-O23SZ-NEXT: Running pass: ExpandVariadicsPass82; CHECK-O23SZ-NEXT: Running pass: ModuleInlinerWrapperPass83; CHECK-O23SZ-NEXT: Running analysis: InlineAdvisorAnalysis84; CHECK-O23SZ-NEXT: Running pass: InlinerPass85; CHECK-O23SZ-NEXT: Running pass: InlinerPass86; CHECK-O23SZ-NEXT: Invalidating analysis: InlineAdvisorAnalysis87; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass88; CHECK-O23SZ-NEXT: Running pass: OpenMPOptPass89; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass90; CHECK-O23SZ-NEXT: Running pass: ArgumentPromotionPass on (foo)91; CHECK-O23SZ-NEXT: CoroSplitPass on (foo)92; CHECK-O23SZ-NEXT: CoroAnnotationElidePass on (foo)93; CHECK-O23SZ-NEXT: Running pass: InstCombinePass94; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass95; CHECK-O23SZ-NEXT: Running pass: ConstraintEliminationPass96; CHECK-O23SZ-NEXT: Running analysis: LoopAnalysis on foo97; CHECK-O23SZ-NEXT: Running analysis: ScalarEvolutionAnalysis on foo98; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass99; CHECK-O23SZ-NEXT: Running analysis: LazyValueAnalysis100; CHECK-O23SZ-NEXT: Running pass: SROAPass on foo101; CHECK-O23SZ-NEXT: Running pass: TailCallElimPass on foo102; CHECK-O23SZ-NEXT: Running pass: PostOrderFunctionAttrsPass on (foo)103; CHECK-O23SZ-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA104; CHECK-O23SZ-NEXT: Running analysis: GlobalsAA on [module]105; CHECK-O23SZ-NEXT: Running analysis: CallGraphAnalysis on [module]106; CHECK-O23SZ-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager107; CHECK-O23SZ-NEXT: Invalidating analysis: AAManager on foo108; CHECK-O23SZ-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)109; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo110; CHECK-O23SZ-NEXT: Running pass: LCSSAPass on foo111; CHECK-O23SZ-NEXT: Running analysis: MemorySSAAnalysis on foo112; CHECK-O23SZ-NEXT: Running analysis: AAManager on foo113; CHECK-O23SZ-NEXT: Running analysis: InnerAnalysisManagerProxy114; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop115; CHECK-O23SZ-NEXT: Running pass: GVNPass on foo116; CHECK-O23SZ-NEXT: Running analysis: MemoryDependenceAnalysis on foo117; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass on foo118; CHECK-O23SZ-NEXT: Running analysis: PostDominatorTreeAnalysis on foo119; CHECK-O23SZ-NEXT: Running pass: DSEPass on foo120; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo121; CHECK-O23SZ-NEXT: Running pass: MergedLoadStoreMotionPass on foo122; CHECK-EP-VECTORIZER-START-NEXT: Running pass: NoOpFunctionPass on foo123; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo124; CHECK-O23SZ-NEXT: Running pass: LCSSAPass on foo125; CHECK-O23SZ-NEXT: Running pass: IndVarSimplifyPass on loop126; CHECK-O23SZ-NEXT: Running pass: LoopDeletionPass on loop127; CHECK-O23SZ-NEXT: Running pass: LoopFullUnrollPass on loop128; CHECK-O23SZ-NEXT: Running pass: LoopDistributePass on foo129; CHECK-O23SZ-NEXT: Running analysis: LoopAccessAnalysis on foo130; CHECK-O23SZ-NEXT: Running pass: LoopVectorizePass on foo131; CHECK-O23SZ-NEXT: Running analysis: DemandedBitsAnalysis on foo132; CHECK-O23SZ-NEXT: Running pass: DropUnnecessaryAssumesPass on foo133; CHECK-O23SZ-NEXT: Running pass: InferAlignmentPass on foo134; CHECK-O23SZ-NEXT: Running pass: LoopUnrollPass on foo135; CHECK-O23SZ-NEXT: WarnMissedTransformationsPass on foo136; CHECK-O23SZ-NEXT: Running pass: SROAPass on foo137; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo138; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass on foo139; CHECK-O23SZ-NEXT: Running pass: SCCPPass on foo140; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo141; CHECK-O23SZ-NEXT: Running pass: BDCEPass on foo142; CHECK-O2-NEXT: Running pass: SLPVectorizerPass on foo143; CHECK-O3-NEXT: Running pass: SLPVectorizerPass on foo144; CHECK-OS-NEXT: Running pass: SLPVectorizerPass on foo145; CHECK-O23SZ-NEXT: Running pass: VectorCombinePass on foo146; CHECK-O23SZ-NEXT: Running pass: InferAlignmentPass on foo147; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo148; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass149; CHECK-O23SZ-NEXT: Running pass: LCSSAPass150; CHECK-O23SZ-NEXT: Running pass: LICMPass151; CHECK-O23SZ-NEXT: Running pass: AlignmentFromAssumptionsPass on foo152; CHECK-EP-VECTORIZER-END-NEXT: Running pass: NoOpFunctionPass on foo153; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass on foo154; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass on foo155; CHECK-O23SZ-NEXT: Running pass: LowerTypeTestsPass156; CHECK-O-NEXT: Running pass: LowerTypeTestsPass157; CHECK-O23SZ-NEXT: Running pass: LoopSink158; CHECK-O23SZ-NEXT: Running pass: DivRemPairs159; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass160; CHECK-O23SZ-NEXT: Running pass: EliminateAvailableExternallyPass161; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass162; CHECK-O23SZ-NEXT: Running pass: RelLookupTableConverterPass163; CHECK-O23SZ-NEXT: Running pass: CGProfilePass164; CHECK-O1-NEXT: Running pass: CoroConditionalWrapper165; CHECK-O23SZ-NEXT: Running pass: CoroCleanupPass166; CHECK-EP-NEXT: Running pass: NoOpModulePass167; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo168; CHECK-O-NEXT: Running pass: PrintModulePass169 170; Make sure we get the IR back out without changes when we print the module.171; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr {172; CHECK-O-NEXT: entry:173; CHECK-O-NEXT: br label %loop174; CHECK-O: loop:175; CHECK-O-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]176; CHECK-O-NEXT: %iv.next = add i32 %iv, 1177; CHECK-O-NEXT: tail call void @bar()178; CHECK-O-NEXT: %cmp = icmp eq i32 %iv, %n179; CHECK-O-NEXT: br i1 %cmp, label %exit, label %loop180; CHECK-O: exit:181; CHECK-O-NEXT: ret void182; CHECK-O-NEXT: }183;184 185declare void @bar() local_unnamed_addr186 187define void @foo(i32 %n) local_unnamed_addr {188entry:189 br label %loop190loop:191 %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]192 %iv.next = add i32 %iv, 1193 tail call void @bar()194 %cmp = icmp eq i32 %iv, %n195 br i1 %cmp, label %exit, label %loop196exit:197 ret void198}199