llvm/lib/ProfileData/InstrProf.cpp
Justin Bogner c96f87a892 InstrProf: Support for value profiling in the indexed profile format
Add support to the indexed instrprof reader and writer for the format
that will be used for value profiling.

Patch by Betul Buyukkurt, with minor modifications.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248833 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-29 22:13:58 +00:00

66 lines
2.3 KiB
C++

//=-- InstrProf.cpp - Instrumented profiling format support -----------------=//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains support for clang's instrumentation based PGO and
// coverage.
//
//===----------------------------------------------------------------------===//
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ManagedStatic.h"
using namespace llvm;
namespace {
class InstrProfErrorCategoryType : public std::error_category {
const char *name() const LLVM_NOEXCEPT override { return "llvm.instrprof"; }
std::string message(int IE) const override {
instrprof_error E = static_cast<instrprof_error>(IE);
switch (E) {
case instrprof_error::success:
return "Success";
case instrprof_error::eof:
return "End of File";
case instrprof_error::bad_magic:
return "Invalid profile data (bad magic)";
case instrprof_error::bad_header:
return "Invalid profile data (file header is corrupt)";
case instrprof_error::unsupported_version:
return "Unsupported profiling format version";
case instrprof_error::unsupported_hash_type:
return "Unsupported profiling hash";
case instrprof_error::too_large:
return "Too much profile data";
case instrprof_error::truncated:
return "Truncated profile data";
case instrprof_error::malformed:
return "Malformed profile data";
case instrprof_error::unknown_function:
return "No profile data available for function";
case instrprof_error::hash_mismatch:
return "Function hash mismatch";
case instrprof_error::count_mismatch:
return "Function count mismatch";
case instrprof_error::counter_overflow:
return "Counter overflow";
case instrprof_error::value_site_count_mismatch:
return "Function's value site counts mismatch";
}
llvm_unreachable("A value of instrprof_error has no message.");
}
};
}
static ManagedStatic<InstrProfErrorCategoryType> ErrorCategory;
const std::error_category &llvm::instrprof_category() {
return *ErrorCategory;
}