summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine/Orc
Commit message (Collapse)AuthorAgeFilesLines
* Remove a stale test case.Lang Hames2016-11-171-22/+0
| | | | llvm-svn: 287183
* [Orc] Re-enable the RPC unit test disabled in r286917.Lang Hames2016-11-161-168/+163
| | | | | | | | | This unit test infinite-looped on s390x due to a thread_yield being optimized out. I've updated the QueueChannel class (where thread_yield was called) to use a condition variable instead. This should cause the unit test to behave correctly. llvm-svn: 287121
* [ORC] Temporarily disable RPCUtils unit test.Lang Hames2016-11-151-152/+153
| | | | | | | This broke s390x due to a bug in the QueueChannel implementation that led to it infinite-looping. Disabling it while I look into a fix. llvm-svn: 286917
* [ORC] Add a WrappedHandlerReturn type to map handler return types onto errorLang Hames2016-11-121-1/+1
| | | | | | | | | | | | | 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. llvm-svn: 286701
* [ORC] Temporarily fix the RPCUtils unit test by explicitly specifying a handlerLang Hames2016-11-111-1/+1
| | | | | | | | | return type. This should be fixed permanently by having the RPCUtils header recognize the ErrorSuccess type. I'll commit that in a follow up patch. llvm-svn: 286646
* [ORC] Re-apply 286620 with fixes for the ErrorSuccess class.Lang Hames2016-11-111-86/+150
| | | | llvm-svn: 286639
* [ORC] Revert r286620 while I investigate a bot failure.Lang Hames2016-11-111-150/+86
| | | | llvm-svn: 286621
* [ORC] Refactor the ORC RPC utilities to add some new features.Lang Hames2016-11-111-86/+150
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. llvm-svn: 286620
* [ORC] Fix the RPC unit test for header changes in r281171.Lang Hames2016-09-111-2/+2
| | | | llvm-svn: 281173
* Re-instate recent RPC updates (r280016, r280017, r280027, r280051) with aLang Hames2016-08-301-7/+7
| | | | | | workaround for the limitations of MSVC 2013's std::future class. llvm-svn: 280141
* Revert "[ORC][RPC] Make the future type of an Orc RPC call Error/Expected ↵Reid Kleckner2016-08-301-7/+7
| | | | | | | | | | | | | rather than" This reverts commit r280016, and the followups of r280017, r280027, r280051, r280058, and r280059. MSVC's implementation of std::promise does not get along with llvm::Error. It uses its promised value too much like a normal value type. llvm-svn: 280100
* [ORC][RPC] Reword 'async' to 'non-blocking' to better reflect call primitiveLang Hames2016-08-301-3/+3
| | | | | | | | | | | | | | behaviors, and add a callB (blacking call) primitive. callB is a blocking call primitive for threaded code where the RPC responses are being processed on a separate thread. (For single threaded code callST should continue to be used instead). No unit test yet: Last time I commited a threaded unit test it deadlocked on one of the s390x builders. I'll try to re-enable that test first, and add a new test if I can sort out the deadlock issue. llvm-svn: 280051
* [ORC] Fix unit-test breakage from r280016.Lang Hames2016-08-291-2/+2
| | | | | | | Void functions returning error now boolean convert to 'false' if they succeed. Unit tests updated to reflect this. llvm-svn: 280027
* [ORC][RPC] Make the future type of an Orc RPC call Error/Expected rather thanLang Hames2016-08-291-4/+4
| | | | | | | | | | | | | | | | Optional. For void functions the return type of a nonblocking call changes from Expected<future<Optional<bool>>> to Expected<future<Error>>, and for functions returning T the return type changes from Expected<future<Optional<T>>> to Expected<future<Expected<T>>>. Inner results need to be checked (since the RPC connection may have dropped out before a result came back) and Error/Expected provide stronger checking requirements. It also allows us drop the crufty 'optionalToError' function and just collapse Errors in the single-threaded call primitives. llvm-svn: 280016
* [Orc] Simplify LogicalDylib and move it back inside CompileOnDemandLayer. AlsoLang Hames2016-08-292-77/+0
| | | | | | | | | | | | | | | | | | | | switch to using one indirect stub manager per logical dylib rather than one per input module. LogicalDylib is a helper class used by the CompileOnDemandLayer to manage symbol resolution between modules during lazy compilation. In particular, it ensures that internal symbols resolve correctly even in the case where multiple input modules contain the same internal symbol name (which must to be promoted to external hidden linkage so that functions in any given module can be split out by lazy compilation). LogicalDylib's resolution scheme (before this commit) required one stub-manager per input module. This made recompilation of functions (by adding a module containing a new definition) difficult, as the stub manager for any given symbol was bound to the module that supplied the original definition. By using one stubs manager for the whole logical dylib symbols can be more easily replaced, although support for doing this is not included in this patch (it will be implemented in a follow up). llvm-svn: 279952
* [Orc] Explicitly specify type for assignment.Lang Hames2016-08-271-3/+3
| | | | | | | This should fix the MSVC errors in http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/15120 llvm-svn: 279908
* [ORC] Fix typo in LogicalDylib, add unit test.Lang Hames2016-08-272-0/+77
| | | | llvm-svn: 279892
* [ExecutionEngine][MCJIT][Orc] Replace RuntimeDyld::SymbolInfo with JITSymbol.Lang Hames2016-08-016-28/+30
| | | | | | | | | | | | | | | | This patch replaces RuntimeDyld::SymbolInfo with JITSymbol: A symbol class that is capable of lazy materialization (i.e. the symbol definition needn't be emitted until the address is requested). This can be used to support common and weak symbols in the JIT (though this is not implemented in this patch). For consistency, RuntimeDyld::SymbolResolver is renamed to JITSymbolResolver. For space efficiency a new class, JITEvaluatedSymbol, is introduced that behaves like the old RuntimeDyld::SymbolInfo - i.e. it is just a pair of an address and symbol flags. Instances of JITEvaluatedSymbol can be used in symbol-tables to avoid paying the space cost of the materializer. llvm-svn: 277386
* Fix warning in ObjectTransformLayerTest.Justin Lebar2016-07-131-1/+2
| | | | | | | | | | | | | | Doing "I++" inside of an EXPECT_* triggers warning: expression with side effects has no effect in an unevaluated context because EXPECT_* partially expands to EqHelper<(sizeof(::testing::internal::IsNullLiteralHelper(MockObjects[I++] + 1)) == 1)> which is an unevaluated context. llvm-svn: 275293
* [Orc] Add conversion to/from RuntimeDyld::SymbolInfo for JITSymbol.Lang Hames2016-05-311-1/+1
| | | | | | | | | | This tidies up some code that was manually constructing RuntimeDyld::SymbolInfo instances from JITSymbols. It will save more mess in the future when JITSymbol::getAddress is extended to return an Expected<TargetAddress> rather than just a TargetAddress, since we'll be able to embed the error checking in the conversion. llvm-svn: 271350
* [ORC] clang-format code that was touched in r267457. NFC.Lang Hames2016-04-252-90/+53
| | | | | | | Commit r267457 made a lot of type-substitutions threw off code formatting and alignment. This patch should tidy those changes up. llvm-svn: 267475
* [ORC] Thread Error/Expected through the RPC library.Lang Hames2016-04-252-11/+11
| | | | | | | | | | This replaces use of std::error_code and ErrorOr in the ORC RPC support library with Error and Expected. This required updating the OrcRemoteTarget API, Client, and server code, as well as updating the Orc C API. This patch also fixes several instances where Errors were dropped. llvm-svn: 267457
* [Orc] Add pthread dependence to the RPCUtilsTest unit test.Lang Hames2016-04-191-0/+2
| | | | llvm-svn: 266766
* [Orc] Disable RPC callST unit test until the S390 failures encountered duringLang Hames2016-04-191-20/+22
| | | | | | | http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/3459 can be debugged/fixed. llvm-svn: 266717
* [Orc] Tidy up some of the RPC primitives, add a unit-test for the callSTLang Hames2016-04-191-42/+95
| | | | | | (synchronous call) primitive. llvm-svn: 266711
* [Orc] Re-commit r266581 with fixes for MSVC, and format cleanups.Lang Hames2016-04-181-27/+76
| | | | | | | | | | Fixes: (1) Removes constexpr (unsupported in MSVC) (2) Move constructors (remove explicitly defaulted ones) (3) <future> - Add warning suppression for MSVC. llvm-svn: 266663
* Revert 266581 (and follow-up 266588), it doesn't build on Windows.Nico Weber2016-04-181-76/+27
| | | | | | | | | | Three problems: 1. <future> can't be easily used. If you must use it, see include/Support/ThreadPool.h for how. 2. constexpr problems, even after 266588. 3. Move assignment operators can't be defaulted in MSVC2013. llvm-svn: 266615
* [ORC] Generalize the ORC RPC utils to support RPC function return values andLang Hames2016-04-181-27/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | asynchronous call/handle. Also updates the ORC remote JIT API to use the new scheme. The previous version of the RPC tools only supported void functions, and required the user to manually call a paired function to return results. This patch replaces the Procedure typedef (which only supported void functions) with the Function typedef which supports return values, e.g.: Function<FooId, int32_t(std::string)> Foo; The RPC primitives and channel operations are also expanded. RPC channels must support four new operations: startSendMessage, endSendMessage, startRecieveMessage and endRecieveMessage, to handle channel locking. In addition, serialization support for tuples to RPCChannels is added to enable multiple return values. The RPC primitives are expanded from callAppend, call, expect and handle, to: appendCallAsync - Make an asynchronous call to the given function. callAsync - The same as appendCallAsync, but calls send on the channel when done. callSTHandling - Blocking call for single-threaded code. Wraps a call to callAsync then waits on the result, using a user-supplied handler to handle any callbacks from the remote. callST - The same as callSTHandling, except that it doesn't handle callbacks - it expects the result to be the first return. expect and handle - as before. handleResponse - Handle a response from the remote. waitForResult - Wait for the response with the given sequence number to arrive. llvm-svn: 266581
* Remove every uses of getGlobalContext() in LLVM (but the C API)Mehdi Amini2016-04-144-20/+20
| | | | | | | | | | | At the same time, fixes InstructionsTest::CastInst unittest: yes you can leave the IR in an invalid state and exit when you don't destroy the context (like the global one), no longer now. This is the first part of http://reviews.llvm.org/D19094 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266379
* Revert "Fix Clang-tidy modernize-deprecated-headers warnings in remaining ↵Duncan P. N. Exon Smith2016-04-051-4/+4
| | | | | | | | | | files; other minor fixes." This reverts commit r265454 since it broke the build. E.g.: http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/22413/ llvm-svn: 265459
* Fix Clang-tidy modernize-deprecated-headers warnings in remaining files; ↵Eugene Zelenko2016-04-051-4/+4
| | | | | | | | | | | | other minor fixes. Some Include What You Use suggestions were used too. Use anonymous namespaces in source files. Differential revision: http://reviews.llvm.org/D18778 llvm-svn: 265454
* [Orc] Switch RPC Procedure to take a function type, rather than an arg list.Lang Hames2016-03-211-12/+4
| | | | | | No functional change, just a little more readable. llvm-svn: 263951
* [Orc] Add lazy-JITting support for i386.Lang Hames2016-02-101-1/+3
| | | | | | | | | | | This patch adds a new class, OrcI386, which contains the hooks needed to support lazy-JITing on i386 (currently only for Pentium 2 or above, as the JIT re-entry code uses the FXSAVE/FXRSTOR instructions). Support for i386 is enabled in the LLI lazy JIT and the Orc C API, and regression and unit tests are enabled for this architecture. llvm-svn: 260338
* [Unittest] Clean up formatting, NFCJoseph Tremoulet2016-02-031-55/+54
| | | | | | | | | | | | | | Summary: Use an early return to reduce indentation. Remove unused local. Reviewers: dblaikie, lhames Subscribers: lhames, llvm-commits Differential Revision: http://reviews.llvm.org/D16513 llvm-svn: 259663
* Remove autoconf supportChris Bieneman2016-01-261-16/+0
| | | | | | | | | | | | | | | | Summary: This patch is provided in preparation for removing autoconf on 1/26. The proposal to remove autoconf on 1/26 was discussed on the llvm-dev thread here: http://lists.llvm.org/pipermail/llvm-dev/2016-January/093875.html "I felt a great disturbance in the [build system], as if millions of [makefiles] suddenly cried out in terror and were suddenly silenced. I fear something [amazing] has happened." - Obi Wan Kenobi Reviewers: chandlerc, grosbach, bob.wilson, tstellarAMD, echristo, whitequark Subscribers: chfast, simoncook, emaste, jholewinski, tberghammer, jfb, danalbert, srhines, arsenm, dschuff, jyknight, dsanders, joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D16471 llvm-svn: 258861
* Fix Clang-tidy modernize-use-nullptr and modernize-use-override warnings; ↵Eugene Zelenko2016-01-261-6/+2
| | | | | | | | other minor fixes. Differential revision: reviews.llvm.org/D16568 llvm-svn: 258831
* ObjectTransformLayerTest.cpp: Rework r258633. [-Winconsistent-missing-override]NAKAMURA Takumi2016-01-231-1/+1
| | | | | | Sorry for the noise. llvm-svn: 258635
* ObjectTransformLayerTest.cpp: Fix a warning. [-Wredundant-move]NAKAMURA Takumi2016-01-231-1/+1
| | | | llvm-svn: 258634
* ObjectTransformLayerTest.cpp: Fix a warning. [-Winconsistent-missing-override]NAKAMURA Takumi2016-01-231-1/+1
| | | | llvm-svn: 258633
* [ORC] Update ObjectTransformLayer signatureJoseph Tremoulet2016-01-231-6/+69
| | | | | | | | | | | | | | | | | | | | Summary: Update ObjectTransformLayer::addObjectSet to take the object set by value rather than reference and pass it to the base layer with move semantics rather than copy, to match r258185's changes to ObjectLinkingLayer. Update the unit test to verify that ObjectTransformLayer's signature stays in sync with ObjectLinkingLayer's. Reviewers: lhames Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D16414 llvm-svn: 258630
* [Orc] Try to turn Orc execution unit tests back on for Linux.Lang Hames2016-01-201-1/+1
| | | | | | | The fix in r258324 (plus r258354) should allow Orc execution tests to run on Linux. llvm-svn: 258358
* [Orc] Refactor ObjectLinkingLayer::addObjectSet to defer loading objects untilLang Hames2016-01-191-0/+72
| | | | | | | | | | | | | | | | they're needed. Prior to this patch objects were loaded (via RuntimeDyld::loadObject) when they were added to the ObjectLinkingLayer, but were not relocated and finalized until a symbol address was requested. In the interim, another object could be loaded and finalized with the same memory manager, causing relocation/finalization of the first object to fail (as the first finalization call may have marked the allocated memory for the first object read-only). By deferring the loadObject call (and subsequent memory allocations) until an object file is needed we can avoid prematurely finalizing memory. llvm-svn: 258185
* [Orc] Revert r258031 - it broke the builders.Lang Hames2016-01-181-1/+1
| | | | llvm-svn: 258034
* [Orc] Expand a comment explaining a unit test.Lang Hames2016-01-181-0/+5
| | | | llvm-svn: 258032
* [Orc] Enable ORC execution unit tests on non-windows platforms.Lang Hames2016-01-181-1/+1
| | | | | | | | | | | Previously these were Darwin-only. Since the switch to direct binary emission of stubs, trampolines and resolver blocks, these should work on other *nix platforms too. These tests can be enabled on Windows once known issues with ORC's handling of Windows symbol mangling (see e.g. https://llvm.org/PR25940) have been fixed. llvm-svn: 258031
* [Orc] Add support for remote JITing to the ORC API.Lang Hames2016-01-112-0/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds utilities to ORC for managing a remote JIT target. It consists of: 1. A very primitive RPC system for making calls over a byte-stream. See RPCChannel.h, RPCUtils.h. 2. An RPC API defined in the above system for managing memory, looking up symbols, creating stubs, etc. on a remote target. See OrcRemoteTargetRPCAPI.h. 3. An interface for creating high-level JIT components (memory managers, callback managers, stub managers, etc.) that operate over the RPC API. See OrcRemoteTargetClient.h. 4. A helper class for building servers that can handle the RPC calls. See OrcRemoteTargetServer.h. The system is designed to work neatly with the existing ORC components and functionality. In particular, the ORC callback API (and consequently the CompileOnDemandLayer) is supported, enabling lazy compilation of remote code. Assuming this doesn't trigger any builder failures, a follow-up patch will be committed which tests these utilities by using them to replace LLI's existing remote-JITing demo code. llvm-svn: 257305
* OrcJITTests//ObjectLinkingLayerTest.cpp: Appease msc18's C2327. It seems ↵NAKAMURA Takumi2016-01-101-9/+9
| | | | | | | | | | | definition of nested class would confuse the context. llvm\unittests\ExecutionEngine\Orc\ObjectLinkingLayerTest.cpp(115) : error C2327: 'llvm::OrcExecutionTest::TM' : is not a type name, static, or enumerator llvm\unittests\ExecutionEngine\Orc\ObjectLinkingLayerTest.cpp(115) : error C2065: 'TM' : undeclared identifier FYI, "this->TM" was valid even before moving class SectionMemoryManagerWrapper. llvm-svn: 257290
* [Orc][RuntimeDyld] Prevent duplicate calls to finalizeMemory on shared memoryLang Hames2016-01-093-4/+86
| | | | | | | | | | | | | | | | | | | | | | | managers. Prior to this patch, recursive finalization (where finalization of one RuntimeDyld instance triggers finalization of another instance on which the first depends) could trigger memory access failures: When the inner (dependent) RuntimeDyld instance and its memory manager are finalized, memory allocated (but not yet relocated) by the outer instance is locked, and relocation in the outer instance fails with a memory access error. This patch adds a latch to the RuntimeDyld::MemoryManager base class that is checked by a new method: RuntimeDyld::finalizeWithMemoryManagerLocking, ensuring that shared memory managers are only finalized by the outermost RuntimeDyld instance. This allows ORC clients to supply the same memory manager to multiple calls to addModuleSet. In particular it enables the use of user-supplied memory managers with the CompileOnDemandLayer which must reuse the supplied memory manager for each function that is lazily compiled. llvm-svn: 257263
* Reorganize the C API headers to improve build times.Eric Christopher2015-12-181-0/+1
| | | | | | | | | Type specific declarations have been moved to Type.h and error handling routines have been moved to ErrorHandling.h. Both are included in Core.h so nothing should change for projects directly including the headers, but transitive dependencies may be affected. llvm-svn: 255965
* [Orc] Removing traces of takeOwnershipOfBuffers left after r251560.Lang Hames2015-12-071-27/+0
| | | | | | Patch by Joshua Gerrard. Thanks Joshua! llvm-svn: 254919
OpenPOWER on IntegriCloud