blob: ebcd00b1522781a6a22300a5cd95e50d3e438f7f [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- WasmTraits.h - DenseMap traits for the Wasm structures ---*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file provides llvm::DenseMapInfo traits for the Wasm structures.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_OBJECT_WASMTRAITS_H
15#define LLVM_OBJECT_WASMTRAITS_H
16
17#include "llvm/ADT/Hashing.h"
18#include "llvm/BinaryFormat/Wasm.h"
19
20namespace llvm {
21
22template <typename T> struct DenseMapInfo;
23
24// Traits for using WasmSignature in a DenseMap.
25template <> struct DenseMapInfo<wasm::WasmSignature> {
26 static wasm::WasmSignature getEmptyKey() {
27 return wasm::WasmSignature{{}, 1};
28 }
29 static wasm::WasmSignature getTombstoneKey() {
30 return wasm::WasmSignature{{}, 2};
31 }
32 static unsigned getHashValue(const wasm::WasmSignature &Sig) {
33 unsigned H = hash_value(Sig.ReturnType);
34 for (int32_t Param : Sig.ParamTypes)
35 H = hash_combine(H, Param);
36 return H;
37 }
38 static bool isEqual(const wasm::WasmSignature &LHS,
39 const wasm::WasmSignature &RHS) {
40 return LHS == RHS;
41 }
42};
43
44// Traits for using WasmGlobalType in a DenseMap
45template <> struct DenseMapInfo<wasm::WasmGlobalType> {
46 static wasm::WasmGlobalType getEmptyKey() {
47 return wasm::WasmGlobalType{1, true};
48 }
49 static wasm::WasmGlobalType getTombstoneKey() {
50 return wasm::WasmGlobalType{2, true};
51 }
52 static unsigned getHashValue(const wasm::WasmGlobalType &GlobalType) {
53 return hash_combine(GlobalType.Type, GlobalType.Mutable);
54 }
55 static bool isEqual(const wasm::WasmGlobalType &LHS,
56 const wasm::WasmGlobalType &RHS) {
57 return LHS == RHS;
58 }
59};
60
61} // end namespace llvm
62
63#endif // LLVM_OBJECT_WASMTRAITS_H