mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
1e1573359c
This version of the patch fixes cleaning up ssa_copy intrinsics, so it does not crash for instructions in blocks that have been marked unreachable. This patch updates IPSCCP to use PredicateInfo to propagate facts to true branches predicated by EQ and to false branches predicated by NE. As a follow up, we should be able to extend it to also propagate additional facts about nonnull. Reviewers: davide, mssimpso, dberlin, efriedma Reviewed By: davide, dberlin Differential Revision: https://reviews.llvm.org/D45330 llvm-svn: 340525
124 lines
6.0 KiB
LLVM
124 lines
6.0 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-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-O2 \
|
|
; 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-O2
|
|
; 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-O2
|
|
; 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-O2 \
|
|
; RUN: --check-prefix=CHECK-O3 --check-prefix=CHECK-EP-Peephole
|
|
|
|
; CHECK-O: Starting llvm::Module pass manager run.
|
|
; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module
|
|
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
|
|
; CHECK-O-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
|
|
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
|
; CHECK-O2-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Module
|
|
; CHECK-O2-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O2-NEXT: Running pass: CallSiteSplittingPass on foo
|
|
; CHECK-O2-NEXT: Running analysis: TargetLibraryAnalysis on foo
|
|
; CHECK-O2-NEXT: Running analysis: TargetIRAnalysis on foo
|
|
; CHECK-O2-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O2-NEXT: PGOIndirectCallPromotion
|
|
; CHECK-O2-NEXT: Running analysis: ProfileSummaryAnalysis
|
|
; CHECK-O2-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
|
; CHECK-O2-NEXT: Running pass: IPSCCPPass
|
|
; CHECK-O2-DAG: Running analysis: AssumptionAnalysis on foo
|
|
; CHECK-O2-DAG: Running analysis: DominatorTreeAnalysis on foo
|
|
; CHECK-O2-NEXT: Running pass: CalledValuePropagationPass
|
|
; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}PostOrderFunctionAttrsPass>
|
|
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC
|
|
; CHECK-O1-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Function
|
|
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
|
|
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
|
|
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
|
|
; CHECK-O-NEXT: Running analysis: AAManager
|
|
; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; 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-O2-NEXT: Running pass: GlobalOptPass
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass>
|
|
; CHECK-O2-NEXT: Running pass: ConstantMergePass
|
|
; CHECK-O2-NEXT: Running pass: DeadArgumentEliminationPass
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
|
; CHECK-O2-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass
|
|
; CHECK-O2-NEXT: Running pass: InstCombinePass
|
|
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
|
|
; CHECK-O2-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O2-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}InlinerPass>
|
|
; CHECK-O2-NEXT: Running pass: GlobalOptPass
|
|
; CHECK-O2-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
|
; CHECK-O2-NEXT: Starting llvm::Function pass manager run.
|
|
; CHECK-O2-NEXT: Running pass: InstCombinePass
|
|
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
|
|
; CHECK-O2-NEXT: Running pass: JumpThreadingPass
|
|
; CHECK-O2-NEXT: Running analysis: LazyValueAnalysis
|
|
; CHECK-O2-NEXT: Running pass: SROA on foo
|
|
; CHECK-O2-NEXT: Finished llvm::Function pass manager run.
|
|
; CHECK-O2-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}PostOrderFunctionAttrsPass>
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
|
; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis
|
|
; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis
|
|
; CHECK-O2-NEXT: Running analysis: DemandedBitsAnalysis
|
|
; CHECK-O2-NEXT: Running pass: CrossDSOCFIPass
|
|
; CHECK-O2-NEXT: Running pass: LowerTypeTestsPass
|
|
; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}SimplifyCFGPass>
|
|
; CHECK-O2-NEXT: Running pass: EliminateAvailableExternallyPass
|
|
; CHECK-O2-NEXT: Running pass: GlobalDCEPass
|
|
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
|
|
; 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
|
|
}
|