[llvm-dev] Trouble with ORCv2 Tutorial

Lang Hames via llvm-dev llvm-dev at lists.llvm.org
Fri Aug 9 13:29:07 PDT 2019


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190809/f0f0cfd0/attachment.html>


More information about the llvm-dev mailing list