blob: 59cd11c5e5a683961c4b86d4cbbb60196d338978 [file] [log] [blame]
Lang Hamesc0056562015-10-20 04:35:02 +00001//===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Lang Hamesc0056562015-10-20 04:35:02 +00006//
7//===----------------------------------------------------------------------===//
8
Lang Hamesc0056562015-10-20 04:35:02 +00009#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
Chandler Carruth9a67b072017-06-06 11:06:56 +000010#include "OrcTestCommon.h"
Lang Hamesc0056562015-10-20 04:35:02 +000011#include "gtest/gtest.h"
12
13using namespace llvm;
14using namespace llvm::orc;
15
16namespace {
17
Lang Hames50b33442018-09-26 03:32:12 +000018class DummyTrampolinePool : public orc::TrampolinePool {
19public:
20 Expected<JITTargetAddress> getTrampoline() {
21 llvm_unreachable("Unimplemented");
22 }
23};
24
25class DummyCallbackManager : public JITCompileCallbackManager {
Lang Hamesc0056562015-10-20 04:35:02 +000026public:
Lang Hamesbd0cb782018-05-30 01:57:45 +000027 DummyCallbackManager(ExecutionSession &ES)
Jonas Devlieghere0eaee542019-08-15 15:54:37 +000028 : JITCompileCallbackManager(std::make_unique<DummyTrampolinePool>(), ES,
Lang Hames50b33442018-09-26 03:32:12 +000029 0) {}
Lang Hamesc0056562015-10-20 04:35:02 +000030};
31
Lang Hamesea39de82015-12-06 19:44:45 +000032class DummyStubsManager : public orc::IndirectStubsManager {
Lang Hamesc0056562015-10-20 04:35:02 +000033public:
Lang Hamesad4a9112016-08-01 20:49:11 +000034 Error createStub(StringRef StubName, JITTargetAddress InitAddr,
Lang Hames1fa0e0e2016-04-25 21:21:20 +000035 JITSymbolFlags Flags) override {
Lang Hames3f88a9e2015-10-29 22:04:22 +000036 llvm_unreachable("Not implemented");
37 }
38
Lang Hamesef5a0ee2016-04-25 19:56:45 +000039 Error createStubs(const StubInitsMap &StubInits) override {
Lang Hamesc0056562015-10-20 04:35:02 +000040 llvm_unreachable("Not implemented");
41 }
42
Lang Hames353499f2018-06-03 02:18:03 +000043 JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
Lang Hamesc0056562015-10-20 04:35:02 +000044 llvm_unreachable("Not implemented");
45 }
46
Lang Hames353499f2018-06-03 02:18:03 +000047 JITEvaluatedSymbol findPointer(StringRef Name) override {
Lang Hamesc0056562015-10-20 04:35:02 +000048 llvm_unreachable("Not implemented");
49 }
50
Lang Hamesad4a9112016-08-01 20:49:11 +000051 Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
Lang Hamesc0056562015-10-20 04:35:02 +000052 llvm_unreachable("Not implemented");
53 }
54};
55
Lang Hames079df9a2018-10-15 22:56:10 +000056TEST(LegacyCompileOnDemandLayerTest, FindSymbol) {
Lang Hamescf771ad2017-09-28 02:17:35 +000057 MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
58 TestBaseLayer.findSymbolImpl =
59 [](const std::string &Name, bool) {
60 if (Name == "foo")
61 return JITSymbol(1, JITSymbolFlags::Exported);
62 return JITSymbol(nullptr);
63 };
Lang Hamesc0056562015-10-20 04:35:02 +000064
Lang Hamesc0056562015-10-20 04:35:02 +000065
Lang Hames3fdfc042018-04-02 20:57:56 +000066 ExecutionSession ES(std::make_shared<SymbolStringPool>());
Lang Hamesbd0cb782018-05-30 01:57:45 +000067 DummyCallbackManager CallbackMgr(ES);
Lang Hames4b546c92018-02-06 21:25:11 +000068
69 auto GetResolver =
70 [](orc::VModuleKey) -> std::shared_ptr<llvm::orc::SymbolResolver> {
71 llvm_unreachable("Should never be called");
72 };
73
74 auto SetResolver = [](orc::VModuleKey, std::shared_ptr<orc::SymbolResolver>) {
75 llvm_unreachable("Should never be called");
76 };
77
Lang Hames079df9a2018-10-15 22:56:10 +000078 llvm::orc::LegacyCompileOnDemandLayer<decltype(TestBaseLayer)> COD(
Lang Hames17164542019-07-17 16:40:52 +000079 AcknowledgeORCv1Deprecation, ES, TestBaseLayer, GetResolver, SetResolver,
Lang Hames4b546c92018-02-06 21:25:11 +000080 [](Function &F) { return std::set<Function *>{&F}; }, CallbackMgr,
Jonas Devlieghere0eaee542019-08-15 15:54:37 +000081 [] { return std::make_unique<DummyStubsManager>(); }, true);
David Blaikiea895aa62015-11-04 19:43:24 +000082
Lang Hamesc0056562015-10-20 04:35:02 +000083 auto Sym = COD.findSymbol("foo", true);
84
Lang Hames1fa0e0e2016-04-25 21:21:20 +000085 EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
86 "the base layer.";
Lang Hamesc0056562015-10-20 04:35:02 +000087}
Lang Hamesc0056562015-10-20 04:35:02 +000088}