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 #include "llvm/MC/MCSymbol.h" 15 16 namespace llvm { 17 class MCSection; 18 class AsmPrinter; 19 // Collection of addresses for this unit and assorted labels. 20 // A Symbol->unsigned mapping of addresses used by indirect 21 // references. 22 class 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 36 public: 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