; REQUIRES:x86_64-linux ; Test flattening indirect calls into "VP" MD_prof metadata, in prelink. ; RUN: split-file %s %t ; RUN: llvm-ctxprof-util fromYAML --input %t/profile.yaml --output %t/profile.ctxprofdata ; RUN: opt -passes=ctx-prof-flatten-prethinlink %t/example.ll -use-ctx-profile=%t/profile.ctxprofdata \ ; RUN: -S -o - | FileCheck %s --check-prefix=PRELINK ; PRELINK: call void @llvm.instrprof.callsite(ptr @foo, i64 1234, i32 2, i32 0, ptr %p) ; PRELINK-NEXT: call void %p(), !prof ![[VPPROF:[0-9]+]] ; PRELINK-NEXT: call void @llvm.instrprof.callsite(ptr @foo, i64 1234, i32 2, i32 1, ptr @bar) ; PRELINK-NEXT: call void @bar(){{$}} ; PRELINK: ![[VPPROF]] = !{!"VP", i32 0, i64 25, i64 5678, i64 20, i64 5555, i64 5} ; RUN: cp %t/example.ll %t/1234.ll ; RUN: opt -passes=ctx-prof-flatten %t/1234.ll -use-ctx-profile=%t/profile.ctxprofdata \ ; RUN: -S -o - | FileCheck %s --check-prefix=POSTLINK ; RUN: opt -passes=ctx-prof-flatten %t/example.ll -use-ctx-profile=%t/profile.ctxprofdata \ ; RUN: -S -o - | FileCheck %s --check-prefix=POSTLINK ; POSTLINK-NOT: call void %p(), !prof ;--- example.ll declare !guid !0 void @bar() define void @foo(ptr %p) !guid !1 { call void @llvm.instrprof.increment(ptr @foo, i64 1234, i32 1, i32 0) call void @llvm.instrprof.callsite(ptr @foo, i64 1234, i32 2, i32 0, ptr %p) call void %p() call void @llvm.instrprof.callsite(ptr @foo, i64 1234, i32 2, i32 1, ptr @bar) call void @bar() ret void } !0 = !{i64 8888} !1 = !{i64 1234} ;--- profile.yaml Contexts: - Guid: 1234 TotalRootEntryCount: 5 Counters: [5] Callsites: - - Guid: 5555 Counters: [1] - Guid: 5678 Counters: [4] - - Guid: 8888 Counters: [5]