summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-06-17 18:59:01 +0000
committerLang Hames <lhames@gmail.com>2018-06-17 18:59:01 +0000
commita5247cc5c7a73f3e00c483e0ed36a683889d0ff2 (patch)
tree52d4a36d67791c99527bde44cd1bc4bd21724700 /llvm/unittests/ExecutionEngine
parent9fe45d846e0ce248cd3c785ffe9d99d479e06274 (diff)
downloadbcm5719-llvm-a5247cc5c7a73f3e00c483e0ed36a683889d0ff2.tar.gz
bcm5719-llvm-a5247cc5c7a73f3e00c483e0ed36a683889d0ff2.zip
[ORC] Only notify queries that they are resolved/ready when the query state
changes. This guards against redundant notifications. llvm-svn: 334916
Diffstat (limited to 'llvm/unittests/ExecutionEngine')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
index b809f34a37f..6e6c7371e1d 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
@@ -163,6 +163,60 @@ TEST(CoreAPIsTest, SimpleAsynchronousSymbolQueryAgainstVSO) {
EXPECT_TRUE(OnReadyRun) << "OnReady was not run";
}
+TEST(CoreAPIsTest, EmptyVSOAndQueryLookup) {
+ ExecutionSession ES;
+ auto &V = ES.createVSO("V");
+
+ bool OnResolvedRun = false;
+ bool OnReadyRun = false;
+
+ auto Q = std::make_shared<AsynchronousSymbolQuery>(
+ SymbolNameSet(),
+ [&](Expected<AsynchronousSymbolQuery::ResolutionResult> RR) {
+ cantFail(std::move(RR));
+ OnResolvedRun = true;
+ },
+ [&](Error Err) {
+ cantFail(std::move(Err));
+ OnReadyRun = true;
+ });
+
+ V.lookup(std::move(Q), {});
+
+ EXPECT_TRUE(OnResolvedRun) << "OnResolved was not run for empty query";
+ EXPECT_TRUE(OnReadyRun) << "OnReady was not run for empty query";
+}
+
+TEST(CoreAPIsTest, ChainedVSOLookup) {
+ ExecutionSession ES;
+ auto Foo = ES.getSymbolStringPool().intern("foo");
+ auto FooSym = JITEvaluatedSymbol(1U, JITSymbolFlags::Exported);
+
+ auto &V1 = ES.createVSO("V1");
+ cantFail(V1.define(absoluteSymbols({{Foo, FooSym}})));
+
+ auto &V2 = ES.createVSO("V2");
+
+ bool OnResolvedRun = false;
+ bool OnReadyRun = false;
+
+ auto Q = std::make_shared<AsynchronousSymbolQuery>(
+ SymbolNameSet({Foo}),
+ [&](Expected<AsynchronousSymbolQuery::ResolutionResult> RR) {
+ cantFail(std::move(RR));
+ OnResolvedRun = true;
+ },
+ [&](Error Err) {
+ cantFail(std::move(Err));
+ OnReadyRun = true;
+ });
+
+ V2.lookup(Q, V1.lookup(Q, {Foo}));
+
+ EXPECT_TRUE(OnResolvedRun) << "OnResolved was not run for empty query";
+ EXPECT_TRUE(OnReadyRun) << "OnReady was not run for empty query";
+}
+
TEST(CoreAPIsTest, LookupFlagsTest) {
// Test that lookupFlags works on a predefined symbol, and does not trigger
OpenPOWER on IntegriCloud