57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
//=-- InstrProfIndexed.h - Indexed profiling format support -------*- C++ -*-=//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// Shared header for the instrumented profile data reader and writer.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_LIB_PROFILEDATA_INSTRPROFINDEXED_H
 | 
						|
#define LLVM_LIB_PROFILEDATA_INSTRPROFINDEXED_H
 | 
						|
 | 
						|
#include "llvm/Support/Endian.h"
 | 
						|
#include "llvm/Support/ErrorHandling.h"
 | 
						|
#include "llvm/Support/MD5.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
 | 
						|
namespace IndexedInstrProf {
 | 
						|
enum class HashT : uint32_t {
 | 
						|
  MD5,
 | 
						|
 | 
						|
  Last = MD5
 | 
						|
};
 | 
						|
 | 
						|
static inline uint64_t MD5Hash(StringRef Str) {
 | 
						|
  MD5 Hash;
 | 
						|
  Hash.update(Str);
 | 
						|
  llvm::MD5::MD5Result Result;
 | 
						|
  Hash.final(Result);
 | 
						|
  // Return the least significant 8 bytes. Our MD5 implementation returns the
 | 
						|
  // result in little endian, so we may need to swap bytes.
 | 
						|
  using namespace llvm::support;
 | 
						|
  return endian::read<uint64_t, little, unaligned>(Result);
 | 
						|
}
 | 
						|
 | 
						|
static inline uint64_t ComputeHash(HashT Type, StringRef K) {
 | 
						|
  switch (Type) {
 | 
						|
  case HashT::MD5:
 | 
						|
    return IndexedInstrProf::MD5Hash(K);
 | 
						|
  }
 | 
						|
  llvm_unreachable("Unhandled hash type");
 | 
						|
}
 | 
						|
 | 
						|
const uint64_t Magic = 0x8169666f72706cff; // "\xfflprofi\x81"
 | 
						|
const uint64_t Version = 2;
 | 
						|
const HashT HashType = HashT::MD5;
 | 
						|
}
 | 
						|
 | 
						|
} // end namespace llvm
 | 
						|
 | 
						|
#endif
 |