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 15namespace llvm { 16class MCSection; 17class MCSymbol; 18class AsmPrinter; 19// Collection of addresses for this unit and assorted labels. 20// A Symbol->unsigned mapping of addresses used by indirect 21// references. 22class AddressPool { 23 struct AddressPoolEntry { 24 unsigned Number; 25 bool TLS; 26 AddressPoolEntry(unsigned Number, bool TLS) : Number(Number), TLS(TLS) {} 27 }; 28 DenseMap<const MCSymbol *, AddressPoolEntry> Pool; 29 30 /// Record whether the AddressPool has been queried for an address index since 31 /// the last "resetUsedFlag" call. Used to implement type unit fallback - a 32 /// type that references addresses cannot be placed in a type unit when using 33 /// fission. 34 bool HasBeenUsed; 35 36public: 37 AddressPool() : HasBeenUsed(false) {} 38 39 /// \brief Returns the index into the address pool with the given 40 /// label/symbol. 41 unsigned getIndex(const MCSymbol *Sym, bool TLS = false); 42 43 void emit(AsmPrinter &Asm, MCSection *AddrSection); 44 45 bool isEmpty() { return Pool.empty(); } 46 47 bool hasBeenUsed() const { return HasBeenUsed; } 48 49 void resetUsedFlag() { HasBeenUsed = false; } 50}; 51} 52#endif 53