blob: 38f7a654571ea98bfd870c839c0390d348429897 [file] [log] [blame]
Lang Hamesc0056562015-10-20 04:35:02 +00001//===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Lang Hamesc0056562015-10-20 04:35:02 +000010#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
Chandler Carruth9a67b072017-06-06 11:06:56 +000011#include "OrcTestCommon.h"
Lang Hamesc0056562015-10-20 04:35:02 +000012#include "gtest/gtest.h"
13
14using namespace llvm;
15using namespace llvm::orc;
16
17namespace {
18
Lang Hames50b33442018-09-26 03:32:12 +000019class DummyTrampolinePool : public orc::TrampolinePool {
20public:
21 Expected<JITTargetAddress> getTrampoline() {
22 llvm_unreachable("Unimplemented");
23 }
24};
25
26class DummyCallbackManager : public JITCompileCallbackManager {
Lang Hamesc0056562015-10-20 04:35:02 +000027public:
Lang Hamesbd0cb782018-05-30 01:57:45 +000028 DummyCallbackManager(ExecutionSession &ES)
Lang Hames50b33442018-09-26 03:32:12 +000029 : JITCompileCallbackManager(llvm::make_unique<DummyTrampolinePool>(), ES,
30 0) {}
Lang Hamesc0056562015-10-20 04:35:02 +000031};
32
Lang Hamesea39de82015-12-06 19:44:45 +000033class DummyStubsManager : public orc::IndirectStubsManager {
Lang Hamesc0056562015-10-20 04:35:02 +000034public:
Lang Hamesad4a9112016-08-01 20:49:11 +000035 Error createStub(StringRef StubName, JITTargetAddress InitAddr,
Lang Hames1fa0e0e2016-04-25 21:21:20 +000036 JITSymbolFlags Flags) override {
Lang Hames3f88a9e2015-10-29 22:04:22 +000037 llvm_unreachable("Not implemented");
38 }
39
Lang Hamesef5a0ee2016-04-25 19:56:45 +000040 Error createStubs(const StubInitsMap &StubInits) override {
Lang Hamesc0056562015-10-20 04:35:02 +000041 llvm_unreachable("Not implemented");
42 }
43
Lang Hames353499f2018-06-03 02:18:03 +000044 JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
Lang Hamesc0056562015-10-20 04:35:02 +000045 llvm_unreachable("Not implemented");
46 }
47
Lang Hames353499f2018-06-03 02:18:03 +000048 JITEvaluatedSymbol findPointer(StringRef Name) override {
Lang Hamesc0056562015-10-20 04:35:02 +000049 llvm_unreachable("Not implemented");
50 }
51
Lang Hamesad4a9112016-08-01 20:49:11 +000052 Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
Lang Hamesc0056562015-10-20 04:35:02 +000053 llvm_unreachable("Not implemented");
54 }
55};
56
Lang Hames079df9a2018-10-15 22:56:10 +000057TEST(LegacyCompileOnDemandLayerTest, FindSymbol) {
Lang Hamescf771ad2017-09-28 02:17:35 +000058 MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
59 TestBaseLayer.findSymbolImpl =
60 [](const std::string &Name, bool) {
61 if (Name == "foo")
62 return JITSymbol(1, JITSymbolFlags::Exported);
63 return JITSymbol(nullptr);
64 };
Lang Hamesc0056562015-10-20 04:35:02 +000065
Lang Hamesc0056562015-10-20 04:35:02 +000066
Lang Hames3fdfc042018-04-02 20:57:56 +000067 ExecutionSession ES(std::make_shared<SymbolStringPool>());
Lang Hamesbd0cb782018-05-30 01:57:45 +000068 DummyCallbackManager CallbackMgr(ES);
Lang Hames4b546c92018-02-06 21:25:11 +000069
70 auto GetResolver =
71 [](orc::VModuleKey) -> std::shared_ptr<llvm::orc::SymbolResolver> {
72 llvm_unreachable("Should never be called");
73 };
74
75 auto SetResolver = [](orc::VModuleKey, std::shared_ptr<orc::SymbolResolver>) {
76 llvm_unreachable("Should never be called");
77 };
78
Lang Hames079df9a2018-10-15 22:56:10 +000079 llvm::orc::LegacyCompileOnDemandLayer<decltype(TestBaseLayer)> COD(
Lang Hames4b546c92018-02-06 21:25:11 +000080 ES, TestBaseLayer, GetResolver, SetResolver,
81 [](Function &F) { return std::set<Function *>{&F}; }, CallbackMgr,
82 [] { return llvm::make_unique<DummyStubsManager>(); }, true);
David Blaikiea895aa62015-11-04 19:43:24 +000083
Lang Hamesc0056562015-10-20 04:35:02 +000084 auto Sym = COD.findSymbol("foo", true);
85
Lang Hames1fa0e0e2016-04-25 21:21:20 +000086 EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
87 "the base layer.";
Lang Hamesc0056562015-10-20 04:35:02 +000088}
Lang Hamesc0056562015-10-20 04:35:02 +000089}