610 Commits

Author SHA1 Message Date
Zachary Turner
e05f54b4e7 [Windows] Remove the #include <eh.h> hack.
Prior to MSVC 2015 we had to manually include this header any
time we were going to include <thread> or <future> due to a
bug in MSVC's STL implementation.  This has been fixed in MSVC
for some time now, and we require VS 2015 minimum, so we can
remove this across all subprojects.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296906 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-03 20:21:59 +00:00
Lang Hames
2843487db5 [Orc][RPC] Accept both const char* and char* arguments for string serialization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296168 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-24 20:56:43 +00:00
Lang Hames
67191c1ced [Orc] Rename ObjectLinkingLayer -> RTDyldObjectLinkingLayer.
The current ObjectLinkingLayer (now RTDyldObjectLinkingLayer) links objects
in-process using MCJIT's RuntimeDyld class. In the near future I hope to add new
object linking layers (e.g. a remote linking layer that links objects in the JIT
target process, rather than the client), so I'm renaming this class to be more
descriptive.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295636 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-20 05:45:14 +00:00
Lang Hames
200c66b2e0 [Orc][RPC] Add a AsyncHandlerTraits specialization for non-value-type response
handler args.

The specialization just inherits from the std::decay'd response handler type.
This allows member functions (via MemberFunctionWrapper) to be used as async
handlers.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295151 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-15 05:39:35 +00:00
Lang Hames
7fb14d3d3d [Orc][RPC] Remove lanch policies in favor of async handlers.
Launch policies provided a mechanism for running RPC handlers on a background
thread (unblocking the main RPC receiver thread). Async handlers generalize
this by passing the responder function (the function that sends the RPC return
value) as an argument to the handler. The handler can optionally do its work on
a background thread (the same way launch policies do), but can also (a) can
inspect the call arguments before deciding to run the work on a different
thread, or (b) can use the responder in a subsequent RPC call (e.g. in the
handler of a callAsync), allowing the handler to call back to the originator (or
to a 3rd party) without blocking the listener thread, and without launching a
new thread.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295030 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-14 05:40:01 +00:00
Lang Hames
9e328120c0 [Orc][RPC] Add a HandlerTratis specialization for free functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294392 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-08 00:13:51 +00:00
Benjamin Kramer
11be2d20e4 [Orc] Add missing include.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293511 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-30 17:54:57 +00:00
Lang Hames
ca2b1542a0 [Orc][RPC] Have handleOne abandon pending responses upon channel failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293411 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-29 04:25:16 +00:00
Lang Hames
2535e5c9e1 [Orc][RPC] Remove redundant braces. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293410 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-29 04:09:01 +00:00
Lang Hames
11bb3e46eb [Orc][RPC] Remove a couple of redundant calls to abandonAllPendingResponses.
appendCallAsync, which all RPC call functions ultimately build on, will call
abandonAllPendingResponses on channel error. These extra calls are redundant.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293405 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-29 00:51:17 +00:00
Lang Hames
5a43f49c09 [Orc][RPC] Unlock message send/receive locks on failure.
This fixes some destruction-of-locked-mutex errors in RawByteChannel.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293375 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-28 10:19:47 +00:00
Lang Hames
7618fab047 [Orc][RPC] Refactor ParallelCallGroup to decouple it from RPCEndpoint.
This refactor allows parallel calls to be made via an arbitrary async call
dispatcher. In particular, this allows ParallelCallGroup to be used with
derived RPC classes that expose custom async RPC call operations.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292891 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-24 06:13:47 +00:00
Lang Hames
90e330dbb3 [Orc][RPC] Refactor some common remote-function-id negotiation code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292886 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-24 05:30:08 +00:00
Lang Hames
a5d7e7c789 [Orc][RPC] Add 'removeHandler' and 'clearHandlers' methods to RPC endpoints.
This can be used to free handler resources for handlers that won't be called
again.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292714 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-21 07:46:03 +00:00
Lang Hames
d7472fa68e [Orc][RPC] Return unsupported rpc function errors from the non-retry cases in
negotiateFunction.

These cases were accidentally left out of r292055, resulting in a less
descriptive ECError being returned on these paths.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292193 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 04:07:48 +00:00
Lang Hames
b1e2ecc0ae [Orc][RPC] Add an RPCFunctionNotSupported error type and return it from
negotiateFunction where appropriate.

Replacing the old ECError with a custom type allows us to attach the name of
the function that could not be negotiated, enabling better diagnostics for
negotiation failures.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292055 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 06:34:25 +00:00
Malcolm Parsons
60f78e3e92 Remove unused lambda captures. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291916 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 17:12:16 +00:00
Lang Hames
c103185b6b [Orc][RPC] Lock the pending results data structure when installing new result
handlers, make abandonPendingResults public API.

