]> git.lizzy.rs Git - rust.git/blob - src/rustllvm/CoverageMappingWrapper.cpp
Fix font color for help button in ayu and dark themes
[rust.git] / src / rustllvm / CoverageMappingWrapper.cpp
1 #include "rustllvm.h"
2 #include "llvm/ProfileData/Coverage/CoverageMapping.h"
3 #include "llvm/ProfileData/Coverage/CoverageMappingWriter.h"
4 #include "llvm/ProfileData/InstrProf.h"
5 #include "llvm/ADT/ArrayRef.h"
6
7 #include <iostream>
8
9 using namespace llvm;
10
11 extern "C" void LLVMRustCoverageWriteFilenamesSectionToBuffer(
12     const char* const Filenames[],
13     size_t FilenamesLen,
14     RustStringRef BufferOut) {
15   SmallVector<StringRef,32> FilenameRefs;
16   for (size_t i = 0; i < FilenamesLen; i++) {
17     FilenameRefs.push_back(StringRef(Filenames[i]));
18   }
19   auto FilenamesWriter = coverage::CoverageFilenamesSectionWriter(
20     makeArrayRef(FilenameRefs));
21   RawRustStringOstream OS(BufferOut);
22   FilenamesWriter.write(OS);
23 }
24
25 extern "C" void LLVMRustCoverageWriteMappingToBuffer(
26     const unsigned *VirtualFileMappingIDs,
27     unsigned NumVirtualFileMappingIDs,
28     const coverage::CounterExpression *Expressions,
29     unsigned NumExpressions,
30     coverage::CounterMappingRegion *MappingRegions,
31     unsigned NumMappingRegions,
32     RustStringRef BufferOut) {
33   auto CoverageMappingWriter = coverage::CoverageMappingWriter(
34       makeArrayRef(VirtualFileMappingIDs, NumVirtualFileMappingIDs),
35       makeArrayRef(Expressions, NumExpressions),
36       makeMutableArrayRef(MappingRegions, NumMappingRegions));
37   RawRustStringOstream OS(BufferOut);
38   CoverageMappingWriter.write(OS);
39 }
40
41 extern "C" LLVMValueRef LLVMRustCoverageCreatePGOFuncNameVar(LLVMValueRef F, const char *FuncName) {
42   StringRef FuncNameRef(FuncName);
43   return wrap(createPGOFuncNameVar(*cast<Function>(unwrap(F)), FuncNameRef));
44 }
45
46 extern "C" uint64_t LLVMRustCoverageComputeHash(const char *Name) {
47   StringRef NameRef(Name);
48   return IndexedInstrProf::ComputeHash(NameRef);
49 }
50
51 extern "C" void LLVMRustCoverageWriteSectionNameToString(LLVMModuleRef M,
52                                                          RustStringRef Str) {
53   Triple TargetTriple(unwrap(M)->getTargetTriple());
54   auto name = getInstrProfSectionName(IPSK_covmap,
55                                       TargetTriple.getObjectFormat());
56   RawRustStringOstream OS(Str);
57   OS << name;
58 }
59
60 extern "C" void LLVMRustCoverageWriteMappingVarNameToString(RustStringRef Str) {
61   auto name = getCoverageMappingVarName();
62   RawRustStringOstream OS(Str);
63   OS << name;
64 }
65
66 extern "C" uint32_t LLVMRustCoverageMappingVersion() {
67   return coverage::CovMapVersion::CurrentVersion;
68 }