mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
0e6287fa19
The NPM LTO pipeline has a lot of fixme's and missing passes, causing a lot of regressions after the switch in c70737b. Notably unrolling and vectorization were both disabled, but many other passes are missing compared to the old pass manager. This attempt to enable the most obvious missing passes like the unroller, vectorization and other loop passes, fixing the existing FIXME comments. Differential Revision: https://reviews.llvm.org/D96780
175 lines
8.7 KiB
LLVM
175 lines
8.7 KiB
LLVM
; Basic test for the new LTO pipeline.
|
|
; For now the only difference is between -O1 and everything else, so
|
|
; -O2, -O3, -Os, -Oz are the same.
|
|
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<O1>' -S %s 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O1
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<O2>' -S %s 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O23SZ \
|
|
; RUN: --check-prefix=CHECK-O2
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<O3>' -S %s 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O23SZ \
|
|
; RUN: --check-prefix=CHECK-O3
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<Os>' -S %s 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O23SZ \
|
|
; RUN: --check-prefix=CHECK-OS
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<Oz>' -S %s 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O23SZ
|
|
; RUN: opt -disable-verify -debug-pass-manager \
|
|
; RUN: -passes='lto<O3>' -S %s -passes-ep-peephole='no-op-function' 2>&1 \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O23SZ \
|
|
; RUN: --check-prefix=CHECK-O3 --check-prefix=CHECK-EP-Peephole
|
|
|
|
; CHECK-O: Starting llvm::Module pass manager run.
|
|
; CHECK-O-NEXT: Running pass: Annotation2Metadata
|
|
; CHECK-O-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Module
|
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-O23SZ-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: CallSiteSplittingPass on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: TargetLibraryAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: TargetIRAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: DominatorTreeAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: PGOIndirectCallPromotion
|
|
; CHECK-O23SZ-NEXT: Running analysis: ProfileSummaryAnalysis
|
|
; CHECK-O23SZ-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
|
; CHECK-O23SZ-NEXT: Running pass: IPSCCPPass
|
|
; CHECK-O23SZ-NEXT: Running analysis: AssumptionAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: CalledValuePropagationPass
|
|
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC
|
|
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
|
|
; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
|
|
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
|
|
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running analysis: AAManager
|
|
; CHECK-O-NEXT: Running analysis: BasicAA
|
|
; CHECK-O1-NEXT: Running analysis: AssumptionAnalysis on foo
|
|
; CHECK-O1-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-O-NEXT: Running analysis: ScopedNoAliasAA
|
|
; CHECK-O-NEXT: Running analysis: TypeBasedAA
|
|
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
|
|
; CHECK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
|
|
; CHECK-O-NEXT: Running pass: GlobalSplitPass
|
|
; CHECK-O-NEXT: Running pass: WholeProgramDevirtPass
|
|
; CHECK-O1-NEXT: Running pass: LowerTypeTestsPass
|
|
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
|
|
; CHECK-O23SZ-NEXT: Running pass: PromotePass
|
|
; CHECK-O23SZ-NEXT: Running pass: ConstantMergePass
|
|
; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass
|
|
; CHECK-O23SZ-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass
|
|
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
|
|
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
|
|
; CHECK-O23SZ-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: ModuleInlinerWrapperPass
|
|
; CHECK-O23SZ-NEXT: Running analysis: InlineAdvisorAnalysis
|
|
; CHECK-O23SZ-NEXT: Starting llvm::Module pass manager run.
|
|
; CHECK-O23SZ-NEXT: Starting CGSCC pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: InlinerPass
|
|
; CHECK-O23SZ-NEXT: Running pass: InlinerPass
|
|
; CHECK-O23SZ-NEXT: Finished CGSCC pass manager run.
|
|
; CHECK-O23SZ-NEXT: Finished llvm::Module pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
|
|
; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O23SZ-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
|
|
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
|
|
; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass
|
|
; CHECK-O23SZ-NEXT: Running analysis: LazyValueAnalysis
|
|
; CHECK-O23SZ-NEXT: Running pass: SROA on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: TailCallElimPass on foo
|
|
; CHECK-O23SZ-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: PostOrderFunctionAttrsPass on (foo)
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: LoopAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: LCSSAPass on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: ScalarEvolutionAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: InnerAnalysisManagerProxy
|
|
; CHECK-O23SZ-NEXT: Running pass: LICMPass on Loop
|
|
; CHECK-O23SZ-NEXT: Running pass: GVN on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: MemoryDependenceAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: PhiValuesAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: DSEPass on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: MemorySSAAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: MergedLoadStoreMotionPass on foo
|
|
; CHECK-O23SZ-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: LCSSAPass on foo
|
|
; CHECK-O23SZ-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O23SZ-NEXT: Starting Loop pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: IndVarSimplifyPass on Loop
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopDeletionPass on Loop
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopFullUnrollPass on Loop
|
|
; CHECK-O23SZ-NEXT: Finished Loop pass manager run.
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopDistributePass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopVectorizePass on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: BlockFrequencyAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: BranchProbabilityAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running analysis: DemandedBitsAnalysis on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: LoopUnrollPass on foo
|
|
; CHECK-O23SZ-NEXT: WarnMissedTransformationsPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: SCCPPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: BDCEPass on foo
|
|
; CHECK-O2-NEXT: Running pass: SLPVectorizerPass on foo
|
|
; CHECK-O3-NEXT: Running pass: SLPVectorizerPass on foo
|
|
; CHECK-OS-NEXT: Running pass: SLPVectorizerPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: VectorCombinePass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: AlignmentFromAssumptionsPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo
|
|
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass on foo
|
|
; CHECK-O23SZ-NEXT: Running pass: CrossDSOCFIPass
|
|
; CHECK-O23SZ-NEXT: Running pass: LowerTypeTestsPass
|
|
; CHECK-O-NEXT: Running pass: LowerTypeTestsPass
|
|
; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass
|
|
; CHECK-O23SZ-NEXT: Running pass: EliminateAvailableExternallyPass
|
|
; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo
|
|
; CHECK-O-NEXT: Running pass: PrintModulePass
|
|
|
|
; Make sure we get the IR back out without changes when we print the module.
|
|
; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr {
|
|
; CHECK-O-NEXT: entry:
|
|
; CHECK-O-NEXT: br label %loop
|
|
; CHECK-O: loop:
|
|
; CHECK-O-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
|
|
; CHECK-O-NEXT: %iv.next = add i32 %iv, 1
|
|
; CHECK-O-NEXT: tail call void @bar()
|
|
; CHECK-O-NEXT: %cmp = icmp eq i32 %iv, %n
|
|
; CHECK-O-NEXT: br i1 %cmp, label %exit, label %loop
|
|
; CHECK-O: exit:
|
|
; CHECK-O-NEXT: ret void
|
|
; CHECK-O-NEXT: }
|
|
;
|
|
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
|
|
|
|
declare void @bar() local_unnamed_addr
|
|
|
|
define void @foo(i32 %n) local_unnamed_addr {
|
|
entry:
|
|
br label %loop
|
|
loop:
|
|
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
|
|
%iv.next = add i32 %iv, 1
|
|
tail call void @bar()
|
|
%cmp = icmp eq i32 %iv, %n
|
|
br i1 %cmp, label %exit, label %loop
|
|
exit:
|
|
ret void
|
|
}
|