1*3cab2bb3Spatrick /*===- InstrProfilingMergeFile.c - Profile in-process Merging ------------===*\ 2*3cab2bb3Spatrick |* 3*3cab2bb3Spatrick |* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*3cab2bb3Spatrick |* See https://llvm.org/LICENSE.txt for license information. 5*3cab2bb3Spatrick |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*3cab2bb3Spatrick |* 7*3cab2bb3Spatrick |*===----------------------------------------------------------------------=== 8*3cab2bb3Spatrick |* This file defines APIs needed to support in-process merging for profile data 9*3cab2bb3Spatrick |* stored in files. 10*3cab2bb3Spatrick \*===----------------------------------------------------------------------===*/ 11*3cab2bb3Spatrick 12*3cab2bb3Spatrick #if !defined(__Fuchsia__) 13*3cab2bb3Spatrick 14*3cab2bb3Spatrick #include "InstrProfiling.h" 15*3cab2bb3Spatrick #include "InstrProfilingInternal.h" 16*3cab2bb3Spatrick #include "InstrProfilingUtil.h" 17*3cab2bb3Spatrick 18*3cab2bb3Spatrick #define INSTR_PROF_VALUE_PROF_DATA 19*3cab2bb3Spatrick #include "profile/InstrProfData.inc" 20*3cab2bb3Spatrick 21*3cab2bb3Spatrick /* Merge value profile data pointed to by SrcValueProfData into 22*3cab2bb3Spatrick * in-memory profile counters pointed by to DstData. */ 23*3cab2bb3Spatrick COMPILER_RT_VISIBILITY lprofMergeValueProfData(ValueProfData * SrcValueProfData,__llvm_profile_data * DstData)24*3cab2bb3Spatrickvoid lprofMergeValueProfData(ValueProfData *SrcValueProfData, 25*3cab2bb3Spatrick __llvm_profile_data *DstData) { 26*3cab2bb3Spatrick unsigned I, S, V, DstIndex = 0; 27*3cab2bb3Spatrick InstrProfValueData *VData; 28*3cab2bb3Spatrick ValueProfRecord *VR = getFirstValueProfRecord(SrcValueProfData); 29*3cab2bb3Spatrick for (I = 0; I < SrcValueProfData->NumValueKinds; I++) { 30*3cab2bb3Spatrick VData = getValueProfRecordValueData(VR); 31*3cab2bb3Spatrick unsigned SrcIndex = 0; 32*3cab2bb3Spatrick for (S = 0; S < VR->NumValueSites; S++) { 33*3cab2bb3Spatrick uint8_t NV = VR->SiteCountArray[S]; 34*3cab2bb3Spatrick for (V = 0; V < NV; V++) { 35*3cab2bb3Spatrick __llvm_profile_instrument_target_value(VData[SrcIndex].Value, DstData, 36*3cab2bb3Spatrick DstIndex, VData[SrcIndex].Count); 37*3cab2bb3Spatrick ++SrcIndex; 38*3cab2bb3Spatrick } 39*3cab2bb3Spatrick ++DstIndex; 40*3cab2bb3Spatrick } 41*3cab2bb3Spatrick VR = getValueProfRecordNext(VR); 42*3cab2bb3Spatrick } 43*3cab2bb3Spatrick } 44*3cab2bb3Spatrick 45*3cab2bb3Spatrick #endif 46