]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfoImpls.h
zfs: merge openzfs/zfs@52bad4f23 (zfs-2.1-release) into stable/13
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm / CodeGen / MachineModuleInfoImpls.h
1 //===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- 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 // This file defines object-file format specific implementations of
10 // MachineModuleInfoImpl.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
15 #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
16
17 #include "llvm/ADT/DenseMap.h"
18 #include "llvm/ADT/StringSet.h"
19 #include "llvm/CodeGen/MachineModuleInfo.h"
20 #include <cassert>
21
22 namespace llvm {
23
24 class MCSymbol;
25
26 /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
27 /// for MachO targets.
28 class MachineModuleInfoMachO : public MachineModuleInfoImpl {
29   /// GVStubs - Darwin '$non_lazy_ptr' stubs.  The key is something like
30   /// "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra bit
31   /// is true if this GV is external.
32   DenseMap<MCSymbol *, StubValueTy> GVStubs;
33
34   /// ThreadLocalGVStubs - Darwin '$non_lazy_ptr' stubs.  The key is something
35   /// like "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra
36   /// bit is true if this GV is external.
37   DenseMap<MCSymbol *, StubValueTy> ThreadLocalGVStubs;
38
39   virtual void anchor(); // Out of line virtual method.
40
41 public:
42   MachineModuleInfoMachO(const MachineModuleInfo &) {}
43
44   StubValueTy &getGVStubEntry(MCSymbol *Sym) {
45     assert(Sym && "Key cannot be null");
46     return GVStubs[Sym];
47   }
48
49   StubValueTy &getThreadLocalGVStubEntry(MCSymbol *Sym) {
50     assert(Sym && "Key cannot be null");
51     return ThreadLocalGVStubs[Sym];
52   }
53
54   /// Accessor methods to return the set of stubs in sorted order.
55   SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
56   SymbolListTy GetThreadLocalGVStubList() {
57     return getSortedStubs(ThreadLocalGVStubs);
58   }
59 };
60
61 /// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation
62 /// for ELF targets.
63 class MachineModuleInfoELF : public MachineModuleInfoImpl {
64   /// GVStubs - These stubs are used to materialize global addresses in PIC
65   /// mode.
66   DenseMap<MCSymbol *, StubValueTy> GVStubs;
67
68   virtual void anchor(); // Out of line virtual method.
69
70 public:
71   MachineModuleInfoELF(const MachineModuleInfo &) {}
72
73   StubValueTy &getGVStubEntry(MCSymbol *Sym) {
74     assert(Sym && "Key cannot be null");
75     return GVStubs[Sym];
76   }
77
78   /// Accessor methods to return the set of stubs in sorted order.
79
80   SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
81 };
82
83 /// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation
84 /// for COFF targets.
85 class MachineModuleInfoCOFF : public MachineModuleInfoImpl {
86   /// GVStubs - These stubs are used to materialize global addresses in PIC
87   /// mode.
88   DenseMap<MCSymbol *, StubValueTy> GVStubs;
89
90   virtual void anchor(); // Out of line virtual method.
91
92 public:
93   MachineModuleInfoCOFF(const MachineModuleInfo &) {}
94
95   StubValueTy &getGVStubEntry(MCSymbol *Sym) {
96     assert(Sym && "Key cannot be null");
97     return GVStubs[Sym];
98   }
99
100   /// Accessor methods to return the set of stubs in sorted order.
101
102   SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
103 };
104
105 /// MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation
106 /// for Wasm targets.
107 class MachineModuleInfoWasm : public MachineModuleInfoImpl {
108   virtual void anchor(); // Out of line virtual method.
109
110 public:
111   MachineModuleInfoWasm(const MachineModuleInfo &) {}
112
113   StringSet<> MachineSymbolsUsed;
114 };
115
116 } // end namespace llvm
117
118 #endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H