[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Add more supported primitives in libgccjit IR
From: |
Andrea Corallo |
Subject: |
Re: Add more supported primitives in libgccjit IR |
Date: |
Fri, 25 Aug 2023 05:19:50 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Ihor Radchenko <yantar92@posteo.net> writes:
> Andrea Corallo <acorallo@gnu.org> writes:
>
>> Yes the native compiler does value-type inference already (this is how
>> the return type of functions is computed as well).
>
> Thanks for the confirmation!
>
> Do I understand correctly that value-type inference is still extremely
> limited?
Why?
> I am confused about native compilation results for
>
> (defun test1 ()
> (let ((x (list 'a 'b 'c)))
> (when (listp x) "Return value")))
>
> (see <https://yhetil.org/emacs-devel/87pm3gfxgi.fsf@localhost/>)
Yes the native compiler is failing to optimize that, one reason is
probably that list is not a pure function. This works better for
example with:
(defun test2 ()
(let ((x '(a b c)))
(when (listp x) "Return value")))
But anyway it should work, trouble is that we call listp on something we
know is a cons
(set #(mvar 12095070 1 boolean) (call listp #(mvar 12094834 1 cons)))
But the result is just a boolean instead of being a t.
If we could have a bug report for this I can work on it as soon as I get
time.
>> Yes the backend tries to inline some code when possible (ex
>> define_add1_sub1).
>>
>> Yes we could add more of this inlining, the infrastructure is already
>> there but I personally had no time to work on this :(
>
> Do you have any comment on the problem with having multiple parallel
> implementations of the same subroutine?
It's not nice but if justified by performance for few core functions I
think is acceptable.
>> If someone is interested on working on some of those points (or other
>> areas of the native compiler) I'm happy to provided help as much as I
>> can.
>
> Is there any detailed information about the format of native compile
> debug output?
Not so far sorry, that's an internal dump format, do you have any
specific question?
> I tried
>
> (defun test1 ()
> (let ((x (list 'a 'b 'c)))
> (when (listp x) "Return value")))
> (setq native-comp-debug 3)
> (setq native-comp-verbose 3)
> (native-compile #'test1 "/tmp/test1.eln")
>
> but it is not very clear what exactly is going on there.
The compiler performs a series of transformations on the code, those are
called "passes". In the *Native-compile-Log* you can see the dump of
the code for each function being compiled in the current intermendiate
rapresentation. You'll see that the first intermediate rapresentation
is LAP, most of the following passes are dumped in LIMPLE.
Best Regards
Andrea
- RE: [External] : Re: Shrinking the C core, (continued)
- RE: [External] : Re: Shrinking the C core, Drew Adams, 2023/08/21
- Re: Shrinking the C core, Po Lu, 2023/08/21
- Add more supported primitives in libgccjit IR (was: Shrinking the C core), Ihor Radchenko, 2023/08/21
- Re: Add more supported primitives in libgccjit IR (was: Shrinking the C core), Gregory Heytings, 2023/08/21
- Re: Add more supported primitives in libgccjit IR (was: Shrinking the C core), Ihor Radchenko, 2023/08/21
- Re: Add more supported primitives in libgccjit IR (was: Shrinking the C core), Alfred M. Szmidt, 2023/08/21
- Re: Add more supported primitives in libgccjit IR (was: Shrinking the C core), Ihor Radchenko, 2023/08/21
- Re: Add more supported primitives in libgccjit IR (was: Shrinking the C core), Eli Zaretskii, 2023/08/21
- Re: Add more supported primitives in libgccjit IR, Andrea Corallo, 2023/08/21
- Re: Add more supported primitives in libgccjit IR, Ihor Radchenko, 2023/08/23
- Re: Add more supported primitives in libgccjit IR,
Andrea Corallo <=
- Re: Add more supported primitives in libgccjit IR, Ihor Radchenko, 2023/08/25
- Re: Add more supported primitives in libgccjit IR, Andrea Corallo, 2023/08/25
- Re: Add more supported primitives in libgccjit IR, Ihor Radchenko, 2023/08/26
- Re: Add more supported primitives in libgccjit IR, Emanuel Berg, 2023/08/27
- Re: Add more supported primitives in libgccjit IR, Emanuel Berg, 2023/08/27
- Re: Add more supported primitives in libgccjit IR, Andrea Corallo, 2023/08/27
- Re: Add more supported primitives in libgccjit IR, Emanuel Berg, 2023/08/27
- Re: Add more supported primitives in libgccjit IR, Andrea Corallo, 2023/08/28
- Re: Add more supported primitives in libgccjit IR, Emanuel Berg, 2023/08/28
- Re: Add more supported primitives in libgccjit IR, Emanuel Berg, 2023/08/26