[llvm] r277521 - [lli] Add the ability for OrcLazyJIT to accept multiple input modules.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 9 10:09:00 PDT 2016


On Mon, Aug 8, 2016 at 11:41 AM Lang Hames <lhames at gmail.com> wrote:

> Hi Dave,
>
> Does this only enable functionality for weak symbol handling?
>> (or does it, say, make it possible to have a simple two module unlinked
>> situation (one module declares and calls a function, the other module
>> defines that function)? That could be tested without the weak symbol
>> handling)
>
>
> Interesting. We have basic multi-module tests for MCJIT and
> OrcMCJITReplacement, but we don't have one for OrcLazy yet. I didn't think
> to add one for this patch because multi-module functionality will be
> implicitly tested by the weak symbol test: To test weak symbols you have
> two modules M1 and M2 that each contain a definition of a weak symbol A. M1
> also contains a main function, and M2 contains a non-weak function
> 'foo' that returns the address of 'A'. To test weak symbol support you
> verify that 'main' and 'foo' agree on the address of 'A'. If they agree
> then everything works. If they disagree then weak symbol support is broken,
> but multi-module support works. If multi-module support is broken the test
> will refuse to run at all (returning an "symbol 'foo' not found" error).
>

Ah - thanks for the explanation/details!


> Given that the failure mode is clear I'd be inclined to just have the one
> test case with a comment explaining that. What do you think?
>

I'd still be inclined to test this separately (so it's covered if the other
patch is reverted for example), personally.

- Dave


>
> - Lang.
>
>
> On Mon, Aug 8, 2016 at 10:29 AM, David Blaikie <dblaikie at gmail.com> wrote:
>
>>
>>
>> On Tue, Aug 2, 2016 at 2:08 PM Lang Hames via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: lhames
>>> Date: Tue Aug  2 16:00:40 2016
>>> New Revision: 277521
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=277521&view=rev
>>> Log:
>>> [lli] Add the ability for OrcLazyJIT to accept multiple input modules.
>>>
>>> LLI already supported passing multiple input modules to MCJIT via the
>>> -extra-module option. This patch adds the plumbing to pass these modules
>>> to
>>> the OrcLazy JIT too.
>>>
>>> This functionality will be used in an upcoming test case for weak symbol
>>> handling.
>>>
>>
>> Does this only enable functionality for weak symbol handling?
>>
>> (or does it, say, make it possible to have a simple two module unlinked
>> situation (one module declares and calls a function, the other module
>> defines that function)? That could be tested without the weak symbol
>> handling)
>>
>>
>>>
>>>
>>> Modified:
>>>     llvm/trunk/tools/lli/OrcLazyJIT.cpp
>>>     llvm/trunk/tools/lli/OrcLazyJIT.h
>>>     llvm/trunk/tools/lli/lli.cpp
>>>
>>> Modified: llvm/trunk/tools/lli/OrcLazyJIT.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.cpp?rev=277521&r1=277520&r2=277521&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/tools/lli/OrcLazyJIT.cpp (original)
>>> +++ llvm/trunk/tools/lli/OrcLazyJIT.cpp Tue Aug  2 16:00:40 2016
>>> @@ -105,7 +105,8 @@ static PtrTy fromTargetAddress(JITTarget
>>>    return reinterpret_cast<PtrTy>(static_cast<uintptr_t>(Addr));
>>>  }
>>>
>>> -int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char*
>>> ArgV[]) {
>>> +int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int
>>> ArgC,
>>> +                        char* ArgV[]) {
>>>    // Add the program's symbols into the JIT's search space.
>>>    if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
>>>      errs() << "Error loading program symbols.\n";
>>> @@ -143,8 +144,9 @@ int llvm::runOrcLazyJIT(std::unique_ptr<
>>>                 OrcInlineStubs);
>>>
>>>    // Add the module, look up main and run it.
>>> -  auto MainHandle = J.addModule(std::move(M));
>>> -  auto MainSym = J.findSymbolIn(MainHandle, "main");
>>> +  for (auto &M : Ms)
>>> +    J.addModule(std::move(M));
>>> +  auto MainSym = J.findSymbol("main");
>>>
>>>    if (!MainSym) {
>>>      errs() << "Could not find main function.\n";
>>>
>>> Modified: llvm/trunk/tools/lli/OrcLazyJIT.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.h?rev=277521&r1=277520&r2=277521&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/tools/lli/OrcLazyJIT.h (original)
>>> +++ llvm/trunk/tools/lli/OrcLazyJIT.h Tue Aug  2 16:00:40 2016
>>> @@ -156,7 +156,8 @@ private:
>>>    std::vector<orc::CtorDtorRunner<CODLayerT>> IRStaticDestructorRunners;
>>>  };
>>>
>>> -int runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]);
>>> +int runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
>>> +                  char* ArgV[]);
>>>
>>>  } // end namespace llvm
>>>
>>>
>>> Modified: llvm/trunk/tools/lli/lli.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=277521&r1=277520&r2=277521&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/tools/lli/lli.cpp (original)
>>> +++ llvm/trunk/tools/lli/lli.cpp Tue Aug  2 16:00:40 2016
>>> @@ -397,8 +397,18 @@ int main(int argc, char **argv, char * c
>>>      return 1;
>>>    }
>>>
>>> -  if (UseJITKind == JITKind::OrcLazy)
>>> -    return runOrcLazyJIT(std::move(Owner), argc, argv);
>>> +  if (UseJITKind == JITKind::OrcLazy) {
>>> +    std::vector<std::unique_ptr<Module>> Ms;
>>> +    Ms.push_back(std::move(Owner));
>>> +    for (auto &ExtraMod : ExtraModules) {
>>> +      Ms.push_back(parseIRFile(ExtraMod, Err, Context));
>>> +      if (!Ms.back()) {
>>> +        Err.print(argv[0], errs());
>>> +        return 1;
>>> +      }
>>> +    }
>>> +    return runOrcLazyJIT(std::move(Ms), argc, argv);
>>> +  }
>>>
>>>    if (EnableCacheManager) {
>>>      std::string CacheName("file:");
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160809/5169be30/attachment-0001.html>


More information about the llvm-commits mailing list