]> git.pld-linux.org Git - packages/postgresql.git/blob - llvm15.patch
llvm rebuild
[packages/postgresql.git] / llvm15.patch
1 From d033f8f8bea9c7b5c4ae43a95b569ceccdaddd7a Mon Sep 17 00:00:00 2001
2 From: Thomas Munro <tmunro@postgresql.org>
3 Date: Wed, 19 Oct 2022 22:32:14 +1300
4 Subject: [PATCH] Track LLVM 15 changes.
5
6 Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque
7 pointers still exists and we can request that on our context.  We have
8 until LLVM 16 to move to opaque pointers, a much larger change.
9
10 Back-patch to 11, where LLVM support arrived.
11
12 Author: Thomas Munro <thomas.munro@gmail.com>
13 Author: Andres Freund <andres@anarazel.de>
14 Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
15 ---
16  configure                               | 89 +++++++++++++++++++++++++
17  configure.ac                            |  3 +
18  src/backend/jit/llvm/llvmjit.c          | 18 +++++
19  src/backend/jit/llvm/llvmjit_inline.cpp |  1 +
20  4 files changed, 111 insertions(+)
21
22 diff --git a/configure b/configure
23 index 57ec071cf9..a15c2253d5 100755
24 --- a/configure
25 +++ b/configure
26 @@ -7259,6 +7259,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
27  fi
28  
29  
30 +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
31 +$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
32 +if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
33 +  $as_echo_n "(cached) " >&6
34 +else
35 +  pgac_save_CFLAGS=$CFLAGS
36 +pgac_save_CC=$CC
37 +CC=${CLANG}
38 +CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
39 +ac_save_c_werror_flag=$ac_c_werror_flag
40 +ac_c_werror_flag=yes
41 +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
42 +/* end confdefs.h.  */
43 +
44 +int
45 +main ()
46 +{
47 +
48 +  ;
49 +  return 0;
50 +}
51 +_ACEOF
52 +if ac_fn_c_try_compile "$LINENO"; then :
53 +  pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
54 +else
55 +  pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
56 +fi
57 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
58 +ac_c_werror_flag=$ac_save_c_werror_flag
59 +CFLAGS="$pgac_save_CFLAGS"
60 +CC="$pgac_save_CC"
61 +fi
62 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
63 +$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
64 +if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
65 +  BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
66 +fi
67 +
68 +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
69 +$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
70 +if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
71 +  $as_echo_n "(cached) " >&6
72 +else
73 +  pgac_save_CXXFLAGS=$CXXFLAGS
74 +pgac_save_CXX=$CXX
75 +CXX=${CLANGXX}
76 +CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
77 +ac_save_cxx_werror_flag=$ac_cxx_werror_flag
78 +ac_cxx_werror_flag=yes
79 +ac_ext=cpp
80 +ac_cpp='$CXXCPP $CPPFLAGS'
81 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
82 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
83 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
84 +
85 +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
86 +/* end confdefs.h.  */
87 +
88 +int
89 +main ()
90 +{
91 +
92 +  ;
93 +  return 0;
94 +}
95 +_ACEOF
96 +if ac_fn_cxx_try_compile "$LINENO"; then :
97 +  pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
98 +else
99 +  pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
100 +fi
101 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
102 +ac_ext=c
103 +ac_cpp='$CPP $CPPFLAGS'
104 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
105 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
106 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
107 +
108 +ac_cxx_werror_flag=$ac_save_cxx_werror_flag
109 +CXXFLAGS="$pgac_save_CXXFLAGS"
110 +CXX="$pgac_save_CXX"
111 +fi
112 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
113 +$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
114 +if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
115 +  BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
116 +fi
117 +
118 +
119    NOT_THE_CFLAGS=""
120    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
121  $as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }
122 diff --git a/configure.ac b/configure.ac
123 index 227bc896b6..6d13ae5888 100644
124 --- a/configure.ac
125 +++ b/configure.ac
126 @@ -600,6 +600,9 @@ if test "$with_llvm" = yes ; then
127    PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
128    PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
129  
130 +  PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
131 +  PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
132 +
133    NOT_THE_CFLAGS=""
134    PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
135    if test -n "$NOT_THE_CFLAGS"; then
136 diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
137 index fb29449573..199fff4f77 100644
138 --- a/src/backend/jit/llvm/llvmjit.c
139 +++ b/src/backend/jit/llvm/llvmjit.c
140 @@ -798,6 +798,16 @@ llvm_session_initialize(void)
141         LLVMInitializeNativeAsmPrinter();
142         LLVMInitializeNativeAsmParser();
143  
144 +       /*
145 +        * When targeting an LLVM version with opaque pointers enabled by
146 +        * default, turn them off for the context we build our code in.  We don't
147 +        * need to do so for other contexts (e.g. llvm_ts_context).  Once the IR is
148 +        * generated, it carries the necessary information.
149 +        */
150 +#if LLVM_VERSION_MAJOR > 14
151 +       LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
152 +#endif
153 +
154         /*
155          * Synchronize types early, as that also includes inferring the target
156          * triple.
157 @@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
158                                          LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
159                                          LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
160  {
161 +#if LLVM_VERSION_MAJOR > 14
162 +       LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize);
163 +#else
164         LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
165 +#endif
166         LLVMErrorRef error;
167         LLVMOrcMaterializationUnitRef mu;
168  
169 @@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
170          * Symbol resolution support for "special" functions, e.g. a call into an
171          * SQL callable function.
172          */
173 +#if LLVM_VERSION_MAJOR > 14
174 +       ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
175 +#else
176         ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
177 +#endif
178         LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
179  
180         return lljit;
181 diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp b/src/backend/jit/llvm/llvmjit_inline.cpp
182 index 9bb4b672a7..774d9e8b66 100644
183 --- a/src/backend/jit/llvm/llvmjit_inline.cpp
184 +++ b/src/backend/jit/llvm/llvmjit_inline.cpp
185 @@ -62,6 +62,7 @@ extern "C"
186  #include <llvm/IR/ModuleSummaryIndex.h>
187  #include <llvm/Linker/IRMover.h>
188  #include <llvm/Support/ManagedStatic.h>
189 +#include <llvm/Support/MemoryBuffer.h>
190  
191  
192  /*
193 -- 
194 2.30.2
195
This page took 0.038666 seconds and 3 git commands to generate.