Skip to content

Commit ea195fc

Browse files
committed
Toolchain: Workaround incorrect ELPA results with GCC 15.1–15.2
1 parent 1ed4802 commit ea195fc

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

toolchain/scripts/stage3/install_elpa.sh

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,19 @@ case "$with_elpa" in
109109
config_flags="--enable-avx-kernels=${has_AVX} --enable-avx2-kernels=${has_AVX2} --enable-avx512-kernels=${has_AVX512}"
110110
fi
111111
fi
112+
113+
# GCC 15.1.1 and 15.2 miscompile ELPA's double-complex
114+
# AVX/AVX2 BLOCK2 kernels with tree SLP vectorization.
115+
elpa_c_workaround_flags=""
116+
cc_version="$("${MPICC}" -dumpfullversion -dumpversion 2>/dev/null || true)"
117+
cc_banner="$("${MPICC}" --version 2>/dev/null | head -n 1 || true)"
118+
119+
if [[ "${cc_banner}" == *gcc* || "${cc_banner}" == *GCC* ]]; then
120+
if [[ "${cc_version}" =~ ^15\.(1|2)(\.|$) ]]; then
121+
elpa_c_workaround_flags="-fno-tree-slp-vectorize"
122+
fi
123+
fi
124+
112125
for TARGET in "cpu" "nvidia"; do
113126
# Accept both uppercase and lowercase GPU enable flags for compatibility
114127
gpu_enabled="${ENABLE_CUDA}"
@@ -140,7 +153,7 @@ case "$with_elpa" in
140153
CXX=${MPICXX} \
141154
CPP="cpp -E" \
142155
FCFLAGS="${FCFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
143-
CFLAGS="${CFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
156+
CFLAGS="${CFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto ${elpa_c_workaround_flags}" \
144157
CXXFLAGS="${CXXFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
145158
LDFLAGS="${MATH_LDFLAGS} ${SCALAPACK_LDFLAGS} ${cray_ldflags} -lstdc++" \
146159
LIBS="${SCALAPACK_LIBS} $(resolve_string "${MATH_LIBS}" "MPI") ${MPI_LIBS}" \
@@ -171,7 +184,7 @@ case "$with_elpa" in
171184
CXX=${MPICXX} \
172185
CPP="cpp -E" \
173186
FCFLAGS="${FCFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
174-
CFLAGS="${CFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
187+
CFLAGS="${CFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto ${elpa_c_workaround_flags}" \
175188
CXXFLAGS="${CXXFLAGS} ${MATH_CFLAGS} ${SCALAPACK_CFLAGS} ${AVX_flag} ${FMA_flag} ${SSE4_flag} ${AVX512_flags} -fno-lto" \
176189
LDFLAGS="-Wl,--allow-multiple-definition -Wl,--enable-new-dtags ${MATH_LDFLAGS} ${SCALAPACK_LDFLAGS} ${cray_ldflags} -lstdc++" \
177190
LIBS="${SCALAPACK_LIBS} $(resolve_string "${MATH_LIBS}" "MPI")" \

0 commit comments

Comments
 (0)