xref: /aosp_15_r20/external/llvm/unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "OrcTestCommon.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
12*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker using namespace llvm;
15*9880d681SAndroid Build Coastguard Worker using namespace llvm::orc;
16*9880d681SAndroid Build Coastguard Worker 
17*9880d681SAndroid Build Coastguard Worker namespace {
18*9880d681SAndroid Build Coastguard Worker 
19*9880d681SAndroid Build Coastguard Worker class DummyCallbackManager : public orc::JITCompileCallbackManager {
20*9880d681SAndroid Build Coastguard Worker public:
DummyCallbackManager()21*9880d681SAndroid Build Coastguard Worker   DummyCallbackManager() : JITCompileCallbackManager(0) {}
22*9880d681SAndroid Build Coastguard Worker 
23*9880d681SAndroid Build Coastguard Worker public:
grow()24*9880d681SAndroid Build Coastguard Worker   void grow() override { llvm_unreachable("not implemented"); }
25*9880d681SAndroid Build Coastguard Worker };
26*9880d681SAndroid Build Coastguard Worker 
27*9880d681SAndroid Build Coastguard Worker class DummyStubsManager : public orc::IndirectStubsManager {
28*9880d681SAndroid Build Coastguard Worker public:
createStub(StringRef StubName,TargetAddress InitAddr,JITSymbolFlags Flags)29*9880d681SAndroid Build Coastguard Worker   Error createStub(StringRef StubName, TargetAddress InitAddr,
30*9880d681SAndroid Build Coastguard Worker                    JITSymbolFlags Flags) override {
31*9880d681SAndroid Build Coastguard Worker     llvm_unreachable("Not implemented");
32*9880d681SAndroid Build Coastguard Worker   }
33*9880d681SAndroid Build Coastguard Worker 
createStubs(const StubInitsMap & StubInits)34*9880d681SAndroid Build Coastguard Worker   Error createStubs(const StubInitsMap &StubInits) override {
35*9880d681SAndroid Build Coastguard Worker     llvm_unreachable("Not implemented");
36*9880d681SAndroid Build Coastguard Worker   }
37*9880d681SAndroid Build Coastguard Worker 
findStub(StringRef Name,bool ExportedStubsOnly)38*9880d681SAndroid Build Coastguard Worker   JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
39*9880d681SAndroid Build Coastguard Worker     llvm_unreachable("Not implemented");
40*9880d681SAndroid Build Coastguard Worker   }
41*9880d681SAndroid Build Coastguard Worker 
findPointer(StringRef Name)42*9880d681SAndroid Build Coastguard Worker   JITSymbol findPointer(StringRef Name) override {
43*9880d681SAndroid Build Coastguard Worker     llvm_unreachable("Not implemented");
44*9880d681SAndroid Build Coastguard Worker   }
45*9880d681SAndroid Build Coastguard Worker 
updatePointer(StringRef Name,TargetAddress NewAddr)46*9880d681SAndroid Build Coastguard Worker   Error updatePointer(StringRef Name, TargetAddress NewAddr) override {
47*9880d681SAndroid Build Coastguard Worker     llvm_unreachable("Not implemented");
48*9880d681SAndroid Build Coastguard Worker   }
49*9880d681SAndroid Build Coastguard Worker };
50*9880d681SAndroid Build Coastguard Worker 
TEST(CompileOnDemandLayerTest,FindSymbol)51*9880d681SAndroid Build Coastguard Worker TEST(CompileOnDemandLayerTest, FindSymbol) {
52*9880d681SAndroid Build Coastguard Worker   auto MockBaseLayer = createMockBaseLayer<int>(
53*9880d681SAndroid Build Coastguard Worker       DoNothingAndReturn<int>(0), DoNothingAndReturn<void>(),
54*9880d681SAndroid Build Coastguard Worker       [](const std::string &Name, bool) {
55*9880d681SAndroid Build Coastguard Worker         if (Name == "foo")
56*9880d681SAndroid Build Coastguard Worker           return JITSymbol(1, JITSymbolFlags::Exported);
57*9880d681SAndroid Build Coastguard Worker         return JITSymbol(nullptr);
58*9880d681SAndroid Build Coastguard Worker       },
59*9880d681SAndroid Build Coastguard Worker       DoNothingAndReturn<JITSymbol>(nullptr));
60*9880d681SAndroid Build Coastguard Worker 
61*9880d681SAndroid Build Coastguard Worker   typedef decltype(MockBaseLayer) MockBaseLayerT;
62*9880d681SAndroid Build Coastguard Worker   DummyCallbackManager CallbackMgr;
63*9880d681SAndroid Build Coastguard Worker 
64*9880d681SAndroid Build Coastguard Worker   llvm::orc::CompileOnDemandLayer<MockBaseLayerT> COD(
65*9880d681SAndroid Build Coastguard Worker       MockBaseLayer, [](Function &F) { return std::set<Function *>{&F}; },
66*9880d681SAndroid Build Coastguard Worker       CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true);
67*9880d681SAndroid Build Coastguard Worker 
68*9880d681SAndroid Build Coastguard Worker   auto Sym = COD.findSymbol("foo", true);
69*9880d681SAndroid Build Coastguard Worker 
70*9880d681SAndroid Build Coastguard Worker   EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
71*9880d681SAndroid Build Coastguard Worker                         "the base layer.";
72*9880d681SAndroid Build Coastguard Worker }
73*9880d681SAndroid Build Coastguard Worker }
74