Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit c2ae01f

Browse files
committed
Track LLVM 15 changes.
Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque pointers still exists and we can request that on our context. We have until LLVM 16 to move to opaque pointers, a much larger change. Back-patch to 11, where LLVM support arrived. Author: Thomas Munro <thomas.munro@gmail.com> Author: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
1 parent df3737a commit c2ae01f

File tree

4 files changed

+113
-0
lines changed

4 files changed

+113
-0
lines changed

configure

+89
Original file line numberDiff line numberDiff line change
@@ -7481,6 +7481,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
74817481
fi
74827482

74837483

7484+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
7485+
$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
7486+
if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
7487+
$as_echo_n "(cached) " >&6
7488+
else
7489+
pgac_save_CFLAGS=$CFLAGS
7490+
pgac_save_CC=$CC
7491+
CC=${CLANG}
7492+
CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
7493+
ac_save_c_werror_flag=$ac_c_werror_flag
7494+
ac_c_werror_flag=yes
7495+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7496+
/* end confdefs.h. */
7497+
7498+
int
7499+
main ()
7500+
{
7501+
7502+
;
7503+
return 0;
7504+
}
7505+
_ACEOF
7506+
if ac_fn_c_try_compile "$LINENO"; then :
7507+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
7508+
else
7509+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
7510+
fi
7511+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7512+
ac_c_werror_flag=$ac_save_c_werror_flag
7513+
CFLAGS="$pgac_save_CFLAGS"
7514+
CC="$pgac_save_CC"
7515+
fi
7516+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
7517+
$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
7518+
if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
7519+
BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
7520+
fi
7521+
7522+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
7523+
$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
7524+
if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
7525+
$as_echo_n "(cached) " >&6
7526+
else
7527+
pgac_save_CXXFLAGS=$CXXFLAGS
7528+
pgac_save_CXX=$CXX
7529+
CXX=${CLANGXX}
7530+
CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7531+
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
7532+
ac_cxx_werror_flag=yes
7533+
ac_ext=cpp
7534+
ac_cpp='$CXXCPP $CPPFLAGS'
7535+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7536+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7537+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
7538+
7539+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7540+
/* end confdefs.h. */
7541+
7542+
int
7543+
main ()
7544+
{
7545+
7546+
;
7547+
return 0;
7548+
}
7549+
_ACEOF
7550+
if ac_fn_cxx_try_compile "$LINENO"; then :
7551+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
7552+
else
7553+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
7554+
fi
7555+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7556+
ac_ext=c
7557+
ac_cpp='$CPP $CPPFLAGS'
7558+
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7559+
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7560+
ac_compiler_gnu=$ac_cv_c_compiler_gnu
7561+
7562+
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
7563+
CXXFLAGS="$pgac_save_CXXFLAGS"
7564+
CXX="$pgac_save_CXX"
7565+
fi
7566+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
7567+
$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
7568+
if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
7569+
BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7570+
fi
7571+
7572+
74847573
NOT_THE_CFLAGS=""
74857574
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
74867575
$as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }

configure.ac

+3
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,9 @@ if test "$with_llvm" = yes ; then
627627
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
628628
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
629629

630+
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
631+
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
632+
630633
NOT_THE_CFLAGS=""
631634
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
632635
if test -n "$NOT_THE_CFLAGS"; then

src/backend/jit/llvm/llvmjit.c

+18
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,16 @@ llvm_session_initialize(void)
798798
LLVMInitializeNativeAsmPrinter();
799799
LLVMInitializeNativeAsmParser();
800800

801+
/*
802+
* When targeting an LLVM version with opaque pointers enabled by
803+
* default, turn them off for the context we build our code in. We don't
804+
* need to do so for other contexts (e.g. llvm_ts_context). Once the IR is
805+
* generated, it carries the necessary information.
806+
*/
807+
#if LLVM_VERSION_MAJOR > 14
808+
LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
809+
#endif
810+
801811
/*
802812
* Synchronize types early, as that also includes inferring the target
803813
* triple.
@@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
11121122
LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
11131123
LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
11141124
{
1125+
#if LLVM_VERSION_MAJOR > 14
1126+
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize);
1127+
#else
11151128
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
1129+
#endif
11161130
LLVMErrorRef error;
11171131
LLVMOrcMaterializationUnitRef mu;
11181132

@@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
12301244
* Symbol resolution support for "special" functions, e.g. a call into an
12311245
* SQL callable function.
12321246
*/
1247+
#if LLVM_VERSION_MAJOR > 14
1248+
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
1249+
#else
12331250
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
1251+
#endif
12341252
LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
12351253

12361254
return lljit;

src/backend/jit/llvm/meson.build

+3
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ endif
5858

5959
# XXX: Need to determine proper version of the function cflags for clang
6060
bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv']
61+
if llvm.version().version_compare('>=15.0')
62+
bitcode_cflags += ['-Xclang', '-no-opaque-pointers']
63+
endif
6164
bitcode_cflags += cppflags
6265

6366
# XXX: Worth improving on the logic to find directories here

0 commit comments

Comments
 (0)