LCOV - code coverage report
Current view: top level - lib/CodeGen/AsmPrinter - AddressPool.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 5 7 71.4 %
Date: 2018-10-20 13:21:21 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- llvm/CodeGen/AddressPool.h - Dwarf Debug Framework -------*- 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             : #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H
      11             : #define LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H
      12             : 
      13             : #include "llvm/ADT/DenseMap.h"
      14             : 
      15             : namespace llvm {
      16             : 
      17             : class AsmPrinter;
      18             : class MCSection;
      19             : class MCSymbol;
      20             : 
      21             : // Collection of addresses for this unit and assorted labels.
      22             : // A Symbol->unsigned mapping of addresses used by indirect
      23             : // references.
      24       26844 : class AddressPool {
      25             :   struct AddressPoolEntry {
      26             :     unsigned Number;
      27             :     bool TLS;
      28             : 
      29         100 :     AddressPoolEntry(unsigned Number, bool TLS) : Number(Number), TLS(TLS) {}
      30             :   };
      31             :   DenseMap<const MCSymbol *, AddressPoolEntry> Pool;
      32             : 
      33             :   /// Record whether the AddressPool has been queried for an address index since
      34             :   /// the last "resetUsedFlag" call. Used to implement type unit fallback - a
      35             :   /// type that references addresses cannot be placed in a type unit when using
      36             :   /// fission.
      37             :   bool HasBeenUsed = false;
      38             : 
      39             : public:
      40       26982 :   AddressPool() = default;
      41             : 
      42             :   /// Returns the index into the address pool with the given
      43             :   /// label/symbol.
      44             :   unsigned getIndex(const MCSymbol *Sym, bool TLS = false);
      45             : 
      46             :   void emit(AsmPrinter &Asm, MCSection *AddrSection);
      47             : 
      48             :   bool isEmpty() { return Pool.empty(); }
      49             : 
      50           0 :   bool hasBeenUsed() const { return HasBeenUsed; }
      51             : 
      52          44 :   void resetUsedFlag() { HasBeenUsed = false; }
      53             : 
      54           0 :   MCSymbol *getLabel() { return AddressTableBaseSym; }
      55       26982 :   void setLabel(MCSymbol *Sym) { AddressTableBaseSym = Sym; }
      56             : 
      57             : private:
      58             :   void emitHeader(AsmPrinter &Asm, MCSection *Section);
      59             : 
      60             :   /// Symbol designates the start of the contribution to the address table.
      61             :   MCSymbol *AddressTableBaseSym = nullptr;
      62             : };
      63             : 
      64             : } // end namespace llvm
      65             : 
      66             : #endif // LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H

Generated by: LCOV version 1.13