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