Re: broken JIT support on Fedora 40
Dmitry Dolgov <9erthalion6@gmail.com>
From: Dmitry Dolgov <9erthalion6@gmail.com>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Daniel Gustafsson <daniel@yesql.se>, Pavel Stehule <pavel.stehule@gmail.com>, Robert Haas <robertmhaas@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2024-03-17T20:02:08Z
Lists: pgsql-hackers
> On Fri, Mar 15, 2024 at 01:54:38PM +1300, Thomas Munro wrote: > For me it seems that the LLVMRunPasses() call, new in > > commit 76200e5ee469e4a9db5f9514b9d0c6a31b496bff > Author: Thomas Munro <tmunro@postgresql.org> > Date: Wed Oct 18 22:15:54 2023 +1300 > > jit: Changes for LLVM 17. > > is reaching code that segfaults inside libLLVM, specifically in > llvm::InlineFunction(llvm::CallBase&, llvm::InlineFunctionInfo&, bool, > llvm::AAResults*, bool, llvm::Function*). First obvious question > would be: is that NULL argument still acceptable? Perhaps it wants > our LLVMTargetMachineRef there: > > err = LLVMRunPasses(module, passes, NULL, options); > > But then when we see what is does with that argument, it arrives at a > place that apparently accepts nullptr. > > https://github.com/llvm/llvm-project/blob/6b2bab2839c7a379556a10287034bd55906d7094/llvm/lib/Passes/PassBuilderBindings.cpp#L56 > https://github.com/llvm/llvm-project/blob/6b2bab2839c7a379556a10287034bd55906d7094/llvm/include/llvm/Passes/PassBuilder.h#L124 > > Hrmph. Might need an assertion build to learn more. I'll try to look > again next week or so. Looks like I can reproduce this as well, libLLVM crashes when reaching AddReturnAttributes inside InlineFunction, when trying to access operands of the return instruction. I think, for whatever reason, the latest LLVM doesn't like (i.e. do not expect this when performing inlining pass) return instructions that do not have a return value, and this is what happens in the outblock of deform function we generate (slot_compile_deform). For verification, I've modified the deform.outblock to call LLVMBuildRet instead of LLVMBuildRetVoid and this seems to help -- inline and deform stages are still performed as before, but nothing crashes. But of course it doesn't sound right that inlining pass cannot process such code. Unfortunately I don't see any obvious change in the recent LLVM history that would justify this outcome, might be a genuine bug, will investigate further.
Commits
-
Run LLVM verify pass on IR in assert builds.
- 8583b1f99340 18.0 landed
-
Fix illegal attribute propagation in LLVM JIT.
- 01b55203ace0 12.19 landed
- 4f90750b5326 13.15 landed
- 7fe32eaa4a87 14.12 landed
- 74992929a79e 15.7 landed
- 53c8d6c9f157 17.0 landed
- bf1cfe77ed49 16.3 landed
-
Track LLVM 18 changes.
- d282e88e5052 17.0 cited
-
jit: Changes for LLVM 17.
- 76200e5ee469 17.0 cited