LLVM 16 (opaque pointers)
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-05-21T03:01:41Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
jit: Adjust back-patch of f90b4a84 to 12 and 13.
- 9ad98627614b 12.17 landed
- 7c070e224c4a 13.13 landed
-
Log LLVM library version in configure output.
- 0a6e2c7f8694 11.22 landed
- 527e62a5e5d7 12.17 landed
- a13b63c788a3 13.13 landed
- 03e749c2b89e 14.10 landed
- 0e49e23782c5 15.5 landed
- 3b0f20f6ce14 16.1 landed
- 5e4dacb9878c 17.0 landed
-
jit: Changes for LLVM 17.
- 7da915e33abf 12.17 landed
- 53c4dabe18d3 13.13 landed
- 0a8b7d5c1126 14.10 landed
- b60e3ac7603d 15.5 landed
- 774185056834 16.1 landed
- 76200e5ee469 17.0 landed
-
jit: Supply LLVMGlobalGetValueType() for LLVM < 8.
- 60596f148a66 16.1 landed
- d701f0d1f3e7 12.17 landed
- 981292c19f38 13.13 landed
- ee3e4c41f354 14.10 landed
- b2e097788663 15.5 landed
- f90b4a846b32 17.0 landed
-
jit: Support opaque pointers in LLVM 16.
- 15ddc9725eb7 12.17 landed
- f28956b239f1 13.13 landed
- 82d9a782a296 14.10 landed
- eed1feb3fee1 15.5 landed
- 74d19ec096df 16.1 landed
- 37d5babb5cfa 17.0 landed
-
jit: Reference function pointer types via llvmjit_types.c.
- df99ddc70b97 14.0 cited
Attachments
- 0001-jit-Support-opaque-pointers-in-LLVM-16.patch (text/x-patch) patch 0001
Hi, Here is a draft version of the long awaited patch to support LLVM 16. It's mostly mechanical donkeywork, but it took some time: this donkey found it quite hard to understand the mighty getelementptr instruction[1] and the code generation well enough to figure out all the right types, and small mistakes took some debugging effort*. I now finally have a patch that passes all tests. Though it's not quite ready yet, I thought I should give this status update to report that the main task is more or less complete, since we're starting to get quite a few emails about it (mostly from Fedora users) and there is an entry for it on the Open Items for 16 wiki page. Comments/review/testing welcome. Here are some things I think I need to do next (probably after PGCon): 1. If you use non-matching clang and LLVM versions I think we might use "clang -no-opaque-pointers" at the wrong times (I've not looked into that interaction yet). 2. The treatment of function types is a bit inconsistent/messy and could be tidied up. 3. There are quite a lot of extra function calls that could perhaps be elided (ie type variables instead of LLVMTypeInt8(), and calls to LLVMStructGetTypeAtIndex() that are not used in LLVM < 16). 4. Could use some comments. 5. I need to test with very old versions of LLVM and Clang that we claim to support (I have several years' worth of releases around but nothing older than 9). 6. I need to go through the types again with a fine tooth comb, and check the test coverage to look out for eg GEP array arithmetic with the wrong type/size that isn't being exercised. *For anyone working with this type of IR generation code and questioning their sanity, I can pass on some excellent advice I got from Andres: build LLVM yourself with assertions enabled, as they catch some classes of silly mistake that otherwise just segfault inscrutably on execution. [1] https://llvm.org/docs/GetElementPtr.html