Re: meson vs. llvm bitcode files

From: Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>
To: Diego Fronza <diego(dot)fronza(at)percona(dot)com>
Cc: Peter Eisentraut <peter(at)eisentraut(dot)org>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de>
Subject: Re: meson vs. llvm bitcode files
Date: 2025-03-12 10:26:46
Message-ID: CAN55FZ2qGH8WsRaX3UxC4E-ZEwv0ZHr9p1XQfLqLs1fGKLAaoA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On Tue, 11 Mar 2025 at 01:04, Diego Fronza <diego(dot)fronza(at)percona(dot)com> wrote:
> I did a full review on the provided patches plus some tests, I was able to validate that the loading of bitcode modules is working also JIT works for both backend and contrib modules.

Thank you!

> To test JIT on contrib modules I just lowered the costs for all jit settings and used the intarray extension, using the data/test__int.data:
> CREATE EXTENSION intarray;
> CREATE TABLE test__int( a int[] );1
> \copy test__int from 'data/test__int.data'
>
> For queries any from line 98+ on contrib/intarray/sql/_int.sql will work.
>
> Then I added extra debug messages to llvmjit_inline.cpp on add_module_to_inline_search_path() function, also on llvm_build_inline_plan(), I was able to see many functions in this module being successfully inlined.
>
> I'm attaching a new patch based on your original work which add further support for generating bitcode from:

Thanks for doing that!

> - Generated backend sources: processed by flex, bison, etc.
> - Generated contrib module sources,

I think we do not need to separate these two.

foreach srcfile : bitcode_module['srcfiles']
- if meson.version().version_compare('>=0.59')
+ srcfilename = '@0@'.format(srcfile)
+ if srcfilename.startswith('<CustomTarget')
+ srcfilename = srcfile.full_path().split(meson.build_root() + '/')[1]
+ elif meson.version().version_compare('>=0.59')

Also, checking if the string starts with '<CustomTarget' is a bit
hacky, and 'srcfilename = '@0@'.format(srcfile)' causes a deprecation
warning. So, instead of this we can process all generated sources like
how generated backend sources are processed. I updated the patch with
that.

> On this patch I just included fmgrtab.c and src/backend/parser for the backend generated code.
> For contrib generated sources I added contrib/cube as an example.

I applied your contrib/cube example and did the same thing for the contrib/seg.

> All relevant details about the changes are included in the patch itself.
>
> As you may know already I also created a PR focused on llvm bitcode emission on meson, it generates bitcode for all backend and contribution modules, currently under review by some colleagues at Percona: https://github.com/percona/postgres/pull/103
> I'm curious if we should get all or some of the generated backend sources compiled to bitcode, similar to contrib modules.

I think we can do this. I added other backend sources like you did in
the PR but attached it as another patch (0007) because I wanted to
hear other people's opinions on that first.

v3 is attached.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachment Content-Type Size
v3-0001-meson-Add-generated-header-stamps.patch text/x-patch 5.0 KB
v3-0002-meson-Add-postgresql-extension.pc-for-building-ex.patch text/x-patch 4.5 KB
v3-0003-meson-Test-building-extensions-by-using-postgresq.patch text/x-patch 10.7 KB
v3-0004-meson-WIP-Add-docs-for-postgresql-extension.pc.patch text/x-patch 12.3 KB
v3-0005-meson-Add-architecture-for-LLVM-bitcode-emission.patch text/x-patch 9.1 KB
v3-0006-meson-Add-LLVM-bitcode-emissions-for-contrib-libr.patch text/x-patch 22.6 KB
v3-0007-meson-Add-LLVM-bitcode-emission-for-backend-sourc.patch text/x-patch 5.2 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2025-03-12 10:34:06 Re: Add an option to skip loading missing publication to avoid logical replication failure
Previous Message Ashutosh Bapat 2025-03-12 10:26:08 Re: Test mail for pgsql-hackers