mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
jit: Use opaque pointers in all supported LLVM versions.
LLVM's opaque pointer change began in LLVM 14, but remained optional
until LLVM 16. When commit 37d5babb
added opaque pointer support, we
didn't turn it on for LLVM 14 and 15 yet because we didn't want to risk
weird bitcode incompatibility problems in released branches of
PostgreSQL. (That might have been overly cautious, I don't know.)
Now that PostgreSQL 18 has dropped support for LLVM versions < 14, and
since it hasn't been released yet and no extensions or bitcode have been
built against it in the wild yet, we can be more aggressive. We can rip
out the support code and build system clutter that made opaque pointer
use optional.
Author: Thomas Munro <thomas.munro@gmail.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Discussions: https://postgr.es/m/CA%2BhUKGLhNs5geZaVNj2EJ79Dx9W8fyWUU3HxcpZy55sMGcY%3DiA%40mail.gmail.com
This commit is contained in:
parent
972c2cd288
commit
ee4859123e
89
configure
vendored
89
configure
vendored
@ -7281,95 +7281,6 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
|
||||
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=""
|
||||
{ $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; }
|
||||
|
@ -631,9 +631,6 @@ if test "$with_llvm" = yes ; then
|
||||
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-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=""
|
||||
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
|
||||
if test -n "$NOT_THE_CFLAGS"; then
|
||||
|
@ -840,19 +840,6 @@ llvm_session_initialize(void)
|
||||
llvm_llvm_context_reuse_count = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* When targeting LLVM 15, turn off opaque pointers 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.
|
||||
*
|
||||
* For 16 and above, opaque pointers must be used, and we have special
|
||||
* code for that.
|
||||
*/
|
||||
#if LLVM_VERSION_MAJOR == 15
|
||||
LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Synchronize types early, as that also includes inferring the target
|
||||
* triple.
|
||||
|
@ -60,9 +60,6 @@ endif
|
||||
|
||||
# XXX: Need to determine proper version of the function cflags for clang
|
||||
bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv']
|
||||
if llvm.version().version_compare('=15.0')
|
||||
bitcode_cflags += ['-Xclang', '-no-opaque-pointers']
|
||||
endif
|
||||
bitcode_cflags += get_option('c_args')
|
||||
bitcode_cflags += cppflags
|
||||
|
||||
|
@ -107,41 +107,25 @@ l_pbool_const(bool i)
|
||||
static inline LLVMValueRef
|
||||
l_struct_gep(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, int32 idx, const char *name)
|
||||
{
|
||||
#if LLVM_VERSION_MAJOR < 16
|
||||
return LLVMBuildStructGEP(b, v, idx, "");
|
||||
#else
|
||||
return LLVMBuildStructGEP2(b, t, v, idx, "");
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline LLVMValueRef
|
||||
l_gep(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, LLVMValueRef *indices, int32 nindices, const char *name)
|
||||
{
|
||||
#if LLVM_VERSION_MAJOR < 16
|
||||
return LLVMBuildGEP(b, v, indices, nindices, name);
|
||||
#else
|
||||
return LLVMBuildGEP2(b, t, v, indices, nindices, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline LLVMValueRef
|
||||
l_load(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, const char *name)
|
||||
{
|
||||
#if LLVM_VERSION_MAJOR < 16
|
||||
return LLVMBuildLoad(b, v, name);
|
||||
#else
|
||||
return LLVMBuildLoad2(b, t, v, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline LLVMValueRef
|
||||
l_call(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef fn, LLVMValueRef *args, int32 nargs, const char *name)
|
||||
{
|
||||
#if LLVM_VERSION_MAJOR < 16
|
||||
return LLVMBuildCall(b, fn, args, nargs, name);
|
||||
#else
|
||||
return LLVMBuildCall2(b, t, fn, args, nargs, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user