1 //===- 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 20 namespace llvm { 21 22 template <typename T> struct DenseMapInfo; 23 24 // Traits for using WasmSignature in a DenseMap. 25 template <> 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 45 template <> 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 64