[llvm-dev] Trouble with ORCv2 Tutorial
Lang Hames via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 8 15:07:20 PDT 2019
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/20190808/6c07f10f/attachment.html>
More information about the llvm-dev
mailing list