diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /test/Other | |
parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
download | src-044eb2f6afba375a914ac9d8024f8f5142bb912e.tar.gz src-044eb2f6afba375a914ac9d8024f8f5142bb912e.zip |
Vendor import of llvm trunk r321017:vendor/llvm/llvm-trunk-r321017
Notes
Notes:
svn path=/vendor/llvm/dist/; revision=326938
svn path=/vendor/llvm/llvm-trunk-r321017/; revision=326939; tag=vendor/llvm/llvm-trunk-r321017
Diffstat (limited to 'test/Other')
-rw-r--r-- | test/Other/Inputs/new-pm-pgo.prof | 1 | ||||
-rw-r--r-- | test/Other/Inputs/new-pm-pgo.proftext | 1 | ||||
-rw-r--r-- | test/Other/can-execute.txt | 7 | ||||
-rw-r--r-- | test/Other/cgscc-disconnected-invalidation.ll | 54 | ||||
-rw-r--r-- | test/Other/cgscc-libcall-update.ll | 19 | ||||
-rw-r--r-- | test/Other/invariant.group.barrier.ll | 20 | ||||
-rw-r--r-- | test/Other/lit-globbing.ll | 57 | ||||
-rw-r--r-- | test/Other/loop-pass-printer.ll | 77 | ||||
-rw-r--r-- | test/Other/loop-pm-invalidation.ll | 16 | ||||
-rw-r--r-- | test/Other/new-pass-manager.ll | 2 | ||||
-rw-r--r-- | test/Other/new-pm-defaults.ll | 16 | ||||
-rw-r--r-- | test/Other/new-pm-lto-defaults.ll | 18 | ||||
-rw-r--r-- | test/Other/new-pm-pgo.ll | 31 | ||||
-rw-r--r-- | test/Other/new-pm-thinlto-defaults.ll | 41 | ||||
-rw-r--r-- | test/Other/pass-pipelines.ll | 4 | ||||
-rw-r--r-- | test/Other/print-module-scope.ll | 55 |
16 files changed, 343 insertions, 76 deletions
diff --git a/test/Other/Inputs/new-pm-pgo.prof b/test/Other/Inputs/new-pm-pgo.prof new file mode 100644 index 000000000000..4642cb92648c --- /dev/null +++ b/test/Other/Inputs/new-pm-pgo.prof @@ -0,0 +1 @@ +foo:0:0 diff --git a/test/Other/Inputs/new-pm-pgo.proftext b/test/Other/Inputs/new-pm-pgo.proftext new file mode 100644 index 000000000000..04a7c1c1a35a --- /dev/null +++ b/test/Other/Inputs/new-pm-pgo.proftext @@ -0,0 +1 @@ +:ir diff --git a/test/Other/can-execute.txt b/test/Other/can-execute.txt index fd6961f86bf1..9160e463744a 100644 --- a/test/Other/can-execute.txt +++ b/test/Other/can-execute.txt @@ -14,7 +14,8 @@ If we want, it is probably OK to change the semantics of can_execute and this test, but for now this test serves as a reminder to audit all the callers if we do that. -RUN: cp -f %S/Inputs/TestProg/TestProg %T/TestProg -RUN: chmod 111 %T/TestProg -RUN: export PATH=%S/Inputs:%T:%S/Inputs/TestProg:$PATH +RUN: rm -rf %t && mkdir -p %t +RUN: cp -f %S/Inputs/TestProg/TestProg %t/TestProg +RUN: chmod 111 %t/TestProg +RUN: export PATH=%S/Inputs:%t:%S/Inputs/TestProg:$PATH RUN: not TestProg diff --git a/test/Other/cgscc-disconnected-invalidation.ll b/test/Other/cgscc-disconnected-invalidation.ll new file mode 100644 index 000000000000..0567605fcf90 --- /dev/null +++ b/test/Other/cgscc-disconnected-invalidation.ll @@ -0,0 +1,54 @@ +; Test that patterns of transformations which disconnect a region of the call +; graph mid-traversal and then invalidate it function correctly. +; +; RUN: opt -S -passes='cgscc(inline,function(simplify-cfg))' < %s | FileCheck %s + +define internal void @test_scc_internal(i1 %flag) { +; CHECK-NOT: @test_scc_internal +entry: + br i1 %flag, label %then, label %else + +then: + call void @test_scc_internal(i1 false) + call void @test_scc_external() + br label %else + +else: + ret void +} + +define void @test_scc_external() { +; CHECK-LABEL: define void @test_scc_external() +entry: + call void @test_scc_internal(i1 false) + ret void +} + +define internal void @test_refscc_internal(i1 %flag, i8* %ptr) { +; CHECK-NOT: @test_refscc_internal +entry: + br i1 %flag, label %then, label %else + +then: + call void @test_refscc_internal(i1 false, i8* bitcast (i8* ()* @test_refscc_external to i8*)) + br label %else + +else: + ret void +} + +define i8* @test_refscc_external() { +; CHECK-LABEL: define i8* @test_refscc_external() +entry: + br i1 true, label %then, label %else +; CHECK-NEXT: entry: +; CHECK-NEXT: ret i8* null +; CHECK-NEXT: } +; CHECK-NOT: @test_refscc_internal + +then: + ret i8* null + +else: + ret i8* bitcast (void (i1, i8*)* @test_refscc_internal to i8*) +} diff --git a/test/Other/cgscc-libcall-update.ll b/test/Other/cgscc-libcall-update.ll index e0833ca09266..72369bea83cf 100644 --- a/test/Other/cgscc-libcall-update.ll +++ b/test/Other/cgscc-libcall-update.ll @@ -3,7 +3,10 @@ ; ; Also check that it can handle inlining *removing* a libcall entirely. ; -; RUN: opt -passes='cgscc(inline,function(instcombine))' -S < %s | FileCheck %s +; Finally, we include some recursive patterns and forced analysis invaliadtion +; that can trigger infinite CGSCC refinement if not handled correctly. +; +; RUN: opt -passes='cgscc(inline,function(instcombine,invalidate<all>))' -S < %s | FileCheck %s define i8* @wibble(i8* %arg1, i8* %arg2) { ; CHECK-LABEL: define i8* @wibble( @@ -15,7 +18,7 @@ bb: %tmp3 = call i64 @llvm.objectsize.i64.p0i8(i8* %tmp2, i1 false, i1 true) %tmp4 = call i8* @__strncpy_chk(i8* %arg2, i8* %tmp2, i64 1023, i64 %tmp3) ; CHECK-NOT: call -; CHECK: call i8* @strncpy(i8* %arg2, i8* %tmp2, i64 1023) +; CHECK: call i8* @strncpy(i8* %arg2, i8* nonnull %tmp2, i64 1023) ; CHECK-NOT: call ret i8* %tmp4 @@ -59,3 +62,15 @@ entry: %shr = and i32 %and2, 65280 ret i32 %shr } + +define i64 @write(i32 %i, i8* %p, i64 %j) { +entry: + %val = call i64 @write_wrapper(i32 %i, i8* %p, i64 %j) noinline + ret i64 %val +} + +define i64 @write_wrapper(i32 %i, i8* %p, i64 %j) { +entry: + %val = call i64 @write(i32 %i, i8* %p, i64 %j) noinline + ret i64 %val +} diff --git a/test/Other/invariant.group.barrier.ll b/test/Other/invariant.group.barrier.ll index 5b9b54f784f5..f10e4a188b16 100644 --- a/test/Other/invariant.group.barrier.ll +++ b/test/Other/invariant.group.barrier.ll @@ -12,10 +12,10 @@ define i8 @optimizable() { entry: %ptr = alloca i8 store i8 42, i8* %ptr, !invariant.group !0 -; CHECK: call i8* @llvm.invariant.group.barrier - %ptr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr) -; CHECK-NOT: call i8* @llvm.invariant.group.barrier - %ptr3 = call i8* @llvm.invariant.group.barrier(i8* %ptr) +; CHECK: call i8* @llvm.invariant.group.barrier.p0i8 + %ptr2 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr) +; CHECK-NOT: call i8* @llvm.invariant.group.barrier.p0i8 + %ptr3 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr) ; CHECK: call void @clobber(i8* {{.*}}%ptr) call void @clobber(i8* %ptr) @@ -34,11 +34,11 @@ define i8 @unoptimizable() { entry: %ptr = alloca i8 store i8 42, i8* %ptr, !invariant.group !0 -; CHECK: call i8* @llvm.invariant.group.barrier - %ptr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr) +; CHECK: call i8* @llvm.invariant.group.barrier.p0i8 + %ptr2 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr) call void @clobber(i8* %ptr) -; CHECK: call i8* @llvm.invariant.group.barrier - %ptr3 = call i8* @llvm.invariant.group.barrier(i8* %ptr) +; CHECK: call i8* @llvm.invariant.group.barrier.p0i8 + %ptr3 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr) ; CHECK: call void @clobber(i8* {{.*}}%ptr) call void @clobber(i8* %ptr) ; CHECK: call void @use(i8* {{.*}}%ptr2) @@ -55,8 +55,8 @@ declare void @use(i8* readonly) declare void @clobber(i8*) ; CHECK: Function Attrs: argmemonly nounwind readonly -; CHECK-NEXT: declare i8* @llvm.invariant.group.barrier(i8*) -declare i8* @llvm.invariant.group.barrier(i8*) +; CHECK-NEXT: declare i8* @llvm.invariant.group.barrier.p0i8(i8*) +declare i8* @llvm.invariant.group.barrier.p0i8(i8*) !0 = !{} diff --git a/test/Other/lit-globbing.ll b/test/Other/lit-globbing.ll index 5a668a90a40b..7e634ab5cb0f 100644 --- a/test/Other/lit-globbing.ll +++ b/test/Other/lit-globbing.ll @@ -1,28 +1,29 @@ -RUN: echo TA > %T/TA.txt
-RUN: echo TB > %T/TB.txt
-RUN: echo TAB > %T/TAB.txt
-
-RUN: echo %T/TA* | FileCheck -check-prefix=STAR %s
-RUN: echo %T/'TA'* | FileCheck -check-prefix=STAR %s
-RUN: echo %T/T'A'* | FileCheck -check-prefix=STAR %s
-
-RUN: echo %T/T?.txt | FileCheck -check-prefix=QUESTION %s
-RUN: echo %T/'T'?.txt | FileCheck -check-prefix=QUESTION %s
-
-RUN: echo %T/T??.txt | FileCheck -check-prefix=QUESTION2 %s
-RUN: echo %T/'T'??.txt | FileCheck -check-prefix=QUESTION2 %s
-
-RUN: echo 'T*' 'T?.txt' 'T??.txt' | FileCheck -check-prefix=QUOTEDARGS %s
-
-STAR-NOT: TB.txt
-STAR: {{(TA.txt.*TAB.txt|TAB.txt.*TA.txt)}}
-
-QUESTION-NOT: TAB.txt
-QUESTION: {{(TA.txt.*TB.txt|TB.txt.*TA.txt)}}
-
-QUESTION2-NOT: TA.txt
-QUESTION2-NOT: TB.txt
-QUESTION2: TAB.txt
-
-QUOTEDARGS-NOT: .txt
-QUOTEDARGS: T* T?.txt T??.txt
+RUN: rm -rf %t && mkdir -p %t +RUN: echo TA > %t/TA.txt +RUN: echo TB > %t/TB.txt +RUN: echo TAB > %t/TAB.txt + +RUN: echo %t/TA* | FileCheck -check-prefix=STAR %s +RUN: echo %t/'TA'* | FileCheck -check-prefix=STAR %s +RUN: echo %t/T'A'* | FileCheck -check-prefix=STAR %s + +RUN: echo %t/T?.txt | FileCheck -check-prefix=QUESTION %s +RUN: echo %t/'T'?.txt | FileCheck -check-prefix=QUESTION %s + +RUN: echo %t/T??.txt | FileCheck -check-prefix=QUESTION2 %s +RUN: echo %t/'T'??.txt | FileCheck -check-prefix=QUESTION2 %s + +RUN: echo 'T*' 'T?.txt' 'T??.txt' | FileCheck -check-prefix=QUOTEDARGS %s + +STAR-NOT: TB.txt +STAR: {{(TA.txt.*TAB.txt|TAB.txt.*TA.txt)}} + +QUESTION-NOT: TAB.txt +QUESTION: {{(TA.txt.*TB.txt|TB.txt.*TA.txt)}} + +QUESTION2-NOT: TA.txt +QUESTION2-NOT: TB.txt +QUESTION2: TAB.txt + +QUOTEDARGS-NOT: .txt +QUOTEDARGS: T* T?.txt T??.txt diff --git a/test/Other/loop-pass-printer.ll b/test/Other/loop-pass-printer.ll new file mode 100644 index 000000000000..bedcf164acea --- /dev/null +++ b/test/Other/loop-pass-printer.ll @@ -0,0 +1,77 @@ +; This test checks -print-after/before on loop passes +; Besides of the loop itself it should be dumping loop pre-header and exits. +; +; RUN: opt < %s 2>&1 -disable-output \ +; RUN: -loop-deletion -print-before=loop-deletion \ +; RUN: | FileCheck %s -check-prefix=DEL +; RUN: opt < %s 2>&1 -disable-output \ +; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=bar \ +; RUN: | FileCheck %s -check-prefix=BAR +; RUN: opt < %s 2>&1 -disable-output \ +; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=foo -print-module-scope \ +; RUN: | FileCheck %s -check-prefix=FOO-MODULE + +; DEL: IR Dump Before +; DEL-SAME: dead loops +; DEL: ; Preheader: +; DEL-NEXT: %idx = alloca i32, align 4 +; DEL: ; Loop: +; DEL-NEXT: loop: +; DEL: cont: +; DEL: ; Exit blocks +; DEL: done: +; DEL: IR Dump Before +; DEL-SAME: dead loops +; DEL: ; Preheader: +; DEL-NEXT: br label %loop +; DEL: ; Loop: +; DEL-NEXT: loop: +; DEL: ; Exit blocks +; DEL: end: + +; BAR: IR Dump After +; BAR-SAME: Unroll +; BAR: ; Preheader: +; BAR-NEXT: br label %loop +; BAR: ; Loop: +; BAR-NEXT: loop: +; BAR: ; Exit blocks +; BAR: end: +; BAR-NOT: IR Dump +; BAR-NOT: ; Loop + +; FOO-MODULE: IR Dump After +; FOO-MODULE-SAME: Unroll +; FOO-MODULE-SAME: loop: %loop +; FOO-MODULE-NEXT: ModuleID = +; FOO-MODULE: define void @foo +; FOO-MODULE: define void @bar +; FOO-MODULE-NOT: IR Dump + +define void @foo(){ + %idx = alloca i32, align 4 + store i32 0, i32* %idx, align 4 + br label %loop + +loop: + %1 = load i32, i32* %idx, align 4 + %2 = icmp slt i32 %1, 10 + br i1 %2, label %cont, label %done + +cont: + %3 = load i32, i32* %idx, align 4 + %4 = add nsw i32 %3, 1 + store i32 %4, i32* %idx, align 4 + br label %loop + +done: + ret void +} + +define void @bar(){ + br label %loop +loop: + br i1 1, label %loop, label %end +end: + ret void +} diff --git a/test/Other/loop-pm-invalidation.ll b/test/Other/loop-pm-invalidation.ll index d2a0e23a7200..9a4f74e1d005 100644 --- a/test/Other/loop-pm-invalidation.ll +++ b/test/Other/loop-pm-invalidation.ll @@ -57,7 +57,7 @@ define void @one_loop(i1* %ptr) { ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run. ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: l0.header +; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop @@ -84,7 +84,7 @@ define void @one_loop(i1* %ptr) { ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run. ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: l0.header +; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop @@ -124,8 +124,8 @@ define void @nested_loops(i1* %ptr) { ; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run. ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: l.0.header -; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: l.0.0.header +; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> +; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop @@ -158,8 +158,8 @@ define void @nested_loops(i1* %ptr) { ; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run. ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: l.0.header -; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: l.0.0.header +; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> +; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops @@ -206,7 +206,7 @@ define void @dead_loop() { ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run. ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: l0.header +; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop @@ -233,7 +233,7 @@ define void @dead_loop() { ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run. ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses -; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: l0.header +; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop> ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop diff --git a/test/Other/new-pass-manager.ll b/test/Other/new-pass-manager.ll index 35f596e77988..0826ecd3152b 100644 --- a/test/Other/new-pass-manager.ll +++ b/test/Other/new-pass-manager.ll @@ -24,7 +24,6 @@ ; CHECK-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(FunctionAnalysisManager|AnalysisManager<.*Function.*>).*}},{{.*}}Module> ; CHECK-CGSCC-PASS-NEXT: Running analysis: LazyCallGraphAnalysis ; CHECK-CGSCC-PASS-NEXT: Running analysis: TargetLibraryAnalysis -; CHECK-CGSCC-PASS-NEXT: Running an SCC pass across the RefSCC: [(foo)] ; CHECK-CGSCC-PASS-NEXT: Starting CGSCC pass manager run ; CHECK-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass ; CHECK-CGSCC-PASS-NEXT: Finished CGSCC pass manager run @@ -409,7 +408,6 @@ ; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(FunctionAnalysisManager|AnalysisManager<.*Function.*>).*}},{{.*}}Module> ; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: LazyCallGraphAnalysis ; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: TargetLibraryAnalysis -; CHECK-REPEAT-CGSCC-PASS-NEXT: Running an SCC pass across the RefSCC: [(foo)] ; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run ; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: RepeatedPass ; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run diff --git a/test/Other/new-pm-defaults.ll b/test/Other/new-pm-defaults.ll index a0658c10d609..1964a8c2f7cb 100644 --- a/test/Other/new-pm-defaults.ll +++ b/test/Other/new-pm-defaults.ll @@ -76,14 +76,18 @@ ; CHECK-O-NEXT: Running pass: EarlyCSEPass ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis ; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass +; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: IPSCCPPass +; CHECK-O-NEXT: Running pass: CalledValuePropagationPass ; CHECK-O-NEXT: Running pass: GlobalOptPass ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass> ; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> ; CHECK-O-NEXT: Starting llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: InstCombinePass +; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis +; CHECK-O-NEXT: Running analysis: AAManager ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. @@ -100,7 +104,6 @@ ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}> ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass ; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy -; CHECK-O-NEXT: Running analysis: AAManager ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass ; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> ; CHECK-O-NEXT: Starting llvm::Function pass manager run. @@ -121,7 +124,6 @@ ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running pass: ReassociatePass ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis -; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}> ; CHECK-O-NEXT: Running analysis: LoopAnalysis ; CHECK-O-NEXT: Running analysis: ScalarEvolutionAnalysis @@ -140,7 +142,7 @@ ; CHECK-O-NEXT: Running pass: LoopIdiomRecognizePass ; CHECK-EP-LOOP-LATE-NEXT: Running pass: NoOpLoopPass ; CHECK-O-NEXT: Running pass: LoopDeletionPass -; CHECK-O-NEXT: Running pass: LoopUnrollPass +; CHECK-O-NEXT: Running pass: LoopFullUnrollPass ; CHECK-EP-LOOP-END-NEXT: Running pass: NoOpLoopPass ; CHECK-O-NEXT: Finished Loop pass manager run. ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass @@ -179,6 +181,7 @@ ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> ; CHECK-O-NEXT: Starting llvm::Module pass manager run. ; CHECK-O-NEXT: Running pass: GlobalOptPass +; CHECK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-O-NEXT: Running pass: EliminateAvailableExternallyPass ; CHECK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA @@ -194,17 +197,20 @@ ; CHECK-O-NEXT: Running pass: LoopLoadEliminationPass ; CHECK-O-NEXT: Running analysis: LoopAccessAnalysis ; CHECK-O-NEXT: Running pass: InstCombinePass -; CHECK-O-NEXT: Running pass: SLPVectorizerPass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass +; CHECK-O-NEXT: Running pass: SLPVectorizerPass ; CHECK-O-NEXT: Running pass: InstCombinePass -; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopUnrollPass +; CHECK-O-NEXT: Running pass: LoopUnrollPass +; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass ; CHECK-O-NEXT: Running pass: AlignmentFromAssumptionsPass ; CHECK-O-NEXT: Running pass: LoopSinkPass ; CHECK-O-NEXT: Running pass: InstSimplifierPass +; CHECK-O-NEXT: Running pass: DivRemPairsPass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass +; CHECK-O-NEXT: Running pass: SpeculateAroundPHIsPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-O-NEXT: Running pass: ConstantMergePass diff --git a/test/Other/new-pm-lto-defaults.ll b/test/Other/new-pm-lto-defaults.ll index cab3965bf18f..878198d1447b 100644 --- a/test/Other/new-pm-lto-defaults.ll +++ b/test/Other/new-pm-lto-defaults.ll @@ -4,7 +4,7 @@ ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='lto<O1>' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefix=CHECK-O +; 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 @@ -29,16 +29,25 @@ ; 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: 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-NEXT: Running pass: CalledValuePropagationPass ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}PostOrderFunctionAttrsPass> -; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy -; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy +; 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-O-NEXT: Running analysis: TargetLibraryAnalysis +; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis ; CHECK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis ; CHECK-O-NEXT: Running pass: GlobalSplitPass @@ -68,7 +77,6 @@ ; 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: OptimizationRemarkEmitterAnalysis ; CHECK-O2-NEXT: Running analysis: TargetIRAnalysis ; CHECK-O2-NEXT: Running analysis: DemandedBitsAnalysis ; CHECK-O2-NEXT: Running pass: CrossDSOCFIPass diff --git a/test/Other/new-pm-pgo.ll b/test/Other/new-pm-pgo.ll new file mode 100644 index 000000000000..5d6ed4902505 --- /dev/null +++ b/test/Other/new-pm-pgo.ll @@ -0,0 +1,31 @@ +; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=new-pm-pgo-instr-gen-pipeline -profile-file='temp' %s 2>&1 |FileCheck %s --check-prefixes=GEN +; RUN: llvm-profdata merge %S/Inputs/new-pm-pgo.proftext -o %t.profdata +; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=new-pm-pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 |FileCheck %s --check-prefixes=USE +; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=new-pm-pgo-sample-use-pipeline -profile-file='%S/Inputs/new-pm-pgo.prof' %s 2>&1 \ +; RUN: |FileCheck %s --check-prefixes=SAMPLE_USE,SAMPLE_USE_O +; RUN: opt -debug-pass-manager -passes='thinlto-pre-link<O2>' -pgo-kind=new-pm-pgo-sample-use-pipeline -profile-file='%S/Inputs/new-pm-pgo.prof' %s 2>&1 \ +; RUN: |FileCheck %s --check-prefixes=SAMPLE_USE,SAMPLE_USE_PRE_LINK +; RUN: opt -debug-pass-manager -passes='thinlto<O2>' -pgo-kind=new-pm-pgo-sample-use-pipeline -profile-file='%S/Inputs/new-pm-pgo.prof' %s 2>&1 \ +; RUN: |FileCheck %s --check-prefixes=SAMPLE_USE,SAMPLE_USE_POST_LINK +; RUN: opt -debug-pass-manager -passes='default<O2>' -new-pm-debug-info-for-profiling %s 2>&1 |FileCheck %s --check-prefixes=SAMPLE_GEN +; +; GEN: Running pass: PGOInstrumentationGen +; USE: Running pass: PGOInstrumentationUse +; USE: Running pass: PGOIndirectCallPromotion +; USE: Running pass: PGOMemOPSizeOpt +; SAMPLE_USE_O: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}> +; SAMPLE_USE_PRE_LINK: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}> +; SAMPLE_USE: Running pass: SimplifyCFGPass +; SAMPLE_USE: Running pass: SROA +; SAMPLE_USE: Running pass: EarlyCSEPass +; SAMPLE_USE: Running pass: LowerExpectIntrinsicPass +; SAMPLE_USE_POST_LINK: Running pass: InstCombinePass +; SAMPLE_USE: Running pass: SampleProfileLoaderPass +; SAMPLE_USE_O: Running pass: PGOIndirectCallPromotion +; SAMPLE_USE_POST_LINK-NOT: Running pass: GlobalOptPass +; SAMPLE_USE_POST_LINK: Running pass: PGOIndirectCallPromotion +; SAMPLE_GEN: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}> + +define void @foo() { + ret void +} diff --git a/test/Other/new-pm-thinlto-defaults.ll b/test/Other/new-pm-thinlto-defaults.ll index f5625d96d703..12fd0d7ac476 100644 --- a/test/Other/new-pm-thinlto-defaults.ll +++ b/test/Other/new-pm-thinlto-defaults.ll @@ -10,19 +10,22 @@ ; Prelink pipelines: ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto-pre-link<O1>,name-anon-globals' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-PRELINK-O,CHECK-PRELINK-O1 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O1 ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto-pre-link<O2>,name-anon-globals' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-PRELINK-O,CHECK-PRELINK-O2 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O2 ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto-pre-link<O3>,name-anon-globals' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-PRELINK-O,CHECK-PRELINK-O3 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O3 ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto-pre-link<Os>,name-anon-globals' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Os,CHECK-PRELINK-O,CHECK-PRELINK-Os +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Os,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-Os ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto-pre-link<Oz>,name-anon-globals' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Oz,CHECK-PRELINK-O,CHECK-PRELINK-Oz +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Oz,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-Oz +; RUN: opt -disable-verify -debug-pass-manager -new-pm-debug-info-for-profiling \ +; RUN: -passes='thinlto-pre-link<O2>,name-anon-globals' -S %s 2>&1 \ +; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-PRELINK-O,CHECK-PRELINK-O2 ; ; Postlink pipelines: ; RUN: opt -disable-verify -debug-pass-manager \ @@ -40,18 +43,26 @@ ; RUN: opt -disable-verify -debug-pass-manager \ ; RUN: -passes='thinlto<Oz>' -S %s 2>&1 \ ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Oz,CHECK-POSTLINK-O,CHECK-POSTLINK-Oz +; RUN: opt -disable-verify -debug-pass-manager -new-pm-debug-info-for-profiling \ +; RUN: -passes='thinlto<O2>' -S %s 2>&1 \ +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-POSTLINK-O,CHECK-POSTLINK-O2 ; ; 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: ForceFunctionAttrsPass +; CHECK-DIS-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}> +; CHECK-DIS-NEXT: Running analysis: InnerAnalysisManagerProxy ; CHECK-POSTLINK-O-NEXT: Running pass: PGOIndirectCallPromotion +; CHECK-POSTLINK-O-NEXT: Running analysis: ProfileSummaryAnalysis +; CHECK-POSTLINK-O-NEXT: Running analysis: InnerAnalysisManagerProxy +; CHECK-POSTLINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> ; CHECK-O-NEXT: Starting llvm::Module pass manager run. ; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> -; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy +; CHECK-PRELINK-O-NODIS-NEXT: Running analysis: InnerAnalysisManagerProxy ; CHECK-O-NEXT: Starting llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running analysis: TargetIRAnalysis @@ -61,21 +72,25 @@ ; CHECK-O-NEXT: Running pass: EarlyCSEPass ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis ; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass +; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: IPSCCPPass +; CHECK-O-NEXT: Running pass: CalledValuePropagationPass ; CHECK-O-NEXT: Running pass: GlobalOptPass ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass> ; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> ; CHECK-O-NEXT: Starting llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: InstCombinePass +; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis +; CHECK-O-NEXT: Running analysis: AAManager ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA ; CHECK-O-NEXT: Running analysis: GlobalsAA ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis -; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis +; CHECK-PRELINK-O-NEXT: Running analysis: ProfileSummaryAnalysis ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}LazyCallGraph{{.*}}> ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy ; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis @@ -84,7 +99,6 @@ ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}> ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass ; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy -; CHECK-O-NEXT: Running analysis: AAManager ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass ; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> ; CHECK-O-NEXT: Starting llvm::Function pass manager run. @@ -104,7 +118,6 @@ ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running pass: ReassociatePass ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis -; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}> ; CHECK-O-NEXT: Running analysis: LoopAnalysis ; CHECK-O-NEXT: Running analysis: ScalarEvolutionAnalysis @@ -122,7 +135,7 @@ ; CHECK-O-NEXT: Running pass: IndVarSimplifyPass ; CHECK-O-NEXT: Running pass: LoopIdiomRecognizePass ; CHECK-O-NEXT: Running pass: LoopDeletionPass -; CHECK-O-NEXT: Running pass: LoopUnrollPass +; CHECK-O-NEXT: Running pass: LoopFullUnrollPass ; CHECK-O-NEXT: Finished Loop pass manager run. ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass ; CHECK-Os-NEXT: Running pass: GVN @@ -157,6 +170,7 @@ ; CHECK-POSTLINK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> ; CHECK-POSTLINK-O-NEXT: Starting llvm::Module pass manager run. ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass +; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-POSTLINK-O-NEXT: Running pass: EliminateAvailableExternallyPass ; CHECK-POSTLINK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass ; CHECK-POSTLINK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA @@ -171,17 +185,20 @@ ; CHECK-POSTLINK-O-NEXT: Running pass: LoopLoadEliminationPass ; CHECK-POSTLINK-O-NEXT: Running analysis: LoopAccessAnalysis ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass -; CHECK-POSTLINK-O-NEXT: Running pass: SLPVectorizerPass ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass +; CHECK-POSTLINK-O-NEXT: Running pass: SLPVectorizerPass ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass -; CHECK-POSTLINK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopUnrollPass +; CHECK-POSTLINK-O-NEXT: Running pass: LoopUnrollPass +; CHECK-POSTLINK-O-NEXT: Running analysis: OuterAnalysisManagerProxy ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass ; CHECK-POSTLINK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis ; CHECK-POSTLINK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass ; CHECK-POSTLINK-O-NEXT: Running pass: AlignmentFromAssumptionsPass ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSinkPass ; CHECK-POSTLINK-O-NEXT: Running pass: InstSimplifierPass +; CHECK-POSTLINK-O-NEXT: Running pass: DivRemPairsPass ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass +; CHECK-POSTLINK-O-NEXT: Running pass: SpeculateAroundPHIsPass ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run. ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-POSTLINK-O-NEXT: Running pass: ConstantMergePass diff --git a/test/Other/pass-pipelines.ll b/test/Other/pass-pipelines.ll index d47c02ee7a46..9e5176eddaa7 100644 --- a/test/Other/pass-pipelines.ll +++ b/test/Other/pass-pipelines.ll @@ -55,13 +55,15 @@ ; Next we break out of the main Function passes inside the CGSCC pipeline with ; a barrier pass. ; CHECK-O2: A No-Op Barrier Pass -; Reduce the size of the IR ASAP after the inliner. ; CHECK-O2-NEXT: Eliminate Available Externally ; Inferring function attribute should be right after the CGSCC pipeline, before ; any other optimizations/analyses. ; CHECK-O2-NEXT: CallGraph ; CHECK-O2-NEXT: Deduce function attributes in RPO ; CHECK-O2-NOT: Manager +; Reduce the size of the IR ASAP after the inliner. +; CHECK-O2-NEXT: Global Variable Optimizer +; CHECK-O2: Dead Global Elimination ; Next is the late function pass pipeline. ; CHECK-O2: FunctionPass Manager ; CHECK-O2-NOT: Manager diff --git a/test/Other/print-module-scope.ll b/test/Other/print-module-scope.ll new file mode 100644 index 000000000000..0e9c4d59cc3b --- /dev/null +++ b/test/Other/print-module-scope.ll @@ -0,0 +1,55 @@ +; This test is checking basic properties of -print-module-scope options: +; - dumps all the module IR at once +; - all the function attributes are shown, including those of declarations +; - works on top of -print-after and -filter-print-funcs +; +; RUN: opt < %s 2>&1 -disable-output \ +; RUN: -simplifycfg -print-after=simplifycfg -print-module-scope \ +; RUN: | FileCheck %s -check-prefix=CFG +; RUN: opt < %s 2>&1 -disable-output \ +; RUN: -simplifycfg -print-after=simplifycfg -filter-print-funcs=foo -print-module-scope \ +; RUN: | FileCheck %s -check-prefix=FOO + +; CFG: IR Dump After +; CFG-SAME: function: foo +; CFG-NEXT: ModuleID = +; CFG: define void @foo +; CFG: define void @bar +; CFG: declare void @baz +; CFG: IR Dump After +; CFG-SAME: function: bar +; CFG-NEXT: ModuleID = +; CFG: define void @foo +; CFG: define void @bar +; CFG: declare void @baz + +; FOO: IR Dump After +; FOO-NOT: function: bar +; FOO-SAME: function: foo +; FOO-NEXT: ModuleID = +; FOO: Function Attrs: nounwind ssp +; FOO: define void @foo +; FOO: Function Attrs: nounwind +; FOO: define void @bar +; FOO: Function Attrs: nounwind readnone ssp +; FOO: declare void @baz + +define void @foo() nounwind ssp { + call void @baz() + ret void +} + +define void @bar() #0 { + ret void +} + +declare void @baz() #1 + +attributes #0 = { nounwind "no-frame-pointer-elim"="true" } + +attributes #1 = { nounwind readnone ssp "use-soft-float"="false" } +; FOO: attributes #{{[0-9]}} = { nounwind "no-frame-pointer-elim"="true" } + +; FOO: attributes #{{[0-9]}} = { nounwind readnone ssp "use-soft-float"="false" } + +; FOO-NOT: IR Dump |