]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/CodeGen/MachineModuleInfoImpls.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / CodeGen / MachineModuleInfoImpls.h
1 //===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- 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 // This file defines object-file format specific implementations of
11 // MachineModuleInfoImpl.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
16 #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
17
18 #include "llvm/ADT/DenseMap.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 } // end namespace llvm
106
107 #endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H