Skip to content

Commit 949d400

Browse files
committed
[IRGen] Store target machine on GeneratedModule
This will avoid needing to recreate it when we come to perform LLVM passes.
1 parent 9bc5be3 commit 949d400

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

include/swift/AST/IRGenRequests.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "swift/AST/SimpleRequest.h"
2323
#include "swift/Basic/PrimarySpecificPaths.h"
2424
#include "llvm/ADT/StringSet.h"
25+
#include "llvm/Target/TargetMachine.h"
2526

2627
namespace swift {
2728
class SourceFile;
@@ -39,6 +40,7 @@ namespace llvm {
3940
class GlobalVariable;
4041
class LLVMContext;
4142
class Module;
43+
class TargetMachine;
4244

4345
namespace orc {
4446
class ThreadSafeModule;
@@ -58,8 +60,9 @@ class GeneratedModule final {
5860
private:
5961
std::unique_ptr<llvm::LLVMContext> Context;
6062
std::unique_ptr<llvm::Module> Module;
63+
std::unique_ptr<llvm::TargetMachine> Target;
6164

62-
GeneratedModule() : Context(nullptr), Module(nullptr) {}
65+
GeneratedModule() : Context(nullptr), Module(nullptr), Target(nullptr) {}
6366

6467
GeneratedModule(GeneratedModule const &) = delete;
6568
GeneratedModule &operator=(GeneratedModule const &) = delete;
@@ -70,10 +73,13 @@ class GeneratedModule final {
7073
/// The given pointers must not be null. If a null \c GeneratedModule is
7174
/// needed, use \c GeneratedModule::null() instead.
7275
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)) {
7580
assert(getModule() && "Use GeneratedModule::null() instead");
7681
assert(getContext() && "Use GeneratedModule::null() instead");
82+
assert(getTargetMachine() && "Use GeneratedModule::null() instead");
7783
}
7884

7985
GeneratedModule(GeneratedModule &&) = default;
@@ -97,6 +103,9 @@ class GeneratedModule final {
97103
const llvm::LLVMContext *getContext() const { return Context.get(); }
98104
llvm::LLVMContext *getContext() { return Context.get(); }
99105

106+
const llvm::TargetMachine *getTargetMachine() const { return Target.get(); }
107+
llvm::TargetMachine *getTargetMachine() { return Target.get(); }
108+
100109
public:
101110
/// Release ownership of the context and module to the caller, consuming
102111
/// this value in the process.

lib/IRGen/IRGenModule.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,7 @@ GeneratedModule IRGenModule::intoGeneratedModule() && {
934934
return GeneratedModule{
935935
std::move(LLVMContext),
936936
std::unique_ptr<llvm::Module>{ClangCodeGen->ReleaseModule()},
937+
std::move(TargetMachine)
937938
};
938939
}
939940

0 commit comments

Comments
 (0)