mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
e9b4f95b30
In particular this patch switches RTDyldObjectLinkingLayer to use orc::SymbolResolver and threads the requried changse (ExecutionSession references and VModuleKeys) through the existing layer APIs. The purpose of the new resolver interface is to improve query performance and better support parallelism, both in JIT'd code and within the compiler itself. The most visibile change is switch of the <Layer>::addModule signatures from: Expected<Handle> addModule(std::shared_ptr<ModuleType> Mod, std::shared_ptr<JITSymbolResolver> Resolver) to: Expected<Handle> addModule(VModuleKey K, std::shared_ptr<ModuleType> Mod); Typical usage of addModule will now look like: auto K = ES.allocateVModuleKey(); Resolvers[K] = createSymbolResolver(...); Layer.addModule(K, std::move(Mod)); See the BuildingAJIT tutorial code for example usage. llvm-svn: 324405
32 lines
869 B
C++
32 lines
869 B
C++
//===- LazyEmittingLayerTest.cpp - Unit tests for the lazy emitting layer -===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/ExecutionEngine/Orc/LazyEmittingLayer.h"
|
|
#include "llvm/ExecutionEngine/RuntimeDyld.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace {
|
|
|
|
struct MockBaseLayer {
|
|
typedef int ModuleHandleT;
|
|
ModuleHandleT addModule(llvm::orc::VModuleKey,
|
|
std::shared_ptr<llvm::Module>) {
|
|
return 42;
|
|
}
|
|
};
|
|
|
|
TEST(LazyEmittingLayerTest, Empty) {
|
|
MockBaseLayer M;
|
|
llvm::orc::LazyEmittingLayer<MockBaseLayer> L(M);
|
|
cantFail(
|
|
L.addModule(llvm::orc::VModuleKey(), std::unique_ptr<llvm::Module>()));
|
|
}
|
|
|
|
}
|