@@ -66,58 +66,6 @@ struct LLVMInitRAII {
6666 ~LLVMInitRAII () { llvm::llvm_shutdown (); }
6767} LLVMInit;
6868
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-
12169class RecordRuntimeIBMetrics : public Interpreter {
12270 struct NoopRuntimeInterfaceBuilder : public RuntimeInterfaceBuilder {
12371 NoopRuntimeInterfaceBuilder (Sema &S) : S(S) {}
@@ -173,25 +121,15 @@ class CustomJBInterpreter : public Interpreter {
173121 CustomJITBuilderCreatorFunction JBCreator = nullptr ;
174122
175123public:
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)) {}
178127
179128 ~CustomJBInterpreter () override {
180129 // Skip cleanUp() because it would trigger LLJIT default dtors
181130 Interpreter::ResetExecutor ();
182131 }
183132
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-
195133 llvm::Error CreateExecutor () { return Interpreter::CreateExecutor (); }
196134};
197135
@@ -207,9 +145,8 @@ TEST(InterpreterExtensionsTest, DefaultCrossJIT) {
207145 CB.SetTargetTriple (" armv6-none-eabi" );
208146 auto CI = cantFail (CB.CreateCpp ());
209147 llvm::Error ErrOut = llvm::Error::success ();
210- CustomJBInterpreter Interp (std::move (CI), ErrOut);
148+ CustomJBInterpreter Interp (std::move (CI), ErrOut, nullptr );
211149 cantFail (std::move (ErrOut));
212- cantFail (Interp.CreateExecutor ());
213150}
214151
215152#ifdef CLANG_INTERPRETER_PLATFORM_CANNOT_CREATE_LLJIT
@@ -225,35 +162,34 @@ TEST(InterpreterExtensionsTest, CustomCrossJIT) {
225162 IncrementalCompilerBuilder CB;
226163 CB.SetTargetTriple (TargetTriple);
227164 auto CI = cantFail (CB.CreateCpp ());
228- llvm::Error ErrOut = llvm::Error::success ();
229- CustomJBInterpreter Interp (std::move (CI), ErrOut);
230- cantFail (std::move (ErrOut));
231165
232166 using namespace llvm ::orc;
233167 LLJIT *JIT = nullptr ;
234168 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 ();
252184 });
253185
186+ llvm::Error ErrOut = llvm::Error::success ();
187+ CustomJBInterpreter Interp (std::move (CI), ErrOut, std::move (JB));
188+ cantFail (std::move (ErrOut));
189+
254190 EXPECT_EQ (0U , Objs.size ());
255- cantFail (Interp.CreateExecutor ());
256191 cantFail (Interp.ParseAndExecute (" int a = 1;" ));
192+ ASSERT_NE (JIT, nullptr ); // But it is, because JBCreator was never called
257193 ExecutorAddr Addr = cantFail (JIT->lookup (" a" ));
258194 EXPECT_NE (0U , Addr.getValue ());
259195 EXPECT_EQ (1U , Objs.size ());
0 commit comments