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
This commit is contained in:
parent
1228660d1a
commit
da3a6825eb
89
configure
vendored
89
configure
vendored
@ -6748,6 +6748,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
|
||||||
|
$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
|
||||||
|
if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
pgac_save_CFLAGS=$CFLAGS
|
||||||
|
pgac_save_CC=$CC
|
||||||
|
CC=${CLANG}
|
||||||
|
CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
|
||||||
|
ac_save_c_werror_flag=$ac_c_werror_flag
|
||||||
|
ac_c_werror_flag=yes
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
|
||||||
|
else
|
||||||
|
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
ac_c_werror_flag=$ac_save_c_werror_flag
|
||||||
|
CFLAGS="$pgac_save_CFLAGS"
|
||||||
|
CC="$pgac_save_CC"
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
|
||||||
|
$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
|
||||||
|
if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
|
||||||
|
BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
|
||||||
|
fi
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
|
||||||
|
$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
|
||||||
|
if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
pgac_save_CXXFLAGS=$CXXFLAGS
|
||||||
|
pgac_save_CXX=$CXX
|
||||||
|
CXX=${CLANGXX}
|
||||||
|
CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
|
||||||
|
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
|
||||||
|
ac_cxx_werror_flag=yes
|
||||||
|
ac_ext=cpp
|
||||||
|
ac_cpp='$CXXCPP $CPPFLAGS'
|
||||||
|
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||||
|
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||||
|
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||||
|
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_cxx_try_compile "$LINENO"; then :
|
||||||
|
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
|
||||||
|
else
|
||||||
|
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
ac_ext=c
|
||||||
|
ac_cpp='$CPP $CPPFLAGS'
|
||||||
|
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||||
|
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||||
|
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
|
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
|
||||||
|
CXXFLAGS="$pgac_save_CXXFLAGS"
|
||||||
|
CXX="$pgac_save_CXX"
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
|
||||||
|
$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
|
||||||
|
if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
|
||||||
|
BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
NOT_THE_CFLAGS=""
|
NOT_THE_CFLAGS=""
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
|
||||||
$as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }
|
$as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }
|
||||||
|
@ -573,6 +573,9 @@ if test "$with_llvm" = yes ; then
|
|||||||
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
|
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
|
||||||
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
|
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
|
||||||
|
|
||||||
|
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
|
||||||
|
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
|
||||||
|
|
||||||
NOT_THE_CFLAGS=""
|
NOT_THE_CFLAGS=""
|
||||||
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
|
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
|
||||||
if test -n "$NOT_THE_CFLAGS"; then
|
if test -n "$NOT_THE_CFLAGS"; then
|
||||||
|
@ -762,6 +762,16 @@ llvm_session_initialize(void)
|
|||||||
LLVMInitializeNativeAsmPrinter();
|
LLVMInitializeNativeAsmPrinter();
|
||||||
LLVMInitializeNativeAsmParser();
|
LLVMInitializeNativeAsmParser();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When targeting an LLVM version with opaque pointers enabled by
|
||||||
|
* default, turn them off for the context we build our code in. We don't
|
||||||
|
* need to do so for other contexts (e.g. llvm_ts_context). Once the IR is
|
||||||
|
* generated, it carries the necessary information.
|
||||||
|
*/
|
||||||
|
#if LLVM_VERSION_MAJOR > 14
|
||||||
|
LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Synchronize types early, as that also includes inferring the target
|
* Synchronize types early, as that also includes inferring the target
|
||||||
* triple.
|
* triple.
|
||||||
@ -1110,7 +1120,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
|
|||||||
LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
|
LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
|
||||||
LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
|
LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
|
||||||
{
|
{
|
||||||
|
#if LLVM_VERSION_MAJOR > 14
|
||||||
|
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize);
|
||||||
|
#else
|
||||||
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
|
LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
|
||||||
|
#endif
|
||||||
LLVMErrorRef error;
|
LLVMErrorRef error;
|
||||||
LLVMOrcMaterializationUnitRef mu;
|
LLVMOrcMaterializationUnitRef mu;
|
||||||
|
|
||||||
@ -1228,7 +1242,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
|
|||||||
* Symbol resolution support for "special" functions, e.g. a call into an
|
* Symbol resolution support for "special" functions, e.g. a call into an
|
||||||
* SQL callable function.
|
* SQL callable function.
|
||||||
*/
|
*/
|
||||||
|
#if LLVM_VERSION_MAJOR > 14
|
||||||
|
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
|
||||||
|
#else
|
||||||
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
|
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
|
||||||
|
#endif
|
||||||
LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
|
LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
|
||||||
|
|
||||||
return lljit;
|
return lljit;
|
||||||
|
@ -62,6 +62,7 @@ extern "C"
|
|||||||
#include <llvm/IR/ModuleSummaryIndex.h>
|
#include <llvm/IR/ModuleSummaryIndex.h>
|
||||||
#include <llvm/Linker/IRMover.h>
|
#include <llvm/Linker/IRMover.h>
|
||||||
#include <llvm/Support/ManagedStatic.h>
|
#include <llvm/Support/ManagedStatic.h>
|
||||||
|
#include <llvm/Support/MemoryBuffer.h>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user