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
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>
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