Skip to content

Commit 040c1b4

Browse files
committed
Move EntryExitInstrumentation pass location
This seems to be more of a Clang thing rather than a generic LLVM thing, so this moves it out of LLVM pipelines and as Clang extension hooks into LLVM pipelines. Move the post-inline EEInstrumentation out of the backend pipeline and into a late pass, similar to other sanitizer passes. It doesn't fit into the codegen pipeline. Also fix up EntryExitInstrumentation not running at -O0 under the new PM. PR49143 Reviewed By: hans Differential Revision: https://reviews.llvm.org/D97608
1 parent dcfec27 commit 040c1b4

24 files changed

+100
-64
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,17 @@ static void addDataFlowSanitizerPass(const PassManagerBuilder &Builder,
367367
PM.add(createDataFlowSanitizerLegacyPassPass(LangOpts.NoSanitizeFiles));
368368
}
369369

370+
static void addEntryExitInstrumentationPass(const PassManagerBuilder &Builder,
371+
legacy::PassManagerBase &PM) {
372+
PM.add(createEntryExitInstrumenterPass());
373+
}
374+
375+
static void
376+
addPostInlineEntryExitInstrumentationPass(const PassManagerBuilder &Builder,
377+
legacy::PassManagerBase &PM) {
378+
PM.add(createPostInlineEntryExitInstrumenterPass());
379+
}
380+
370381
static TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple,
371382
const CodeGenOptions &CodeGenOpts) {
372383
TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple);
@@ -783,6 +794,20 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
783794
addDataFlowSanitizerPass);
784795
}
785796

797+
if (CodeGenOpts.InstrumentFunctions ||
798+
CodeGenOpts.InstrumentFunctionEntryBare ||
799+
CodeGenOpts.InstrumentFunctionsAfterInlining ||
800+
CodeGenOpts.InstrumentForProfiling) {
801+
PMBuilder.addExtension(PassManagerBuilder::EP_EarlyAsPossible,
802+
addEntryExitInstrumentationPass);
803+
PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,
804+
addEntryExitInstrumentationPass);
805+
PMBuilder.addExtension(PassManagerBuilder::EP_OptimizerLast,
806+
addPostInlineEntryExitInstrumentationPass);
807+
PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,
808+
addPostInlineEntryExitInstrumentationPass);
809+
}
810+
786811
// Set up the per-function pass manager.
787812
FPM.add(new TargetLibraryInfoWrapperPass(*TLII));
788813
if (CodeGenOpts.VerifyModule)
@@ -1317,12 +1342,20 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
13171342
/*DropTypeTests=*/true));
13181343
});
13191344

