[llvm-dev] Trouble with ORCv2 Tutorial

Zeke Medley via llvm-dev llvm-dev at lists.llvm.org
Sat Aug 10 08:49:10 PDT 2019


Hi Lang,

I'd love to. I'll put that together this weekend :)

Zeke

On Fri, Aug 9, 2019 at 1:29 PM Lang Hames <lhames at gmail.com> wrote:
>
> Hi Zeke,
>
>> Thanks a bunch for the reply. That worked great for on my end and is a
>> pretty tiny change.
>
>
> Great to hear! Since you've already done the hard work, would you be willing to share your patch? I can review and apply it to the mainline.
>
> Cheers,
> Lang.
>
> On Thu, Aug 8, 2019 at 11:19 PM Zeke Medley <zekemedley at gmail.com> wrote:
>>
>> HI Lang,
>>
>> Thanks a bunch for the reply. That worked great for on my end and is a
>> pretty tiny change.
>>
>> Really appreciate all the work you've done on this new JIT stuff and
>> putting together those great tutorials.
>>
>> Zeke
>>
>> On Thu, Aug 8, 2019 at 3:07 PM Lang Hames <lhames at gmail.com> wrote:
>> >
>> > Hi Zeke,
>> >
>> > Thanks for pointing this out.
>> >
>> > You're right: the issue is that ORCv2 doesn't support code removal (yet). To work around that we need to rename the anonymous expression each time (e.g. __anon_expr.1, __anon_expr.2, ...). Sounds like we're not doing that at the moment. I'll try to get it fixed up shortly.
>> >
>> > Cheers,
>> > Lang.
>> >
>> > On Thu, Aug 8, 2019 at 11:08 AM Zeke Medley via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> >>
>> >> Hi Praveen,
>> >>
>> >> Thanks for pointing that out :) That's my mistake.
>> >>
>> >> I might have been misidentifying the issue with the assert statement.
>> >> With those fixes made function calls seem to all call the first
>> >> function called in the REPL. For example:
>> >>
>> >> ready> def fib(n) if (n < 2) then n else fib(n - 1) + fib(n - 2);
>> >> ...
>> >> ready> fib(40);
>> >> Evaluated to 102334155.000000
>> >> ready> fib(10); # This should not have the same result as the earlier call.
>> >> Evaluated to 102334155.000000
>> >>
>> >> Both of those calls evaluate fib(40) despite the second one being a
>> >> call to fib(10). The same goes for further calls to functions. If I
>> >> subsequently define another function in the same repl session and call
>> >> it, it uses the results of the first function call in that repl
>> >> session:
>> >>
>> >> ready> def bar(x) x + 1;
>> >> ...
>> >> ready> bar(1);
>> >> Evaluated to 102334155.000000
>> >>
>> >> I suspect that this has to do with the fact that in ORCv2 we can no
>> >> longer remove modules meaning that the code in
>> >> HandleTopLevelExpression can't wrap up by removing the most recent
>> >> module it added. The tutorial does lookups by creating a function with
>> >> no arguments names "__anon_expr", calling it, then removing it AFIK
>> >> and because ORCv2 doesn't allow for the removal part as of yet, my
>> >> hunch is that the issue is there.
>> >>
>> >> Any thoughts from anyone?
>> >>
>> >> If this does end up being an issue with how the tutorial looks right
>> >> now and not me making a mistake I'll happily volunteer to update the
>> >> tutorials as needed :)
>> >>
>> >> Zeke
>> >>
>> >> On Wed, Aug 7, 2019 at 8:38 PM Praveen Velliengiri
>> >> <praveenvelliengiri at gmail.com> wrote:
>> >> >
>> >> > Hi Zeke,
>> >> > Bool conversion of Error returns True for Failure States and False for Success States.
>> >> >
>> >> > assert(add_q && "HandleDefinition: Error adding a module."); - You're essentially checking against success state to assert the condition. Plus, Error have many handling APIs dealing with success and failure states, you can use them instead of assert.
>> >> > That will trigger a runtime error if Error is not handled correctly with the reason.
>> >> >
>> >> > Try this:
>> >> > +assert(!add_q && "Handle Definition : Error Adding a Module");
>> >> >
>> >> > Please let me know, if you ran any more problems with ORCV2.
>> >> >
>> >> > Cheers!
>> >> >
>> >> >
>> >> > On Thu, 8 Aug 2019 at 05:12, Zeke Medley via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> >> >>
>> >> >> Hi folks,
>> >> >>
>> >> >> I'm working on migrating a JIT compiler from the old ORCv1 JIT APIs to
>> >> >> the newer ORCv2 ones and am having some trouble getting the code from
>> >> >> chapter 1 of the "Building a JIT" [1] tutorial working properly. I
>> >> >> have previously walked through the "My First Langauge" [2] tutorial
>> >> >> and that went smoothly using the provided JIT class, but using the one
>> >> >> from the JIT tutorial is giving me trouble.
>> >> >>
>> >> >> Kaleidoscope builds fine using Clang and LLVM version 9, but fails on
>> >> >> an expression like this:
>> >> >>
>> >> >> ready> fun foo(c) c;
>> >> >> Read function definition:
>> >> >> define double @foo(double %c) {
>> >> >> entry:
>> >> >>   ret double %c
>> >> >> }
>> >> >>
>> >> >> kaleidoscope: kaleidoscope_baseline.cpp:980: void HandleDefinition():
>> >> >> Assertion `add_q && "HandleDefinition: Error adding a module."'
>> >> >> failed.
>> >> >> Aborted
>> >> >>
>> >> >> I'm using the exact source code from the tutorials to reproduce the
>> >> >> problem with some tiny changes to the front end to deal with some
>> >> >> slight API changes introduced in the JIT tutorial where some functions
>> >> >> return Expected. For example, the specific place that this is failing:
>> >> >>
>> >> >>             FnIR->print(errs());
>> >> >>             fprintf(stderr, "\n");
>> >> >> -           TheJIT->addModule(std::move(TheModule));
>> >> >> +          auto add_q = TheJIT->addModule(std::move(TheModule));
>> >> >> +          assert(add_q && "HandleDefinition: Error adding a module.");
>> >> >>             InitializeModuleAndPassManager();
>> >> >>
>> >> >>
>> >> >> I've looked at a previous thread discussing moving from ORCv1 to ORCv2
>> >> >> [3] and watched the "Updating ORC JIT for Concurrencyā€¯ talk by L.
>> >> >> Hames & B. Loggins, but am still having a little trouble getting my
>> >> >> head around everything without walking through a complete tutorial.
>> >> >> I'd appreciate any guidance that you folks have on the migration as
>> >> >> well as some help with this specific issue. I'm happy to share more
>> >> >> about the source code and build settings if that is helpful.
>> >> >>
>> >> >> Thanks in advance,
>> >> >>
>> >> >> Zeke
>> >> >>
>> >> >> [1] https://llvm.org/docs/tutorial/BuildingAJIT1.html
>> >> >> [2] https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html
>> >> >> [3] https://groups.google.com/forum/#!searchin/llvm-dev/orcv2%7Csort:date/llvm-dev/UNXf9EOw43g/w3qOKLYbAwAJ
>> >> >> _______________________________________________
>> >> >> LLVM Developers mailing list
>> >> >> llvm-dev at lists.llvm.org
>> >> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> >> _______________________________________________
>> >> LLVM Developers mailing list
>> >> llvm-dev at lists.llvm.org
>> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list