This should make installing asynchronous result handlers thread safe.

The abandonPendingResults method is made public so that clients can disconnect
from a remote even if they have asynchronous handlers awaing results from that
remote. The asynchronous handlers will all receive "abandoned result" errors as
their argument.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291399 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-08 20:09:35 +00:00
Lang Hames
b15738d320 [Orc][RPC] Add an APICalls utility for grouping RPC funtions for registration.
APICalls allows groups of functions to be composed into an API that can be
registered as a unit with an RPC endpoint. Doing registration on a-whole API
basis (rather than per-function) allows missing API functions to be detected
early.

APICalls also allows Function membership to be tested at compile-time. This
allows clients to write static assertions that functions to be called are
members of registered APIs.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291380 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-08 01:13:47 +00:00
Lang Hames
f83ef1736f [Orc][RPC] Add a class-method version of addHandler to MultiThreadedRPCEndpoint.
This brings MultiThreadedRPCEndpoint's addHandler API in-line with
SingleThreadedRPCEndpoint's.

This will be tested in an up-coming unit-test for MultiThreadedRPCEndpoint.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291376 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-08 00:18:51 +00:00
Lang Hames
2caf90de45 [Orc][RPC] Rename Single/MultiThreadedRPC to Single/MultithreadedRPCEndpoint.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291374 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 22:48:12 +00:00
Lang Hames
5cc5534752 [Orc][RPC] Remove a redundant 'if' statement.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291373 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 22:27:52 +00:00
Lang Hames
5d6908ca72 [Orc][RPC] Fix an obvious locking-order bug in RawByteChannel::startSendMessage.
The lock needs to be acquired before the data is sent, not afterwards. This
think-o slipped in during the refactor in r286620, but went unnoticed as the
resulting bug only manifests in multi-threaded clients (of which there are none
in-tree).

No unit test as the bug depends on thread scheduling.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291216 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 06:22:31 +00:00
Lang Hames
6cc32b3b42 [Orc][RPC] Add a ParallelCallGroup utility for dispatching and waiting on
multiple asynchronous RPC calls.

ParallelCallGroup allows multiple asynchronous calls to be dispatched,
and provides a wait method that blocks until all asynchronous calls have
been executed on the remote and all return value handlers run on the
local machine.

This will allow, for example, the JIT client to issue memory allocation calls
for all sections in parallel, then block until all memory has been allocated
on the remote and the allocated addresses registered with the client, at which
point the JIT client can proceed to applying relocations.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290523 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-25 21:55:05 +00:00
Lang Hames
45372538ae [Orc][RPC] Clang-format RPCUtils header.
Some of the recent RPC call type-checking changes weren't formatted prior to
commit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290520 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-25 19:55:59 +00:00
Lang Hames
389d8dff49 [Orc] Add some static-assert checks to improve the error messages for RPC calls
and handler registrations.

Also add a unit test for alternate-type serialization/deserialization.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290223 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-21 00:59:33 +00:00
Lang Hames
67f0925dfd [ORC][RPC] Use more meaningful template parameter names.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290015 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-17 00:04:24 +00:00
Lang Hames
d47d405978 [Orc] Clang-format the recent RPC update (r286620 and related).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287195 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-17 02:33:47 +00:00
Eugene Zelenko
76141b4157 [ExecutionEngine] Fix examples build broken in r287126 and other Include What You Use warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287130 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-16 18:32:58 +00:00
Eugene Zelenko
337558b55a [ExecutionEngine] Fix some Clang-tidy modernize-use-default, modernize-use-equals-delete and Include What You Use warnings; other minor fixes.
Differential revision: https://reviews.llvm.org/D26729


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287126 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-16 18:07:33 +00:00
Lang Hames
a1e4ad0015 [ORC] Remove the 'const' qualifier from the member function wrapper, make the
lambda in wrapHandler mutable to allow it to pass the handler through as a
non-const value.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286732 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-12 23:12:41 +00:00
Lang Hames
4258590d55 [ORC] Add a WrappedHandlerReturn type to map handler return types onto error
return types.

This class allows user provided handlers to return either error-wrapped types
or plain types. In the latter case, the plain type is wrapped with a success
value of Error or Expected<T> type to fit it into the rest of the serialization
machinery.

