@@ -66,58 +66,6 @@ struct LLVMInitRAII {
66
66
~LLVMInitRAII () { llvm::llvm_shutdown (); }
67
67
} LLVMInit;
68
68
69
- class TestCreateResetExecutor : public Interpreter {
70
- public:
71
- TestCreateResetExecutor (std::unique_ptr<CompilerInstance> CI,
72
- llvm::Error &Err)
73
- : Interpreter(std::move(CI), Err) {}
74
-
75
- llvm::Error testCreateJITBuilderError () {
76
- JB = nullptr ;
77
- return Interpreter::CreateExecutor ();
78
- }
79
-
80
- llvm::Error testCreateExecutor () {
81
- JB = std::make_unique<llvm::orc::LLJITBuilder>();
82
- return Interpreter::CreateExecutor ();
83
- }
84
-
85
- void resetExecutor () { Interpreter::ResetExecutor (); }
86
-
87
- private:
88
- llvm::Expected<std::unique_ptr<llvm::orc::LLJITBuilder>>
89
- CreateJITBuilder (CompilerInstance &CI) override {
90
- if (JB)
91
- return std::move (JB);
92
- return llvm::make_error<llvm::StringError>(" TestError" , std::error_code ());
93
- }
94
-
95
- std::unique_ptr<llvm::orc::LLJITBuilder> JB;
96
- };
97
-
98
- #ifdef CLANG_INTERPRETER_PLATFORM_CANNOT_CREATE_LLJIT
99
- TEST (InterpreterExtensionsTest, DISABLED_ExecutorCreateReset) {
100
- #else
101
- TEST (InterpreterExtensionsTest, ExecutorCreateReset) {
102
- #endif
103
- // Make sure we can create the executer on the platform.
104
- if (!HostSupportsJit ())
105
- GTEST_SKIP ();
106
-
107
- clang::IncrementalCompilerBuilder CB;
108
- llvm::Error ErrOut = llvm::Error::success ();
109
- TestCreateResetExecutor Interp (cantFail (CB.CreateCpp ()), ErrOut);
110
- cantFail (std::move (ErrOut));
111
- EXPECT_THAT_ERROR (Interp.testCreateJITBuilderError (),
112
- llvm::FailedWithMessage (" TestError" ));
113
- cantFail (Interp.testCreateExecutor ());
114
- Interp.resetExecutor ();
115
- cantFail (Interp.testCreateExecutor ());
116
- EXPECT_THAT_ERROR (Interp.testCreateExecutor (),
117
- llvm::FailedWithMessage (" Operation failed. "
118
- " Execution engine exists" ));
119
- }
120
-
121
69
class RecordRuntimeIBMetrics : public Interpreter {
122
70
struct NoopRuntimeInterfaceBuilder : public RuntimeInterfaceBuilder {
123
71
NoopRuntimeInterfaceBuilder (Sema &S) : S(S) {}
@@ -173,25 +121,15 @@ class CustomJBInterpreter : public Interpreter {
173
121
CustomJITBuilderCreatorFunction JBCreator = nullptr ;
174
122
175
123
public:
176
- CustomJBInterpreter (std::unique_ptr<CompilerInstance> CI, llvm::Error &ErrOut)
177
- : Interpreter(std::move(CI), ErrOut) {}
124
+ CustomJBInterpreter (std::unique_ptr<CompilerInstance> CI, llvm::Error &ErrOut,
125
+ std::unique_ptr<llvm::orc::LLJITBuilder> JB)
126
+ : Interpreter(std::move(CI), ErrOut, std::move(JB)) {}
178
127
179
128
~CustomJBInterpreter () override {
180
129
// Skip cleanUp() because it would trigger LLJIT default dtors
181
130
Interpreter::ResetExecutor ();
182
131
}
183
132
184
- void setCustomJITBuilderCreator (CustomJITBuilderCreatorFunction Fn) {
185
- JBCreator = std::move (Fn);
186
- }
187
-
188
- llvm::Expected<std::unique_ptr<llvm::orc::LLJITBuilder>>
189
- CreateJITBuilder (CompilerInstance &CI) override {
190
- if (JBCreator)
191
- return JBCreator ();
192
- return Interpreter::CreateJITBuilder (CI);
193
- }
194
-
195
133
llvm::Error CreateExecutor () { return Interpreter::CreateExecutor (); }
196
134
};
197
135
@@ -207,9 +145,8 @@ TEST(InterpreterExtensionsTest, DefaultCrossJIT) {
207
145
CB.SetTargetTriple (" armv6-none-eabi" );
208
146
auto CI = cantFail (CB.CreateCpp ());
209
147
llvm::Error ErrOut = llvm::Error::success ();
210
- CustomJBInterpreter Interp (std::move (CI), ErrOut);
148
+ CustomJBInterpreter Interp (std::move (CI), ErrOut, nullptr );
211
149
cantFail (std::move (ErrOut));
212
- cantFail (Interp.CreateExecutor ());
213
150
}
214
151
215
152
#ifdef CLANG_INTERPRETER_PLATFORM_CANNOT_CREATE_LLJIT
@@ -225,35 +162,34 @@ TEST(InterpreterExtensionsTest, CustomCrossJIT) {
225
162
IncrementalCompilerBuilder CB;
226
163
CB.SetTargetTriple (TargetTriple);
227
164
auto CI = cantFail (CB.CreateCpp ());
228
- llvm::Error ErrOut = llvm::Error::success ();
229
- CustomJBInterpreter Interp (std::move (CI), ErrOut);
230
- cantFail (std::move (ErrOut));
231
165
232
166
using namespace llvm ::orc;
233
167
LLJIT *JIT = nullptr ;
234
168
std::vector<std::unique_ptr<llvm::MemoryBuffer>> Objs;
235
- Interp.setCustomJITBuilderCreator ([&]() {
236
- auto JTMB = JITTargetMachineBuilder (llvm::Triple (TargetTriple));
237
- JTMB.setCPU (" cortex-m0plus" );
238
- auto JB = std::make_unique<LLJITBuilder>();
239
- JB->setJITTargetMachineBuilder (JTMB);
240
- JB->setPlatformSetUp (setUpInactivePlatform);
241
- JB->setNotifyCreatedCallback ([&](LLJIT &J) {
242
- ObjectLayer &ObjLayer = J.getObjLinkingLayer ();
243
- auto *JITLinkObjLayer = llvm::dyn_cast<ObjectLinkingLayer>(&ObjLayer);
244
- JITLinkObjLayer->setReturnObjectBuffer (
245
- [&Objs](std::unique_ptr<llvm::MemoryBuffer> MB) {
246
- Objs.push_back (std::move (MB));
247
- });
248
- JIT = &J;
249
- return llvm::Error::success ();
250
- });
251
- return JB;
169
+ auto JTMB = JITTargetMachineBuilder (llvm::Triple (TargetTriple));
170
+ JTMB.setCPU (" cortex-m0plus" );
171
+
172
+ auto JB = std::make_unique<LLJITBuilder>();
173
+ JB->setJITTargetMachineBuilder (JTMB);
174
+ JB->setPlatformSetUp (setUpInactivePlatform);
175
+ JB->setNotifyCreatedCallback ([&](LLJIT &J) {
176
+ ObjectLayer &ObjLayer = J.getObjLinkingLayer ();
177
+ auto *JITLinkObjLayer = llvm::dyn_cast<ObjectLinkingLayer>(&ObjLayer);
178
+ JITLinkObjLayer->setReturnObjectBuffer (
179
+ [&Objs](std::unique_ptr<llvm::MemoryBuffer> MB) {
180
+ Objs.push_back (std::move (MB));
181
+ });
182
+ JIT = &J;
183
+ return llvm::Error::success ();
252
184
});
253
185
186
+ llvm::Error ErrOut = llvm::Error::success ();
187
+ CustomJBInterpreter Interp (std::move (CI), ErrOut, std::move (JB));
188
+ cantFail (std::move (ErrOut));
189
+
254
190
EXPECT_EQ (0U , Objs.size ());
255
- cantFail (Interp.CreateExecutor ());
256
191
cantFail (Interp.ParseAndExecute (" int a = 1;" ));
192
+ ASSERT_NE (JIT, nullptr ); // But it is, because JBCreator was never called
257
193
ExecutorAddr Addr = cantFail (JIT->lookup (" a" ));
258
194
EXPECT_NE (0U , Addr.getValue ());
259
195
EXPECT_EQ (1U , Objs.size ());
0 commit comments