mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
d548975423
We currently always store absolute filenames in coverage mapping. This is problematic for several reasons. It poses a problem for distributed compilation as source location might vary across machines. We are also duplicating the path prefix potentially wasting space. This change modifies how we store filenames in coverage mapping. Rather than absolute paths, it stores the compilation directory and file paths as given to the compiler, either relative or absolute. Later when reading the coverage mapping information, we recombine relative paths with the working directory. This approach is similar to handling ofDW_AT_comp_dir in DWARF. Finally, we also provide a new option, -fprofile-compilation-dir akin to -fdebug-compilation-dir which can be used to manually override the compilation directory which is useful in distributed compilation cases. Differential Revision: https://reviews.llvm.org/D95753
62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
//===- CoverageMappingWriter.h - Code coverage mapping writer ---*- C++ -*-===//
|
|
//
|
|
// 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 contains support for writing coverage mapping data for
|
|
// instrumentation based coverage.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
|
|
#define LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/ProfileData/Coverage/CoverageMapping.h"
|
|
|
|
namespace llvm {
|
|
|
|
class raw_ostream;
|
|
|
|
namespace coverage {
|
|
|
|
/// Writer of the filenames section for the instrumentation
|
|
/// based code coverage.
|
|
class CoverageFilenamesSectionWriter {
|
|
ArrayRef<std::string> Filenames;
|
|
|
|
public:
|
|
CoverageFilenamesSectionWriter(ArrayRef<std::string> Filenames);
|
|
|
|
/// Write encoded filenames to the given output stream. If \p Compress is
|
|
/// true, attempt to compress the filenames.
|
|
void write(raw_ostream &OS, bool Compress = true);
|
|
};
|
|
|
|
/// Writer for instrumentation based coverage mapping data.
|
|
class CoverageMappingWriter {
|
|
ArrayRef<unsigned> VirtualFileMapping;
|
|
ArrayRef<CounterExpression> Expressions;
|
|
MutableArrayRef<CounterMappingRegion> MappingRegions;
|
|
|
|
public:
|
|
CoverageMappingWriter(ArrayRef<unsigned> VirtualFileMapping,
|
|
ArrayRef<CounterExpression> Expressions,
|
|
MutableArrayRef<CounterMappingRegion> MappingRegions)
|
|
: VirtualFileMapping(VirtualFileMapping), Expressions(Expressions),
|
|
MappingRegions(MappingRegions) {}
|
|
|
|
/// Write encoded coverage mapping data to the given output stream.
|
|
void write(raw_ostream &OS);
|
|
};
|
|
|
|
} // end namespace coverage
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_PROFILEDATA_COVERAGE_COVERAGEMAPPINGWRITER_H
|