This patch allows us to remove the RPC unit-test workaround added in r286646.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286701 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-12 02:19:31 +00:00
Lang Hames
e923c84436 [RPC] Add const qualifier to MemberFnWrapper to make buildbots happy.
This is a temporary fix: The right solution is to make sure addHandler can
support mutable lambdas. I'll add that in a follow-up patch.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286661 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-11 22:50:16 +00:00
Lang Hames
085827f843 [ORC] Re-apply 286620 with fixes for the ErrorSuccess class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286639 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-11 21:42:09 +00:00
Lang Hames
b35b701639 [ORC] Revert r286620 while I investigate a bot failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286621 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-11 19:46:46 +00:00
Lang Hames
d8314f03b1 [ORC] Refactor the ORC RPC utilities to add some new features.
(1) Add support for function key negotiation.

The previous version of the RPC required both sides to maintain the same
enumeration for functions in the API. This means that any version skew between
the client and server would result in communication failure.

With this version of the patch functions (and serializable types) are defined
with string names, and the derived function signature strings are used to
negotiate the actual function keys (which are used for efficient call
serialization). This allows clients to connect to any server that supports a
superset of the API (based on the function signatures it supports).

(2) Add a callAsync primitive.

The callAsync primitive can be used to install a return value handler that will
run as soon as the RPC function's return value is sent back from the remote.

(3) Launch policies for RPC function handlers.

The new addHandler method, which installs handlers for RPC functions, takes two
arguments: (1) the handler itself, and (2) an optional "launch policy". When the
RPC function is called, the launch policy (if present) is invoked to actually
launch the handler. This allows the handler to be spawned on a background
thread, or added to a work list. If no launch policy is used, the handler is run
on the server thread itself. This should only be used for short-running
handlers, or entirely synchronous RPC APIs.

(4) Zero cost cross type serialization.

You can now define serialization from any type to a different "wire" type. For
example, this allows you to call an RPC function that's defined to take a
std::string while passing a StringRef argument. If a serializer from StringRef
to std::string has been defined for the channel type this will be used to
serialize the argument without having to construct a std::string instance.

This allows buffer reference types to be used as arguments to RPC calls without
requiring a copy of the buffer to be made.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286620 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-11 19:42:44 +00:00
Mehdi Amini
df0b8bce48 Make the Error class constructor protected
This is forcing to use Error::success(), which is in a wide majority
of cases a lot more readable.

Differential Revision: https://reviews.llvm.org/D26481

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286561 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-11 04:28:40 +00:00
Lang Hames
f27a2d85ce [ExecutionEngine] Document the insane ownership contract for
ExecutionEngine::removeModule.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286026 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-04 22:29:34 +00:00
Chandler Carruth
f85fa80630 Add a missing return to the move assignment operator for
SequenceNumberManager.

Sadly, we don't have any unittests for this class because it is
a private class. Since it seems to have a nice isolated and testable
interface, it'd be great to extract it to a detail namespace and write
unit tests for it as then we could catch issues. I'll probably pester
Lang about that or some alternative refactoring.

This was noticed by PVS-Studio.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285990 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-04 07:16:33 +00:00
Benjamin Kramer
06d5a1641d Do a sweep over move ctors and remove those that are identical to the default.
All of these existed because MSVC 2013 was unable to synthesize default
move ctors. We recently dropped support for it so all that error-prone
boilerplate can go.

No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284721 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-20 12:20:28 +00:00
Lang Hames
420bc5679c [RTDyld] Fix a bug in RTDyldMemoryManager::deregisterEHFrames.
It should forward to deregisterEHFramesInProcess by default, not
registerEHFramesInProcess.

No test case: I haven't come up with a good way to unit test EH frame
registration yet.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283123 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-03 17:34:56 +00:00
Mehdi Amini
793d2a4ced Use StringRef for MemoryBuffer identifier API (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283043 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-01 16:38:28 +00:00
Mehdi Amini
d1fa61bdee Use StringRef instead of raw pointer in ExecutionEngine
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283016 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-01 06:22:04 +00:00
Joerg Sonnenberger
9172a948f1 Turn LLVM_USE_OPROFILE into a 0/1 definition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282909 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-30 19:55:37 +00:00
Joerg Sonnenberger
9ca7d0850f Turn LLVM_USE_INTEL_JITEVENTS into a 0/1 definition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282908 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-30 19:54:25 +00:00
Reid Kleckner
f5f2db2791 Fix MSVC 2013 build by using our <thread> wrapper header
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281365 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-13 18:40:04 +00:00
Lang Hames
d87460fb31 [ORC] Clang-format RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281269 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-12 22:05:14 +00:00
Lang Hames
0f4402773f [ORC] Add some more documentation to RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281268 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-12 22:05:12 +00:00
Nico Weber
6e9445ddf8 attempt to unbreak build after r281254
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281262 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-12 21:15:44 +00:00
Lang Hames
08170c3c1c [ORC] Add missing <thread> header to RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281257 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-12 20:45:01 +00:00