LCOV - code coverage report
Current view: top level - include/llvm/Object - WasmTraits.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 10 10 100.0 %
Date: 2018-10-20 13:21:21 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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             :     wasm::WasmSignature Sig;
      28        1371 :     Sig.State = wasm::WasmSignature::Empty;
      29             :     return Sig;
      30             :   }
      31             :   static wasm::WasmSignature getTombstoneKey() {
      32             :     wasm::WasmSignature Sig;
      33        1106 :     Sig.State = wasm::WasmSignature::Tombstone;
      34             :     return Sig;
      35             :   }
      36        1008 :   static unsigned getHashValue(const wasm::WasmSignature &Sig) {
      37        1008 :     uintptr_t H = hash_value(Sig.State);
      38        1542 :     for (auto Ret : Sig.Returns)
      39         534 :       H = hash_combine(H, Ret);
      40        1100 :     for (auto Param : Sig.Params)
      41          92 :       H = hash_combine(H, Param);
      42        1008 :     return H;
      43             :   }
      44             :   static bool isEqual(const wasm::WasmSignature &LHS,
      45             :                       const wasm::WasmSignature &RHS) {
      46        6805 :     return LHS == RHS;
      47             :   }
      48             : };
      49             : 
      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};
      54             :   }
      55             :   static wasm::WasmGlobalType getTombstoneKey() {
      56             :     return wasm::WasmGlobalType{2, true};
      57             :   }
      58             :   static unsigned getHashValue(const wasm::WasmGlobalType &GlobalType) {
      59             :     return hash_combine(GlobalType.Type, GlobalType.Mutable);
      60             :   }
      61             :   static bool isEqual(const wasm::WasmGlobalType &LHS,
      62             :                       const wasm::WasmGlobalType &RHS) {
      63             :     return LHS == RHS;
      64             :   }
      65             : };
      66             : 
      67             : } // end namespace llvm
      68             : 
      69             : #endif // LLVM_OBJECT_WASMTRAITS_H

Generated by: LCOV version 1.13