1320-
if (Level != PassBuilder::OptimizationLevel::O0) {
1345+
if (CodeGenOpts.InstrumentFunctions ||
1346+
CodeGenOpts.InstrumentFunctionEntryBare ||
1347+
CodeGenOpts.InstrumentFunctionsAfterInlining ||
1348+
CodeGenOpts.InstrumentForProfiling) {
13211349
PB.registerPipelineStartEPCallback(
13221350
[](ModulePassManager &MPM, PassBuilder::OptimizationLevel Level) {
13231351
MPM.addPass(createModuleToFunctionPassAdaptor(
13241352
EntryExitInstrumenterPass(/*PostInlining=*/false)));
13251353
});
1354+
PB.registerOptimizerLastEPCallback(
1355+
[](ModulePassManager &MPM, PassBuilder::OptimizationLevel Level) {
1356+
MPM.addPass(createModuleToFunctionPassAdaptor(
1357+
EntryExitInstrumenterPass(/*PostInlining=*/true)));
1358+
});
13261359
}
13271360

13281361
// Register callbacks to schedule sanitizer passes at the appropriate part
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
// REQUIRES: x86-registered-target
2-
// RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -o - %s | FileCheck %s
3-
// RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - %s | FileCheck -check-prefix=NOINLINE %s
2+
// RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O0 -emit-llvm -o - %s | FileCheck %s
3+
// RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -emit-llvm -o - %s | FileCheck %s
4+
// RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - -emit-llvm %s | FileCheck -check-prefix=NOINLINE %s
45

5-
// RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -o - %s | FileCheck %s
6-
// RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - %s | FileCheck -check-prefix=NOINLINE %s
6+
// RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O0 -o - -emit-llvm %s | FileCheck %s
7+
// RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -o - -emit-llvm %s | FileCheck %s
8+
// RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - -emit-llvm %s | FileCheck -check-prefix=NOINLINE %s
79

8-
// It's not so nice having asm tests in Clang, but we need to check that we set
9-
// up the pipeline correctly in order to have the instrumentation inserted.
10-
11-
int leaf(int x) {
10+
__attribute__((always_inline)) int leaf(int x) {
1211
return x;
13-
// CHECK-LABEL: leaf:
14-
// CHECK: callq __cyg_profile_func_enter
12+
// CHECK-LABEL: define {{.*}} @leaf
13+
// CHECK: call void @__cyg_profile_func_enter
1514
// CHECK-NOT: cyg_profile
16-
// CHECK: callq __cyg_profile_func_exit
15+
// CHECK: call void @__cyg_profile_func_exit
1716
// CHECK-NOT: cyg_profile
1817
// CHECK: ret
1918
}
2019

2120
int root(int x) {
2221
return leaf(x);
23-
// CHECK-LABEL: root:
24-
// CHECK: callq __cyg_profile_func_enter
22+
// CHECK-LABEL: define {{.*}} @root
23+
// CHECK: call void @__cyg_profile_func_enter
2524
// CHECK-NOT: cyg_profile
2625

2726
// Inlined from leaf():
28-
// CHECK: callq __cyg_profile_func_enter
27+
// CHECK: call void @__cyg_profile_func_enter
2928
// CHECK-NOT: cyg_profile
30-
// CHECK: callq __cyg_profile_func_exit
31-
29+
// CHECK: call void @__cyg_profile_func_exit
3230
// CHECK-NOT: cyg_profile
33-
// CHECK: callq __cyg_profile_func_exit
31+
32+
// CHECK: call void @__cyg_profile_func_exit
3433
// CHECK: ret
3534

36-
// NOINLINE-LABEL: root:
37-
// NOINLINE: callq __cyg_profile_func_enter
35+
// NOINLINE-LABEL: define {{.*}} @root
36+
// NOINLINE: call void @__cyg_profile_func_enter
37+
// NOINLINE-NOT: cyg_profile
38+
// NOINLINE: call void @__cyg_profile_func_exit
3839
// NOINLINE-NOT: cyg_profile
39-
// NOINLINE: callq __cyg_profile_func_exit
4040
// NOINLINE: ret
4141
}

clang/test/CodeGen/mcount.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,17 @@ int main(void) {
3535
return no_instrument();
3636
}
3737

38-
// CHECK: attributes #0 = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} }
39-
// CHECK: attributes #1 = { {{.*}} }
40-
// CHECK-PREFIXED: attributes #0 = { {{.*}}"instrument-function-entry-inlined"="_mcount"{{.*}} }
41-
// CHECK-PREFIXED: attributes #1 = { {{.*}} }
42-
// CHECK-DOUBLE-PREFIXED: attributes #0 = { {{.*}}"instrument-function-entry-inlined"="__mcount"{{.*}} }
43-
// CHECK-DOUBLE-PREFIXED: attributes #1 = { {{.*}} }
44-
// NO-MCOUNT-NOT: attributes #{{[0-9]}} = { {{.*}}"instrument-function-entry-inlined"={{.*}} }
45-
// NO-MCOUNT1-NOT: attributes #1 = { {{.*}}"instrument-function-entry-inlined"={{.*}} }
38+
// CHECK: call void @mcount
39+
// CHECK: call void @mcount
40+
// CHECK: call void @mcount
41+
// CHECK-NOT: call void @mcount
42+
// CHECK-PREFIXED: call void @_mcount
43+
// CHECK-PREFIXED: call void @_mcount
44+
// CHECK-PREFIXED: call void @_mcount
45+
// CHECK-PREFIXED-NOT: call void @_mcount
46+
// CHECK-DOUBLE-PREFIXED: call void @__mcount
47+
// CHECK-DOUBLE-PREFIXED: call void @__mcount
48+
// CHECK-DOUBLE-PREFIXED: call void @__mcount
49+
// CHECK-DOUBLE-PREFIXED-NOT: call void @__mcount
50+
// NO-MCOUNT-NOT: call void @{{.*}}mcount
51+
// NO-MCOUNT1-NOT: call void @{{.*}}mcount

clang/test/Frontend/gnu-mcount.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ int f() {
4343

4444
// CHECK-LABEL: f
4545
// TODO: add profiling support for arm-baremetal
46-
// UNSUPPORTED-NOT: "instrument-function-entry-inlined"=
47-
// CHECK-ARM-EABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01mcount"{{.*}} }
48-
// MCOUNT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"
49-
// UNDER: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01_mcount"
50-
// UNDER_UNDER: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="__mcount"
51-
// CHECK-ARM64-EABI-FREEBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"=".mcount"{{.*}} }
52-
// CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="llvm.arm.gnu.eabi.mcount"{{.*}} }
46+
// UNSUPPORTED-NOT: call void
47+
// CHECK-ARM-EABI: call void @"\01mcount"()
48+
// MCOUNT: call void @mcount()
49+
// UNDER: call void @"\01_mcount"()
50+
// UNDER_UNDER: call void @__mcount()
51+
// CHECK-ARM64-EABI-FREEBSD: call void @.mcount()
52+
// CHECK-ARM-EABI-MEABI-GNU: call void @llvm.arm.gnu.eabi.mcount()

llvm/include/llvm/Transforms/Utils/EntryExitInstrumenter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ struct EntryExitInstrumenterPass
2828
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2929

3030
bool PostInlining;
31+
32+
static bool isRequired() { return true; }
3133
};
3234

3335
} // namespace llvm

llvm/lib/CodeGen/TargetPassConfig.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -864,9 +864,6 @@ void TargetPassConfig::addIRPasses() {
864864
if (getOptLevel() != CodeGenOpt::None && !DisablePartialLibcallInlining)
865865
addPass(createPartiallyInlineLibCallsPass());
866866

867-
// Instrument function entry and exit, e.g. with calls to mcount().
868-
addPass(createPostInlineEntryExitInstrumenterPass());
869-
870867
// Add scalarization of target's unsupported masked memory intrinsics pass.
871868
// the unsupported intrinsic will be replaced with a chain of basic blocks,
872869
// that stores/loads element one-by-one if the appropriate mask bit is set.

llvm/lib/Transforms/IPO/PassManagerBuilder.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,6 @@ void PassManagerBuilder::addInitialAliasAnalysisPasses(
300300
void PassManagerBuilder::populateFunctionPassManager(
301301
legacy::FunctionPassManager &FPM) {
302302
addExtensionsToPM(EP_EarlyAsPossible, FPM);
303-
FPM.add(createEntryExitInstrumenterPass());
304303

305304
// Add LibraryInfo if we have some.
306305
if (LibraryInfo)

llvm/test/CodeGen/AArch64/O0-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
; CHECK-NEXT: Shadow Stack GC Lowering
2222
; CHECK-NEXT: Lower constant intrinsics
2323
; CHECK-NEXT: Remove unreachable blocks from the CFG
24-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
2524
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
2625
; CHECK-NEXT: Expand reduction intrinsics
2726
; CHECK-NEXT: AArch64 Stack Tagging

llvm/test/CodeGen/AArch64/O3-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
; CHECK-NEXT: Constant Hoisting
5757
; CHECK-NEXT: Replace intrinsics with calls to vector library
5858
; CHECK-NEXT: Partially inline calls to library functions
59-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
6059
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
6160
; CHECK-NEXT: Expand reduction intrinsics
6261
; CHECK-NEXT: Stack Safety Analysis

llvm/test/CodeGen/AMDGPU/opt-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
; GCN-O0-NEXT: FunctionPass Manager
1111
; GCN-O0-NEXT: Early propagate attributes from kernels to functions
1212
; GCN-O0-NEXT: Replace builtin math calls with that native versions.
13-
; GCN-O0-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
1413

1514
; GCN-O0-NEXT: Pass Arguments:
1615
; GCN-O0-NEXT: Target Library Information
@@ -42,7 +41,6 @@
4241
; GCN-O1-NEXT: Basic Alias Analysis (stateless AA impl)
4342
; GCN-O1-NEXT: Function Alias Analysis Results
4443
; GCN-O1-NEXT: Simplify well-known AMD library calls
45-
; GCN-O1-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
4644
; GCN-O1-NEXT: Simplify the CFG
4745
; GCN-O1-NEXT: Dominator Tree Construction
4846
; GCN-O1-NEXT: SROA
@@ -352,7 +350,6 @@
352350
; GCN-O2-NEXT: Basic Alias Analysis (stateless AA impl)
353351
; GCN-O2-NEXT: Function Alias Analysis Results
354352
; GCN-O2-NEXT: Simplify well-known AMD library calls
355-
; GCN-O2-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
356353
; GCN-O2-NEXT: Simplify the CFG
357354
; GCN-O2-NEXT: Dominator Tree Construction
358355
; GCN-O2-NEXT: SROA
@@ -707,7 +704,6 @@
707704
; GCN-O3-NEXT: Basic Alias Analysis (stateless AA impl)
708705
; GCN-O3-NEXT: Function Alias Analysis Results
709706
; GCN-O3-NEXT: Simplify well-known AMD library calls
710-
; GCN-O3-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
711707
; GCN-O3-NEXT: Simplify the CFG
712708
; GCN-O3-NEXT: Dominator Tree Construction
713709
; GCN-O3-NEXT: SROA

llvm/test/CodeGen/ARM/O3-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
; CHECK-NEXT: Constant Hoisting
3737
; CHECK-NEXT: Replace intrinsics with calls to vector library
3838
; CHECK-NEXT: Partially inline calls to library functions
39-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
4039
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
4140
; CHECK-NEXT: Expand reduction intrinsics
4241
; CHECK-NEXT: Natural Loop Information

llvm/test/CodeGen/ARM/gnu_mcount_nc.ll

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ define dso_local void @callee() #0 {
1818
; CHECK-THUMB-FAST-ISEL-NEXT: bl __gnu_mcount_nc
1919
; CHECK-THUMB-GLOBAL-ISEL: push {lr}
2020
; CHECK-THUMB-GLOBAL-ISEL-NEXT: bl __gnu_mcount_nc
21+
call void @llvm.arm.gnu.eabi.mcount()
2122
ret void
2223
}
2324

@@ -34,8 +35,12 @@ define dso_local void @caller() #0 {
3435
; CHECK-THUMB-FAST-ISEL-NEXT: bl __gnu_mcount_nc
3536
; CHECK-THUMB-GLOBAL-ISEL: push {lr}
3637
; CHECK-THUMB-GLOBAL-ISEL-NEXT: bl __gnu_mcount_nc
38+
call void @llvm.arm.gnu.eabi.mcount()
3739
call void @callee()
3840
ret void
3941
}
4042

41-
attributes #0 = { nofree nounwind "instrument-function-entry-inlined"="llvm.arm.gnu.eabi.mcount" }
43+
declare void @llvm.arm.gnu.eabi.mcount() #1
44+
45+
attributes #0 = { nofree nounwind }
46+
attributes #1 = { nounwind }

llvm/test/CodeGen/Mips/long-call-mcount.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
; RUN: llc -march=mips -target-abi o32 --mattr=-long-calls,+noabicalls < %s \
55
; RUN: -mips-jalr-reloc=false | FileCheck -check-prefixes=CHECK,SHORT %s
66

7-
; Function Attrs: noinline nounwind optnone
8-
define void @foo() #0 {
7+
define void @foo() {
98
entry:
9+
call void @_mcount()
1010
ret void
1111

1212
; CHECK-LABEL: foo
@@ -16,4 +16,4 @@ entry:
1616
; SHORT: jal _mcount
1717
}
1818

19-
attributes #0 = { "instrument-function-entry-inlined"="_mcount" }
19+
declare void @_mcount()

llvm/test/CodeGen/Mips/mcount.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515

1616
; Test that checks ABI for _mcount calls.
1717

18-
; Function Attrs: noinline nounwind optnone
19-
define void @foo() #0 {
18+
define void @foo() {
2019
; MIPS32-LABEL: foo:
2120
; MIPS32: # %bb.0: # %entry
2221
; MIPS32-NEXT: addiu $sp, $sp, -24
@@ -117,7 +116,8 @@ define void @foo() #0 {
117116
; MIPS32-MM-PIC-NEXT: jr $ra
118117
; MIPS32-MM-PIC-NEXT: addiu $sp, $sp, 24
119118
entry:
119+
call void @_mcount()
120120
ret void
121121
}
122122

123-
attributes #0 = { "instrument-function-entry-inlined"="_mcount" }
123+
declare void @_mcount()

llvm/test/CodeGen/PowerPC/mcount-insertion.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt -ee-instrument < %s | opt -inline | llc -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s
1+
; RUN: opt -ee-instrument < %s | opt -inline | opt -post-inline-ee-instrument | llc -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s
22

33
; The run-line mimics how Clang might run the instrumentation passes.
44

llvm/test/CodeGen/X86/O0-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
; CHECK-NEXT: Shadow Stack GC Lowering
2525
; CHECK-NEXT: Lower constant intrinsics
2626
; CHECK-NEXT: Remove unreachable blocks from the CFG
27-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
2827
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
2928
; CHECK-NEXT: Expand reduction intrinsics
3029
; CHECK-NEXT: Expand indirectbr instructions

llvm/test/CodeGen/X86/musttail-inalloca.ll

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ target triple = "i386-pc-windows-msvc19.16.0"
1313

1414
declare dso_local x86_thiscallcc void @methodWithVtorDisp(i8* nocapture readonly, <{ %struct.Args }>* inalloca)
1515

16+
; Function Attrs: nounwind optsize
1617
define dso_local x86_thiscallcc void @methodWithVtorDisp_thunk(i8* %0, <{ %struct.Args }>* inalloca %1) #0 {
1718
; CHECK-LABEL: methodWithVtorDisp_thunk:
1819
; CHECK: # %bb.0:
@@ -31,8 +32,16 @@ define dso_local x86_thiscallcc void @methodWithVtorDisp_thunk(i8* %0, <{ %struc
3132
%5 = load i32, i32* %4, align 4
3233
%6 = sub i32 0, %5
3334
%7 = getelementptr i8, i8* %0, i32 %6
35+
%8 = call i8* @llvm.returnaddress(i32 0)
36+
call void @__cyg_profile_func_exit(i8* bitcast (void (i8*, <{ %struct.Args }>*)* @methodWithVtorDisp_thunk to i8*), i8* %8)
3437
musttail call x86_thiscallcc void @methodWithVtorDisp(i8* %7, <{ %struct.Args }>* inalloca nonnull %1)
3538
ret void
3639
}
3740

38-
attributes #0 = { nounwind optsize "instrument-function-exit-inlined"="__cyg_profile_func_exit" }
41+
declare void @__cyg_profile_func_exit(i8*, i8*)
42+
43+
; Function Attrs: nofree nosync nounwind readnone willreturn
44+
declare i8* @llvm.returnaddress(i32 immarg) #1
45+
46+
attributes #0 = { nounwind optsize }
47+
attributes #1 = { nofree nosync nounwind readnone willreturn }

llvm/test/CodeGen/X86/opt-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
; CHECK-NEXT: Constant Hoisting
5454
; CHECK-NEXT: Replace intrinsics with calls to vector library
5555
; CHECK-NEXT: Partially inline calls to library functions
56-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
5756
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
5857
; CHECK-NEXT: Expand reduction intrinsics
5958
; CHECK-NEXT: Interleaved Access Pass

llvm/test/Other/opt-O0-pipeline-enable-matrix.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
; CHECK-NEXT: Target Transform Information
77
; CHECK-NEXT: FunctionPass Manager
88
; CHECK-NEXT: Module Verifier
9-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
109
; CHECK-NEXT: Lower the matrix intrinsics (minimal)
1110

1211

llvm/test/Other/opt-O0-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
; CHECK-NEXT: FunctionPass Manager
1111
; CHECK-NEXT: Module Verifier
1212
; CHECK-EXT: Good Bye World Pass
13-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
1413
; CHECK-NEXT: Pass Arguments:
1514
; CHECK-NEXT: Target Library Information
1615
; CHECK-NEXT: Target Transform Information

llvm/test/Other/opt-O2-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
; CHECK-NEXT: Module Verifier
1313
; CHECK-EXT: Good Bye World Pass
1414
; CHECK-NOEXT-NOT: Good Bye World Pass
15-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
1615
; CHECK-NEXT: Simplify the CFG
1716
; CHECK-NEXT: Dominator Tree Construction
1817
; CHECK-NEXT: SROA

llvm/test/Other/opt-O3-pipeline-enable-matrix.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
; CHECK-NEXT: Module Verifier
1313
; CHECK-EXT: Good Bye World Pass
1414
; CHECK-NOEXT-NOT: Good Bye World Pass
15-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
1615
; CHECK-NEXT: Simplify the CFG
1716
; CHECK-NEXT: Dominator Tree Construction
1817
; CHECK-NEXT: SROA

llvm/test/Other/opt-O3-pipeline.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
; CHECK-NEXT: Module Verifier
1313
; CHECK-EXT: Good Bye World Pass
1414
; CHECK-NOEXT-NOT: Good Bye World Pass
15-
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
1615
; CHECK-NEXT: Simplify the CFG
1716
; CHECK-NEXT: Dominator Tree Construction
1817
; CHECK-NEXT: SROA

0 commit comments

Comments
 (0)