91 lines · plain
1; The IR below was crafted so as:2; 1) To have a loop, so we create a loop pass manager3; 2) To be "immutable" in the sense that no pass in the standard4; pipeline will modify it.5; Since no transformations take place, we don't expect any analyses6; to be invalidated.7; Any invalidation that shows up here is a bug, unless we started modifying8; 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-CORO13; 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-CORO16; 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-CORO19; 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-CORO22; 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-CORO25; 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-THINLTO28; 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-LTO31 32; CHECK-DIS: Running analysis: InnerAnalysisManagerProxy33; CHECK-DIS-NEXT: Running pass: EntryExitInstrumenterPass34; CHECK-DIS-NEXT: Running pass: AddDiscriminatorsPass35; CHECK-DIS-NEXT: Running pass: AlwaysInlinerPass36; CHECK-DIS-NEXT: Running analysis: ProfileSummaryAnalysis37; CHECK-DEFAULT: Running analysis: InnerAnalysisManagerProxy38; CHECK-DEFAULT-NEXT: Running pass: EntryExitInstrumenterPass39; CHECK-DEFAULT-NEXT: Running pass: AlwaysInlinerPass40; CHECK-DEFAULT-NEXT: Running analysis: ProfileSummaryAnalysis41; CHECK-MATRIX: Running pass: LowerMatrixIntrinsicsPass42; CHECK-MATRIX-NEXT: Running analysis: TargetIRAnalysis43; CHECK-CORO-NEXT: Running pass: CoroConditionalWrapper44; CHECK-PRE-LINK: Running pass: CanonicalizeAliasesPass45; CHECK-PRE-LINK-NEXT: Running pass: NameAnonGlobalPass46; CHECK-THINLTO: Running pass: LowerTypeTestsPass47; CHECK-THINLTO-NEXT: Running pass: CoroConditionalWrapper48; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass49; CHECK-THINLTO-NEXT: Running pass: GlobalDCEPass50; CHECK-LTO: Running pass: CrossDSOCFIPass on [module]51; CHECK-LTO-NEXT: Running pass: WholeProgramDevirtPass52; CHECK-LTO-NEXT: Running analysis: InnerAnalysisManagerProxy53; CHECK-LTO-NEXT: Running pass: LowerTypeTestsPass54; CHECK-LTO-NEXT: Running pass: LowerTypeTestsPass55; CHECK-LTO-NEXT: CoroConditionalWrapper56; CHECK-CORO-NEXT: Running pass: AnnotationRemarksPass57; CHECK-CORO-NEXT: Running analysis: TargetLibraryAnalysis58; CHECK-LTO-NEXT: Running pass: AnnotationRemarksPass59; CHECK-LTO-NEXT: Running analysis: TargetLibraryAnalysis60; CHECK-NEXT: Running pass: PrintModulePass61 62; Make sure we get the IR back out without changes when we print the module.63; CHECK-LABEL: define void @foo(i32 %n) local_unnamed_addr {64; CHECK-NEXT: entry:65; CHECK-NEXT: br label %loop66; CHECK: loop:67; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]68; CHECK-NEXT: %iv.next = add i32 %iv, 169; CHECK-NEXT: tail call void @bar()70; CHECK-NEXT: %cmp = icmp eq i32 %iv, %n71; CHECK-NEXT: br i1 %cmp, label %exit, label %loop72; CHECK: exit:73; CHECK-NEXT: ret void74; CHECK-NEXT: }75;76 77declare void @bar() local_unnamed_addr78 79define void @foo(i32 %n) local_unnamed_addr {80entry:81 br label %loop82loop:83 %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]84 %iv.next = add i32 %iv, 185 tail call void @bar()86 %cmp = icmp eq i32 %iv, %n87 br i1 %cmp, label %exit, label %loop88exit:89 ret void90}91