22
22
#include " swift/AST/SimpleRequest.h"
23
23
#include " swift/Basic/PrimarySpecificPaths.h"
24
24
#include " llvm/ADT/StringSet.h"
25
+ #include " llvm/Target/TargetMachine.h"
25
26
26
27
namespace swift {
27
28
class SourceFile ;
@@ -39,6 +40,7 @@ namespace llvm {
39
40
class GlobalVariable ;
40
41
class LLVMContext ;
41
42
class Module ;
43
+ class TargetMachine ;
42
44
43
45
namespace orc {
44
46
class ThreadSafeModule ;
@@ -58,8 +60,9 @@ class GeneratedModule final {
58
60
private:
59
61
std::unique_ptr<llvm::LLVMContext> Context;
60
62
std::unique_ptr<llvm::Module> Module;
63
+ std::unique_ptr<llvm::TargetMachine> Target;
61
64
62
- GeneratedModule () : Context(nullptr ), Module(nullptr ) {}
65
+ GeneratedModule () : Context(nullptr ), Module(nullptr ), Target( nullptr ) {}
63
66
64
67
GeneratedModule (GeneratedModule const &) = delete ;
65
68
GeneratedModule &operator =(GeneratedModule const &) = delete ;
@@ -70,10 +73,13 @@ class GeneratedModule final {
70
73
// / The given pointers must not be null. If a null \c GeneratedModule is
71
74
// / needed, use \c GeneratedModule::null() instead.
72
75
explicit GeneratedModule (std::unique_ptr<llvm::LLVMContext> &&Context,
73
- std::unique_ptr<llvm::Module> &&Module)
74
- : Context(std::move(Context)), Module(std::move(Module)) {
76
+ std::unique_ptr<llvm::Module> &&Module,
77
+ std::unique_ptr<llvm::TargetMachine> &&Target)
78
+ : Context(std::move(Context)), Module(std::move(Module)),
79
+ Target(std::move(Target)) {
75
80
assert (getModule () && " Use GeneratedModule::null() instead" );
76
81
assert (getContext () && " Use GeneratedModule::null() instead" );
82
+ assert (getTargetMachine () && " Use GeneratedModule::null() instead" );
77
83
}
78
84
79
85
GeneratedModule (GeneratedModule &&) = default ;
@@ -97,6 +103,9 @@ class GeneratedModule final {
97
103
const llvm::LLVMContext *getContext () const { return Context.get (); }
98
104
llvm::LLVMContext *getContext () { return Context.get (); }
99
105
106
+ const llvm::TargetMachine *getTargetMachine () const { return Target.get (); }
107
+ llvm::TargetMachine *getTargetMachine () { return Target.get (); }
108
+
100
109
public:
101
110
// / Release ownership of the context and module to the caller, consuming
102
111
// / this value in the process.
0 commit comments