| From: | Anthonin Bonnefoy <anthonin(dot)bonnefoy(at)datadoghq(dot)com> |
|---|---|
| To: | Andres Freund <andres(at)anarazel(dot)de> |
| Cc: | Andreas Karlsson <andreas(at)proxel(dot)se>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Add missing JIT inline pass for llvm>=17 |
| Date: | 2026-01-16 09:10:07 |
| Message-ID: | CAO6_XqppJ2s=Q1oryG1ed8RupDmgbrcuS1BmE9FEQZR2rrjnng@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, Jan 15, 2026 at 2:51 PM Andres Freund <andres(at)anarazel(dot)de> wrote:
> I'm strongly against removing the always inline pass, I see absolutely no
> reason for doing that. The whole point of always inline is that it happens
> unconditionally. It's not an expensive pass either.
I've looked into more details on what was provided by 'default<O0>',
and it turns out it includes an always-inline pass[0]. This is also
visible when using debug-pass-manager:
llvm-as < /dev/null | opt -disable-output --passes='default<O0>'
-debug-pass-manager
Running analysis: InnerAnalysisManagerProxy<FunctionAnalysisManager,
Module> on [module]
Running pass: AlwaysInlinerPass on [module]
Running analysis: ProfileSummaryAnalysis on [module]
Running pass: CoroConditionalWrapper on [module]
Running pass: VerifierPass on [module]
Running analysis: VerifierAnalysis on [module]
With the pre-LLVM17 legacy pass manager, that doesn't seem to be the
case[1] (despite the confusing comment? Inliner is only set by
LLVMPassManagerBuilderUseInlinerWithThreshold).
So, with 'default<O0>,mem2reg', we replicate the same behaviour as
pre-LLVM17 as it includes the always-inline pass.
I've updated the patch to only add the inline pass when PGJIT_INLINE
is on. I've also added a comment to mention that always-inline is
included in O0.
[0]: https://github.com/llvm/llvm-project/blob/701040d48f759369dce755f185a21aa6b92ba3ae/llvm/lib/Passes/PassBuilderPipelines.cpp#L2360-L2365
[1]: https://github.com/llvm/llvm-project/blob/release/16.x/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp#L290-L313
| Attachment | Content-Type | Size |
|---|---|---|
| v3-0001-Add-missing-JIT-inline-pass-for-llvm-17.patch | application/octet-stream | 1.6 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Banck | 2026-01-16 09:29:59 | Re: Add missing JIT inline pass for llvm>=17 |
| Previous Message | Álvaro Herrera | 2026-01-16 08:55:15 | Re: Add IS_INDEX macro to brin and gist index |