brintos

brintos / llvm-project-archived public Read only

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