Skip to content

Commit aa34bc4

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 44efd34 commit aa34bc4

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
@@ -6958,6 +6958,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
69586958
fi
69596959

69606960

6961+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
6962+
$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
6963+
if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
6964+
$as_echo_n "(cached) " >&6
6965+
else
6966+
pgac_save_CFLAGS=$CFLAGS
6967+
pgac_save_CC=$CC
6968+
CC=${CLANG}
6969+
CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
6970+
ac_save_c_werror_flag=$ac_c_werror_flag
6971+
ac_c_werror_flag=yes
6972+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6973+
/* end confdefs.h. */
6974+
6975+
int
6976+
main ()
6977+
{
6978+
6979+
;
6980+
return 0;
6981+
}
6982+
_ACEOF
6983+
if ac_fn_c_try_compile "$LINENO"; then :
6984+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
6985+
else
6986+
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
6987+
fi
6988+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6989+
ac_c_werror_flag=$ac_save_c_werror_flag
6990+
CFLAGS="$pgac_save_CFLAGS"
6991+
CC="$pgac_save_CC"
6992+
fi
6993+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
6994+
$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
6995+
if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
6996+
BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
6997+
fi
6998+
6999+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
7000+
$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
7001+
if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
7002+
$as_echo_n "(cached) " >&6
7003+
else
7004+
pgac_save_CXXFLAGS=$CXXFLAGS
7005+
pgac_save_CXX=$CXX
7006+
CXX=${CLANGXX}
7007+
CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7008+
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
7009+
ac_cxx_werror_flag=yes
7010+
ac_ext=cpp
7011+
ac_cpp='$CXXCPP $CPPFLAGS'
7012+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7013+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7014+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
7015+
7016+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7017+
/* end confdefs.h. */
7018+
7019+
int
7020+
main ()
7021+
{
7022+
7023+
;
7024+
return 0;
7025+
}
7026+
_ACEOF
7027+
if ac_fn_cxx_try_compile "$LINENO"; then :
7028+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
7029+
else
7030+
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
7031+
fi
7032+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7033+
ac_ext=c
7034+
ac_cpp='$CPP $CPPFLAGS'
7035+
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7036+
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7037+
ac_compiler_gnu=$ac_cv_c_compiler_gnu
7038+
7039+
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
7040+
CXXFLAGS="$pgac_save_CXXFLAGS"
7041+
CXX="$pgac_save_CXX"
7042+
fi
7043+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
7044+
$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
7045+
if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
7046+
BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7047+
fi
7048+
7049+
69617050
NOT_THE_CFLAGS=""
69627051
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
69637052
$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
@@ -584,6 +584,9 @@ if test "$with_llvm" = yes ; then
584584
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
585585
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
586586

587+
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
588+
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
589+
587590
NOT_THE_CFLAGS=""
588591
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
589592
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
@@ -763,6 +763,16 @@ llvm_session_initialize(void)
763763
LLVMInitializeNativeAsmPrinter();
764764
LLVMInitializeNativeAsmParser();
765765

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

@@ -1232,7 +1246,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
12321246
* Symbol resolution support for "special" functions, e.g. a call into an
12331247
* SQL callable function.
12341248
*/
1249+
#if LLVM_VERSION_MAJOR > 14
1250+
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
1251+
#else
12351252
ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
1253+
#endif
12361254
LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
12371255

12381256
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)