1 | //===- WasmTraits.h - DenseMap traits for the Wasm structures ---*- C++ -*-===// |
---|---|
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file provides llvm::DenseMapInfo traits for the Wasm structures. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #ifndef LLVM_BINARYFORMAT_WASMTRAITS_H |
14 | #define LLVM_BINARYFORMAT_WASMTRAITS_H |
15 | |
16 | #include "llvm/ADT/Hashing.h" |
17 | #include "llvm/BinaryFormat/Wasm.h" |
18 | |
19 | namespace llvm { |
20 | |
21 | template <typename T> struct DenseMapInfo; |
22 | |
23 | // Traits for using WasmSignature in a DenseMap. |
24 | template <> struct DenseMapInfo<wasm::WasmSignature> { |
25 | static wasm::WasmSignature getEmptyKey() { |
26 | wasm::WasmSignature Sig; |
27 | Sig.State = wasm::WasmSignature::Empty; |
28 | return Sig; |
29 | } |
30 | static wasm::WasmSignature getTombstoneKey() { |
31 | wasm::WasmSignature Sig; |
32 | Sig.State = wasm::WasmSignature::Tombstone; |
33 | return Sig; |
34 | } |
35 | static unsigned getHashValue(const wasm::WasmSignature &Sig) { |
36 | uintptr_t H = hash_value(Sig.State); |
37 | for (auto Ret : Sig.Returns) |
38 | H = hash_combine(H, Ret); |
39 | for (auto Param : Sig.Params) |
40 | H = hash_combine(H, Param); |
41 | return H; |
42 | } |
43 | static bool isEqual(const wasm::WasmSignature &LHS, |
44 | const wasm::WasmSignature &RHS) { |
45 | return LHS == RHS; |
46 | } |
47 | }; |
48 | |
49 | // Traits for using WasmGlobalType in a DenseMap |
50 | template <> struct DenseMapInfo<wasm::WasmGlobalType> { |
51 | static wasm::WasmGlobalType getEmptyKey() { |
52 | return wasm::WasmGlobalType{1, true}; |
53 | } |
54 | static wasm::WasmGlobalType getTombstoneKey() { |
55 | return wasm::WasmGlobalType{2, true}; |
56 | } |
57 | static unsigned getHashValue(const wasm::WasmGlobalType &GlobalType) { |
58 | return hash_combine(GlobalType.Type, GlobalType.Mutable); |
59 | } |
60 | static bool isEqual(const wasm::WasmGlobalType &LHS, |
61 | const wasm::WasmGlobalType &RHS) { |
62 | return LHS == RHS; |
63 | } |
64 | }; |
65 | |
66 | } // end namespace llvm |
67 | |
68 | #endif // LLVM_BINARYFORMAT_WASMTRAITS_H |
69 |