Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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