8000 Track LLVM 15 changes. · postgres/postgres@da3a682 · GitHub
[go: up one dir, main page]

Skip to content

Commit da3a682

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 1228660 commit da3a682

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-0
lines changed

configure

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6748,6 +6748,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
67486748
fi
67496749

67506750

6751+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
6752+
$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
6753+
if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
6754+
$as_echo_n "(cached) " >&6
6755+
else
6756+
pgac_save_CFLAGS=$CFLAGS
6757+
pgac_save_CC=$CC
6758+
CC=${CLANG}
6759+
CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
6760+
ac_save_c_werror_flag=$ac_c_werror_flag
6761+
ac_c_werror_flag=yes
6762+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6763+
/* end confdefs.h. */
6764+
6765+
int
6766+
main ()
6767+
{
6768+
6769+
;
6770+
return 0;
6771+
}
6772+
_ACEOF
6773+
if ac_fn_c_try_compile "$LINENO"; then :
6774+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
6775+
else
6776+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
6777+
fi
6778+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6779+
ac_c_werror_flag=$ac_save_c_werror_flag
6780+
CFLAGS="$pgac_save_CFLAGS"
6781+
CC="$pgac_save_CC"
6782+
fi
6783+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
6784+
$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
6785+
if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
6786+
BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
6787+
fi
6788+
6789+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
6790+
$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
6791+
if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
6792+
$as_echo_n "(cached) " >&6
6793+
else
6794+
pgac_save_CXXFLAGS=$CXXFLAGS
6795+
pgac_save_CXX=$CXX
6796+
CXX=${CLANGXX}
6797+
CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
6798+
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
6799+
ac_cxx_werror_flag=yes
6800+
ac_ext=cpp
6801+
ac_cpp='$CXXCPP $CPPFLAGS'
6802+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
6803+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
6804+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
6805+
6806+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6807+
/* end confdefs.h. */
6808+
6809+
int
6810+
main ()
6811+
{
6812+
6813+
;
6814+
return 0;
6815+
}
6816+
_ACEOF
6817+
if ac_fn_cxx_try_compile "$LINENO"; then :
6818+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
6819+
else
6820+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
6821+
fi
6822+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6823+
ac_ext=c
6824+
ac_cpp='$CPP $CPPFLAGS'
6825+
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
6826+
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
6827+
ac_compiler_gnu=$ac_cv_c_compiler_gnu
6828+
6829+
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
6830+
CXXFLAGS="$pgac_save_CXXFLAGS"
6831+
CXX="$pgac_save_CXX"
6832+
fi
6833+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
6834+
$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
6835+
if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
6836+
BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
6837+
fi
6838+
6839+
67516840
NOT_THE_CFLAGS=""
67526841
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
67536842
$as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }

configure.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ if test "$with_llvm" = yes ; then
573573
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
574574
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
575575

576+
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
577+
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
578+
576579
NOT_THE_CFLAGS=""
577580
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
578581
if test -n "$NOT_THE_CFLAGS"; then

src/backend/jit/llvm/llvmjit.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,16 @@ llvm_session_initialize(void)
762762
LLVMInitializeNativeAsmPrinter();
763763
LLVMInitializeNativeAsmParser();
764764

765+
/*
766+
* When targeting an LLVM version with opaque pointers enabled by
767+
* default, turn them off for the context we build our code in. We don't
768+
* need to do so for other contexts (e.g. llvm_ts_context). Once the IR is
769+
* generated, it carries the necessary information.
770+
*/
771+
#if LLVM_VERSION_MAJOR > 14
772+
LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
773+
#endif
774+
765775
/*
766776
* Synchronize types early, as that also includes inferring the target
767777
* triple.
@@ -1110,7 +1120,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
11101120
LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
11111121
LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
11121122
{
1123+
#if LLVM_VERSION_MAJOR > 14
1124+
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize);
1125+
#else
11131126
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
1127+
#endif
11141128
LLVMErrorRef error;
11151129
LLVMOrcMaterializationUnitRef mu;
11161130

@@ -1228,7 +1242,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
12281242
* Symbol resolution support for "special" functions, e.g. a call into an
12291243
* SQL callable function.
12301244
*/
1245+
#if LLVM_VERSION_MAJOR > 14
1246+
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
1247+
#else
12311248
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
1249+
#endif
12321250
LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
12331251

12341252
return lljit;

src/backend/jit/llvm/llvmjit_inline.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ extern "C"
6262
#include <llvm/IR/ModuleSummaryIndex.h>
6363
#include <llvm/Linker/IRMover.h>
6464
#include <llvm/Support/ManagedStatic.h>
65+
#include <llvm/Support/MemoryBuffer.h>
6566

6667

6768
/*

0 commit comments

Comments
 (0)
0