1 //===- WasmTraits.h - DenseMap traits for the Wasm structures ---*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file provides llvm::DenseMapInfo traits for the Wasm structures.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_OBJECT_WASMTRAITS_H
15 #define LLVM_OBJECT_WASMTRAITS_H
17 #include "llvm/ADT/Hashing.h"
18 #include "llvm/BinaryFormat/Wasm.h"
22 template <typename T> struct DenseMapInfo;
24 // Traits for using WasmSignature in a DenseMap.
25 template <> struct DenseMapInfo<wasm::WasmSignature> {
26 static wasm::WasmSignature getEmptyKey() {
27 wasm::WasmSignature Sig;
28 Sig.State = wasm::WasmSignature::Empty;
31 static wasm::WasmSignature getTombstoneKey() {
32 wasm::WasmSignature Sig;
33 Sig.State = wasm::WasmSignature::Tombstone;
36 static unsigned getHashValue(const wasm::WasmSignature &Sig) {
37 uintptr_t H = hash_value(Sig.State);
38 for (auto Ret : Sig.Returns)
39 H = hash_combine(H, Ret);
40 for (auto Param : Sig.Params)
41 H = hash_combine(H, Param);
44 static bool isEqual(const wasm::WasmSignature &LHS,
45 const wasm::WasmSignature &RHS) {
50 // Traits for using WasmGlobalType in a DenseMap
51 template <> struct DenseMapInfo<wasm::WasmGlobalType> {
52 static wasm::WasmGlobalType getEmptyKey() {
53 return wasm::WasmGlobalType{1, true};
55 static wasm::WasmGlobalType getTombstoneKey() {
56 return wasm::WasmGlobalType{2, true};
58 static unsigned getHashValue(const wasm::WasmGlobalType &GlobalType) {
59 return hash_combine(GlobalType.Type, GlobalType.Mutable);
61 static bool isEqual(const wasm::WasmGlobalType &LHS,
62 const wasm::WasmGlobalType &RHS) {
67 } // end namespace llvm
69 #endif // LLVM_OBJECT_WASMTRAITS_H