Skip to content

Commit ee48591

Browse files
committed
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 37d5bab 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 <[email protected]> Reviewed-by: Peter Eisentraut <[email protected]> Discussions: https://postgr.es/m/CA%2BhUKGLhNs5geZaVNj2EJ79Dx9W8fyWUU3HxcpZy55sMGcY%3DiA%40mail.gmail.com
1 parent 972c2cd commit ee48591

File tree

5 files changed

+0
-124
lines changed

5 files changed

+0
-124
lines changed

configure

-89
Original file line numberDiff line numberDiff line change
@@ -7281,95 +7281,6 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
72817281
fi
72827282

72837283

7284-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
7285-
$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
7286-
if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
7287-
$as_echo_n "(cached) " >&6
7288-
else
7289-
pgac_save_CFLAGS=$CFLAGS
7290-
pgac_save_CC=$CC
7291-
CC=${CLANG}
7292-
CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
7293-
ac_save_c_werror_flag=$ac_c_werror_flag
7294-
ac_c_werror_flag=yes
7295-
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7296-
/* end confdefs.h. */
7297-
7298-
int
7299-
main ()
7300-
{
7301-
7302-
;
7303-
return 0;
7304-
}
7305-
_ACEOF
7306-
if ac_fn_c_try_compile "$LINENO"; then :
7307-
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
7308-
else
7309-
pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
7310-
fi
7311-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7312-
ac_c_werror_flag=$ac_save_c_werror_flag
7313-
CFLAGS="$pgac_save_CFLAGS"
7314-
CC="$pgac_save_CC"
7315-
fi
7316-
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
7317-
$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
7318-
if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
7319-
BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
7320-
fi
7321-
7322-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
7323-
$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
7324-
if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
7325-
$as_echo_n "(cached) " >&6
7326-
else
7327-
pgac_save_CXXFLAGS=$CXXFLAGS
7328-
pgac_save_CXX=$CXX
7329-
CXX=${CLANGXX}
7330-
CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7331-
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
7332-
ac_cxx_werror_flag=yes
7333-
ac_ext=cpp
7334-
ac_cpp='$CXXCPP $CPPFLAGS'
7335-
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7336-
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7337-
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
7338-
7339-
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7340-
/* end confdefs.h. */
7341-
7342-
int
7343-
main ()
7344-
{
7345-
7346-
;
7347-
return 0;
7348-
}
7349-
_ACEOF
7350-
if ac_fn_cxx_try_compile "$LINENO"; then :
7351-
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
7352-
else
7353-
pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
7354-
fi
7355-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7356-
ac_ext=c
7357-
ac_cpp='$CPP $CPPFLAGS'
7358-
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
7359-
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
7360-
ac_compiler_gnu=$ac_cv_c_compiler_gnu
7361-
7362-
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
7363-
CXXFLAGS="$pgac_save_CXXFLAGS"
7364-
CXX="$pgac_save_CXX"
7365-
fi
7366-
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
7367-
$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
7368-
if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
7369-
BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
7370-
fi
7371-
7372-
73737284
NOT_THE_CFLAGS=""
73747285
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
73757286
$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
@@ -631,9 +631,6 @@ if test "$with_llvm" = yes ; then
631631
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
632632
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
633633

634-
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
635-
PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
636-
637634
NOT_THE_CFLAGS=""
638635
PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
639636
if test -n "$NOT_THE_CFLAGS"; then

src/backend/jit/llvm/llvmjit.c

-13
Original file line numberDiff line numberDiff line change
@@ -840,19 +840,6 @@ llvm_session_initialize(void)
840840
llvm_llvm_context_reuse_count = 0;
841841
}
842842

843-
/*
844-
* When targeting LLVM 15, turn off opaque pointers for the context we
845-
* build our code in. We don't need to do so for other contexts (e.g.
846-
* llvm_ts_context). Once the IR is generated, it carries the necessary
847-
* information.
848-
*
849-
* For 16 and above, opaque pointers must be used, and we have special
850-
* code for that.
851-
*/
852-
#if LLVM_VERSION_MAJOR == 15
853-
LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
854-
#endif
855-
856843
/*
857844
* Synchronize types early, as that also includes inferring the target
858845
* triple.

src/backend/jit/llvm/meson.build

-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ endif
6060

6161
# XXX: Need to determine proper version of the function cflags for clang
6262
bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv']
63-
if llvm.version().version_compare('=15.0')
64-
bitcode_cflags += ['-Xclang', '-no-opaque-pointers']
65-
endif
6663
bitcode_cflags += get_option('c_args')
6764
bitcode_cflags += cppflags
6865

src/include/jit/llvmjit_emit.h

-16
Original file line numberDiff line numberDiff line change
@@ -107,41 +107,25 @@ l_pbool_const(bool i)
107107
static inline LLVMValueRef
108108
l_struct_gep(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, int32 idx, const char *name)
109109
{
110-
#if LLVM_VERSION_MAJOR < 16
111-
return LLVMBuildStructGEP(b, v, idx, "");
112-
#else
113110
return LLVMBuildStructGEP2(b, t, v, idx, "");
114-
#endif
115111
}
116112

117113
static inline LLVMValueRef
118114
l_gep(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, LLVMValueRef *indices, int32 nindices, const char *name)
119115
{
120-
#if LLVM_VERSION_MAJOR < 16
121-
return LLVMBuildGEP(b, v, indices, nindices, name);
122-
#else
123116
return LLVMBuildGEP2(b, t, v, indices, nindices, name);
124-
#endif
125117
}
126118

127119
static inline LLVMValueRef
128120
l_load(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef v, const char *name)
129121
{
130-
#if LLVM_VERSION_MAJOR < 16
131-
return LLVMBuildLoad(b, v, name);
132-
#else
133122
return LLVMBuildLoad2(b, t, v, name);
134-
#endif
135123
}
136124

137125
static inline LLVMValueRef
138126
l_call(LLVMBuilderRef b, LLVMTypeRef t, LLVMValueRef fn, LLVMValueRef *args, int32 nargs, const char *name)
139127
{
140-
#if LLVM_VERSION_MAJOR < 16
141-
return LLVMBuildCall(b, fn, args, nargs, name);
142-
#else
143128
return LLVMBuildCall2(b, t, fn, args, nargs, name);
144-
#endif
145129
}
146130

147131
/*

0 commit comments

Comments
 (0)