
This header fragment is useful on its own for any consumer that wants to use custom instruction profile runtime with the LLVM instrumentation. The concrete use case is in Fuchsia's kernel where we want to use instruction profile instrumentation, but we cannot use the compiler-rt runtime because it's not designed for use in the kernel environment. This change allows installing this header as part of compiler-rt. Differential Revision: https://reviews.llvm.org/D64532
46 lines
1.6 KiB
C
46 lines
1.6 KiB
C
/*===- InstrProfilingMergeFile.c - Profile in-process Merging ------------===*\
|
|
|*
|
|
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|* See https://llvm.org/LICENSE.txt for license information.
|
|
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|*
|
|
|*===----------------------------------------------------------------------===
|
|
|* This file defines APIs needed to support in-process merging for profile data
|
|
|* stored in files.
|
|
\*===----------------------------------------------------------------------===*/
|
|
|
|
#if !defined(__Fuchsia__)
|
|
|
|
#include "InstrProfiling.h"
|
|
#include "InstrProfilingInternal.h"
|
|
#include "InstrProfilingUtil.h"
|
|
|
|
#define INSTR_PROF_VALUE_PROF_DATA
|
|
#include "profile/InstrProfData.inc"
|
|
|
|
/* Merge value profile data pointed to by SrcValueProfData into
|
|
* in-memory profile counters pointed by to DstData. */
|
|
COMPILER_RT_VISIBILITY
|
|
void lprofMergeValueProfData(ValueProfData *SrcValueProfData,
|
|
__llvm_profile_data *DstData) {
|
|
unsigned I, S, V, DstIndex = 0;
|
|
InstrProfValueData *VData;
|
|
ValueProfRecord *VR = getFirstValueProfRecord(SrcValueProfData);
|
|
for (I = 0; I < SrcValueProfData->NumValueKinds; I++) {
|
|
VData = getValueProfRecordValueData(VR);
|
|
unsigned SrcIndex = 0;
|
|
for (S = 0; S < VR->NumValueSites; S++) {
|
|
uint8_t NV = VR->SiteCountArray[S];
|
|
for (V = 0; V < NV; V++) {
|
|
__llvm_profile_instrument_target_value(VData[SrcIndex].Value, DstData,
|
|
DstIndex, VData[SrcIndex].Count);
|
|
++SrcIndex;
|
|
}
|
|
++DstIndex;
|
|
}
|
|
VR = getValueProfRecordNext(VR);
|
|
}
|
|
}
|
|
|
|
#endif
|