xref: /llvm-project/llvm/test/Other/new-pm-O0-defaults.ll (revision cab81dd03813ac6333ad7fc031d72b84341fe2b9)
1; The IR below was crafted so as:
2; 1) To have a loop, so we create a loop pass manager
3; 2) To be "immutable" in the sense that no pass in the standard
4;    pipeline will modify it.
5; Since no transformations take place, we don't expect any analyses
6; to be invalidated.
7; Any invalidation that shows up here is a bug, unless we started modifying
8; the IR, in which case we need to make it immutable harder.
9
10; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
11; RUN:     -passes='default<O0>' -S %s 2>&1 \
12; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-CORO
13; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager -enable-matrix \
14; RUN:     -passes='default<O0>' -S %s 2>&1 \
15; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-MATRIX,CHECK-CORO
16; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager -debug-info-for-profiling \
17; RUN:     -passes='default<O0>' -S %s 2>&1 \
18; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-DIS,CHECK-CORO
19; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
20; RUN:     -passes='thinlto-pre-link<O0>' -S %s 2>&1 \
21; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-PRE-LINK,CHECK-CORO
22; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
23; RUN:     -passes='lto-pre-link<O0>' -S %s 2>&1 \
24; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT,CHECK-PRE-LINK,CHECK-CORO
25; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
26; RUN:     -passes='thinlto<O0>' -S %s 2>&1 \
27; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-THINLTO
28; RUN: opt -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager \
29; RUN:     -passes='lto<O0>' -S %s 2>&1 \
30; RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-LTO
31
32; CHECK-DIS: Running analysis: InnerAnalysisManagerProxy
33; CHECK-DIS-NEXT: Running pass: EntryExitInstrumenterPass
34; CHECK-DIS-NEXT: Running pass: AddDiscriminatorsPass
35; CHECK-DIS-NEXT: Running pass: AlwaysInlinerPass
36; CHECK-DIS-NEXT: Running analysis: ProfileSummaryAnalysis
37; CHECK-DEFAULT: Running analysis: InnerAnalysisManagerProxy
38; CHECK-DEFAULT-NEXT: Running pass: EntryExitInstrumenterPass
39; CHECK-DEFAULT-NEXT: Running pass: AlwaysInlinerPass
40; CHECK-DEFAULT-NEXT: Running analysis: ProfileSummaryAnalysis
41; CHECK-MATRIX: Running pass: LowerMatrixIntrinsicsPass
42; CHECK-MATRIX-NEXT: Running analysis: TargetIRAnalysis
43; CHECK-CORO-NEXT: Running pass: CoroConditionalWrapper
44; CHECK-PRE-LINK: Running pass: CanonicalizeAliasesPass
45; CHECK-PRE-LINK-NEXT: Running pass: NameAnonGlobalPass
46; CHECK-THINLTO: Running pass: LowerTypeTestsPass
47; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass
48; CHECK-THINLTO-NEXT: Running pass: GlobalDCEPass
49; CHECK-LTO: Running pass: CrossDSOCFIPass on [module]
50; CHECK-LTO-NEXT: Running pass: WholeProgramDevirtPass
51; CHECK-LTO-NEXT: Running analysis: InnerAnalysisManagerProxy
52; CHECK-LTO-NEXT: Running pass: LowerTypeTestsPass
53; CHECK-LTO-NEXT: Running pass: LowerTypeTestsPass
54; CHECK-CORO-NEXT: Running pass: AnnotationRemarksPass
55; CHECK-CORO-NEXT: Running analysis: TargetLibraryAnalysis
56; CHECK-LTO-NEXT: Running pass: AnnotationRemarksPass
57; CHECK-LTO-NEXT: Running analysis: TargetLibraryAnalysis
58; CHECK-NEXT: Running pass: PrintModulePass
59
60; Make sure we get the IR back out without changes when we print the module.
61; CHECK-LABEL: define void @foo(i32 %n) local_unnamed_addr {
62; CHECK-NEXT: entry:
63; CHECK-NEXT:   br label %loop
64; CHECK:      loop:
65; CHECK-NEXT:   %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
66; CHECK-NEXT:   %iv.next = add i32 %iv, 1
67; CHECK-NEXT:   tail call void @bar()
68; CHECK-NEXT:   %cmp = icmp eq i32 %iv, %n
69; CHECK-NEXT:   br i1 %cmp, label %exit, label %loop
70; CHECK:      exit:
71; CHECK-NEXT:   ret void
72; CHECK-NEXT: }
73;
74
75declare void @bar() local_unnamed_addr
76
77define void @foo(i32 %n) local_unnamed_addr {
78entry:
79  br label %loop
80loop:
81  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
82  %iv.next = add i32 %iv, 1
83  tail call void @bar()
84  %cmp = icmp eq i32 %iv, %n
85  br i1 %cmp, label %exit, label %loop
86exit:
87  ret void
88}
89