Re: Minor LLVM cleanups

From: Andres Freund <andres(at)anarazel(dot)de>
To: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Minor LLVM cleanups
Date: 2025-12-03 15:52:51
Message-ID: pxggctyolmdohczyj7p4bfq4q5nq2q3f7esqw7wjcfrwxozlaq@n7inc7tme3sr
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2025-11-28 16:41:46 +1300, Thomas Munro wrote:
> 0001: These days we handle LLVM API evolution with LLVM_VERSION_MAJOR
> guards. These GDB and Perf support probes escaped recent garbage
> collection cycles by not being phrased like that. Function probes are
> generally better for cross-platform variations and library build
> options that are exposed by function visibility, but in this case all
> supported versions have the functions, even when the relevant feature
> isn't enabled in LLVM.

WFM.

> 0002: On my FreeBSD box (and presumably any non-Linux system), if I
> set jit_profiling_support=1 then LLVMCreatePerfJITEventListener() is a
> dummy function that returns NULL and we crash. The attached just
> silently skips in that case. If we raised an error instead I suppose
> it would have to be FATAL given the call site in a callback invoked by
> LLVM/C++. We could work harder and teach the GUC to probe LLVM when
> you try to turn it on, but apparently no one tried to turn on perf on
> a system without perf in all these years... Should the manual say
> that it's only available on Linux? Would it be reasonable to
> additionally assume that __linux__ implies LLVM_USE_PERF and disable
> the GUC otherwise?

> (There are more kinds of profiling support available, which I might
> learn more about as part of the JITLink work.)

LGTM.

> 0003: While contemplating how close we are to an empty
> llvmjit_wrap.cpp file, I considered whether the two wrappers added by
> commit 37d5babb should be upstreamed, and then realised that this one
> is not needed if you jump though one extra hoop.

> 0004: I *think* the second one is redundant too: all the functions in
> question are either global or we have a template function of the same
> type that is. From a spartan trail of bread crumbs[1][2] I realised
> that we should be able to use LLVMGlobalGetValueType() instead. make
> check with passes with TEMP_CONFIG set to define jit_above_cost=0
> against bleeding-edge LLVM built with
> -DLLVM_USE_SANITIZER="Address;Undefined" and
> -DLLVM_ENABLE_ASSERTIONS=ON.

Hm, I guess this reduces the sanity checking a tiny bit, because presumably
LLVMGlobalGetValueType() will also return non-function types?

I am not sure this buys us all that much?

Greetings,

Andres Freund

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bertrand Drouvot 2025-12-03 15:53:37 Re: Use func(void) for functions with no parameters
Previous Message Andrew Dunstan 2025-12-03 15:35:53 Re: pgindent versus struct members and typedefs