LLVM  9.0.0svn
AddressPool.h
Go to the documentation of this file.
1 //===- llvm/CodeGen/AddressPool.h - Dwarf Debug Framework -------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H
10 #define LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H
11 
12 #include "llvm/ADT/DenseMap.h"
13 
14 namespace llvm {
15 
16 class AsmPrinter;
17 class MCSection;
18 class MCSymbol;
19 
20 // Collection of addresses for this unit and assorted labels.
21 // A Symbol->unsigned mapping of addresses used by indirect
22 // references.
23 class AddressPool {
24  struct AddressPoolEntry {
25  unsigned Number;
26  bool TLS;
27 
28  AddressPoolEntry(unsigned Number, bool TLS) : Number(Number), TLS(TLS) {}
29  };
31 
32  /// Record whether the AddressPool has been queried for an address index since
33  /// the last "resetUsedFlag" call. Used to implement type unit fallback - a
34  /// type that references addresses cannot be placed in a type unit when using
35  /// fission.
36  bool HasBeenUsed = false;
37 
38 public:
39  AddressPool() = default;
40 
41  /// Returns the index into the address pool with the given
42  /// label/symbol.
43  unsigned getIndex(const MCSymbol *Sym, bool TLS = false);
44 
45  void emit(AsmPrinter &Asm, MCSection *AddrSection);
46 
47  bool isEmpty() { return Pool.empty(); }
48 
49  bool hasBeenUsed() const { return HasBeenUsed; }
50 
51  void resetUsedFlag() { HasBeenUsed = false; }
52 
53  MCSymbol *getLabel() { return AddressTableBaseSym; }
54  void setLabel(MCSymbol *Sym) { AddressTableBaseSym = Sym; }
55 
56 private:
57  MCSymbol *emitHeader(AsmPrinter &Asm, MCSection *Section);
58 
59  /// Symbol designates the start of the contribution to the address table.
60  MCSymbol *AddressTableBaseSym = nullptr;
61 };
62 
63 } // end namespace llvm
64 
65 #endif // LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:38
void setLabel(MCSymbol *Sym)
Definition: AddressPool.h:54
This class represents lattice values for constants.
Definition: AllocatorList.h:23
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
void emit(AsmPrinter &Asm, MCSection *AddrSection)
Definition: AddressPool.cpp:47
This class is intended to be used as a driving class for all asm writers.
Definition: AsmPrinter.h:78
MCSymbol * getLabel()
Definition: AddressPool.h:53
void resetUsedFlag()
Definition: AddressPool.h:51
AddressPool()=default
bool hasBeenUsed() const
Definition: AddressPool.h:49
unsigned getIndex(const MCSymbol *Sym, bool TLS=false)
Returns the index into the address pool with the given label/symbol.
Definition: AddressPool.cpp:19