From 2443f8b011a853196c6d62224def1023df13c4a0 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 12:10:11 -0400 Subject: [PATCH 01/11] fix: extend CCE 19.0.0 -Oipa0 workaround to m_mpi_common.fpp m_mpi_common.fpp triggers the same bring_routine_resident SIGSEGV in optcg during ipa_processing as m_phase_change.fpp. Adds -Oipa0 for the pre_process build (where CI consistently fails) and for simulation as a precaution, since pre_process fails first and blocks visibility of whether simulation also crashes. --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 823520ae47..53e42851c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -734,6 +734,12 @@ if (MFC_PRE_PROCESS) MPI) if(CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") target_compile_options(pre_process PRIVATE -hfp0) + # CCE 19.0.0 IPA workaround: m_mpi_common triggers bring_routine_resident + # SIGSEGV in optcg during ipa_processing. See simulation block below for details. + set_source_files_properties( + "${CMAKE_BINARY_DIR}/fypp/pre_process/m_mpi_common.fpp.f90" + PROPERTIES COMPILE_OPTIONS "-Oipa0" + ) endif() endif() @@ -744,7 +750,7 @@ if (MFC_SIMULATION) # CCE 19.0.0 IPA workaround: disable interprocedural analysis for files # that trigger compiler crashes during IPA: # m_bubbles_EL: castIsValid assertion (InstCombine/foldIntegerTypedPHI) - # m_phase_change: bring_routine_resident SIGSEGV + # m_phase_change, m_mpi_common: bring_routine_resident SIGSEGV # Not applied to Cray+OpenMP because thermochem uses !DIR$ INLINEALWAYS, # which requires IPA to inline device calls. On OpenACC the pyrometheus # patch emits !$acc routine seq instead (no IPA needed). See PR #1286. @@ -752,6 +758,7 @@ if (MFC_SIMULATION) set_source_files_properties( "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" "${CMAKE_BINARY_DIR}/fypp/simulation/m_phase_change.fpp.f90" + "${CMAKE_BINARY_DIR}/fypp/simulation/m_mpi_common.fpp.f90" PROPERTIES COMPILE_OPTIONS "-Oipa0" ) endif() From 40e2de525e7b4a9cdc7161f91026d5fb8ddeb2c2 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 15:42:55 -0400 Subject: [PATCH 02/11] ci: clean stale Frontier build slugs before compile, fix famd LD_LIBRARY_PATH ordering On Frontier, the compute-node build step previously inherited whatever CMake state the login-node --deps-only step left behind. Wipe compiled Fortran staging/install slugs before each build while preserving dep dirs (silo, hdf5, lapack, fftw) that require internet to fetch. Also remove trailing whitespace in famd LD_LIBRARY_PATH export. --- .github/workflows/common/build.sh | 14 ++++++++++++++ toolchain/bootstrap/modules.sh | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/common/build.sh b/.github/workflows/common/build.sh index 94669e6d30..a6f04d962e 100755 --- a/.github/workflows/common/build.sh +++ b/.github/workflows/common/build.sh @@ -25,9 +25,23 @@ fi # source code is built here on the compute node. # Phoenix: always start fresh to avoid SIGILL from stale binaries compiled # on a different microarchitecture. +# Frontier: wipe only compiled Fortran staging/install slugs; preserve dep +# dirs (silo, hdf5, lapack, fftw) which were built on the login node and +# cannot be re-fetched from a compute node (no internet). if [ "$job_cluster" = "phoenix" ]; then source .github/scripts/clean-build.sh clean_build +elif [ "$job_cluster" = "frontier" ] || [ "$job_cluster" = "frontier_amd" ]; then + for _dir in build/staging/ build/install/; do + if [ -d "$_dir" ]; then + for _sub in "$_dir"*/; do + _name=$(basename "$_sub") + case "$_name" in silo|hdf5|lapack|fftw) continue ;; esac + rm -rf "$_sub" + done + fi + done + unset _dir _sub _name fi source .github/scripts/retry-build.sh diff --git a/toolchain/bootstrap/modules.sh b/toolchain/bootstrap/modules.sh index fcf5750787..1a2aa677a5 100644 --- a/toolchain/bootstrap/modules.sh +++ b/toolchain/bootstrap/modules.sh @@ -145,7 +145,7 @@ if [ "$u_c" '==' 'famd' ]; then export CRAY_MPICH_LIB="-L${CRAY_MPICH_PREFIX}/lib \ ${CRAY_PMI_POST_LINK_OPTS} \ -lmpifort_amd -lmpi_amd -lmpi -lpmi -lpmi2" - export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${CRAY_LD_LIBRARY_PATH}" + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${CRAY_LD_LIBRARY_PATH}" export CMAKE_PREFIX_PATH="${OLCF_AFAR_ROOT}:${CMAKE_PREFIX_PATH}" export FC="${OLCF_AFAR_ROOT}/bin/amdflang" From 1110fe9c277b10e2343717ff188003068835c415 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 17:53:10 -0400 Subject: [PATCH 03/11] fix: preserve hipfort in Frontier partial clean (no internet on compute nodes) --- .github/workflows/common/build.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/common/build.sh b/.github/workflows/common/build.sh index a6f04d962e..81a643354e 100755 --- a/.github/workflows/common/build.sh +++ b/.github/workflows/common/build.sh @@ -26,8 +26,8 @@ fi # Phoenix: always start fresh to avoid SIGILL from stale binaries compiled # on a different microarchitecture. # Frontier: wipe only compiled Fortran staging/install slugs; preserve dep -# dirs (silo, hdf5, lapack, fftw) which were built on the login node and -# cannot be re-fetched from a compute node (no internet). +# dirs (silo, hdf5, lapack, fftw, hipfort) which were built on the login node +# and cannot be re-fetched from a compute node (no internet). if [ "$job_cluster" = "phoenix" ]; then source .github/scripts/clean-build.sh clean_build @@ -36,7 +36,7 @@ elif [ "$job_cluster" = "frontier" ] || [ "$job_cluster" = "frontier_amd" ]; the if [ -d "$_dir" ]; then for _sub in "$_dir"*/; do _name=$(basename "$_sub") - case "$_name" in silo|hdf5|lapack|fftw) continue ;; esac + case "$_name" in silo|hdf5|lapack|fftw|hipfort) continue ;; esac rm -rf "$_sub" done fi From 2d1c344aeed16f70cf5e5f65ed4b2c850e3cb0d8 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 18:16:53 -0400 Subject: [PATCH 04/11] fix: add simulation/m_start_up to CCE 19.0.0 IPA workaround list --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 53e42851c2..0aae959c0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -759,6 +759,7 @@ if (MFC_SIMULATION) "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" "${CMAKE_BINARY_DIR}/fypp/simulation/m_phase_change.fpp.f90" "${CMAKE_BINARY_DIR}/fypp/simulation/m_mpi_common.fpp.f90" + "${CMAKE_BINARY_DIR}/fypp/simulation/m_start_up.fpp.f90" PROPERTIES COMPILE_OPTIONS "-Oipa0" ) endif() From 8ef75652cceef5b610fae90690a9affbdfc82da9 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 18:18:11 -0400 Subject: [PATCH 05/11] fix: extend CCE 19.0.0 -Oipa0 workaround to full targets (not per-file) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per-file set_source_files_properties is insufficient because the IPA pass inlines across all files in the target — any file can become the crash site. Apply -Oipa0 target-wide for pre_process and simulation (Cray, not OpenMP). OpenMP excluded: thermochem requires IPA for !DIR$ INLINEALWAYS device calls. --- CMakeLists.txt | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0aae959c0c..46ed4108c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -734,12 +734,11 @@ if (MFC_PRE_PROCESS) MPI) if(CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") target_compile_options(pre_process PRIVATE -hfp0) - # CCE 19.0.0 IPA workaround: m_mpi_common triggers bring_routine_resident - # SIGSEGV in optcg during ipa_processing. See simulation block below for details. - set_source_files_properties( - "${CMAKE_BINARY_DIR}/fypp/pre_process/m_mpi_common.fpp.f90" - PROPERTIES COMPILE_OPTIONS "-Oipa0" - ) + # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during + # ipa_processing. The crash is nondeterministic and can hit any file via + # cross-file inlining, so disable IPA for the whole target. Safe for + # pre_process (CPU-only, no thermochem IPA requirements). + target_compile_options(pre_process PRIVATE -Oipa0) endif() endif() @@ -747,21 +746,15 @@ if (MFC_SIMULATION) MFC_SETUP_TARGET(TARGET simulation SOURCES "${simulation_SRCs}" MPI FFTW OpenACC OpenMP) - # CCE 19.0.0 IPA workaround: disable interprocedural analysis for files - # that trigger compiler crashes during IPA: - # m_bubbles_EL: castIsValid assertion (InstCombine/foldIntegerTypedPHI) - # m_phase_change, m_mpi_common: bring_routine_resident SIGSEGV + # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during + # ipa_processing. The crash is nondeterministic — IPA inlines across all + # files in the target, so any file can become the crash site. Per-file + # -Oipa0 via set_source_files_properties is insufficient. # Not applied to Cray+OpenMP because thermochem uses !DIR$ INLINEALWAYS, # which requires IPA to inline device calls. On OpenACC the pyrometheus # patch emits !$acc routine seq instead (no IPA needed). See PR #1286. if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND NOT MFC_OpenMP) - set_source_files_properties( - "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" - "${CMAKE_BINARY_DIR}/fypp/simulation/m_phase_change.fpp.f90" - "${CMAKE_BINARY_DIR}/fypp/simulation/m_mpi_common.fpp.f90" - "${CMAKE_BINARY_DIR}/fypp/simulation/m_start_up.fpp.f90" - PROPERTIES COMPILE_OPTIONS "-Oipa0" - ) + target_compile_options(simulation PRIVATE -Oipa0) endif() endif() From e3a68087a1cc67b3ea6b1fc5e0afc2b270e8d406 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 18:58:50 -0400 Subject: [PATCH 06/11] fix: per-file -Oipa0 for CCE IPA crashers in OpenMP simulation builds --- CMakeLists.txt | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46ed4108c0..e114eb9792 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -748,13 +748,25 @@ if (MFC_SIMULATION) MPI FFTW OpenACC OpenMP) # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during # ipa_processing. The crash is nondeterministic — IPA inlines across all - # files in the target, so any file can become the crash site. Per-file - # -Oipa0 via set_source_files_properties is insufficient. - # Not applied to Cray+OpenMP because thermochem uses !DIR$ INLINEALWAYS, - # which requires IPA to inline device calls. On OpenACC the pyrometheus - # patch emits !$acc routine seq instead (no IPA needed). See PR #1286. - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND NOT MFC_OpenMP) - target_compile_options(simulation PRIVATE -Oipa0) + # files in the target, so any file can become the crash site. + # For non-OpenMP builds: disable IPA for the entire target (safe, no IPA + # requirements). For OpenMP builds: thermochem uses !DIR$ INLINEALWAYS + # which requires IPA for device-call inlining, so we cannot disable IPA + # globally. Instead apply -Oipa0 per-file to the known crash sites. + # On OpenACC the pyrometheus patch emits !$acc routine seq (no IPA needed). + # See PR #1286. + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") + if (NOT MFC_OpenMP) + target_compile_options(simulation PRIVATE -Oipa0) + else() + set_source_files_properties( + "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" + "${CMAKE_BINARY_DIR}/fypp/simulation/m_phase_change.fpp.f90" + "${CMAKE_BINARY_DIR}/fypp/simulation/m_mpi_common.fpp.f90" + "${CMAKE_BINARY_DIR}/fypp/simulation/m_start_up.fpp.f90" + PROPERTIES COMPILE_OPTIONS "-Oipa0" + ) + endif() endif() endif() From 38ce1e1369de1338bd23c794ef5f09c92b42a2fd Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 19:15:24 -0400 Subject: [PATCH 07/11] fix: gate CCE 19 IPA workaround on GITHUB_ACTIONS env var --- CMakeLists.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e114eb9792..72b4bcbb7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -735,10 +735,12 @@ if (MFC_PRE_PROCESS) if(CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") target_compile_options(pre_process PRIVATE -hfp0) # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during - # ipa_processing. The crash is nondeterministic and can hit any file via - # cross-file inlining, so disable IPA for the whole target. Safe for - # pre_process (CPU-only, no thermochem IPA requirements). - target_compile_options(pre_process PRIVATE -Oipa0) + # ipa_processing on GitHub Actions runners. Only manifests in CI (runner + # memory layout triggers the nondeterministic crash). Guard with + # GITHUB_ACTIONS so local Frontier builds keep full IPA performance. + if (DEFINED ENV{GITHUB_ACTIONS}) + target_compile_options(pre_process PRIVATE -Oipa0) + endif() endif() endif() @@ -747,15 +749,14 @@ if (MFC_SIMULATION) SOURCES "${simulation_SRCs}" MPI FFTW OpenACC OpenMP) # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during - # ipa_processing. The crash is nondeterministic — IPA inlines across all - # files in the target, so any file can become the crash site. + # ipa_processing on GitHub Actions runners. Only manifests in CI. # For non-OpenMP builds: disable IPA for the entire target (safe, no IPA # requirements). For OpenMP builds: thermochem uses !DIR$ INLINEALWAYS # which requires IPA for device-call inlining, so we cannot disable IPA # globally. Instead apply -Oipa0 per-file to the known crash sites. # On OpenACC the pyrometheus patch emits !$acc routine seq (no IPA needed). # See PR #1286. - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND DEFINED ENV{GITHUB_ACTIONS}) if (NOT MFC_OpenMP) target_compile_options(simulation PRIVATE -Oipa0) else() From c89fd5571105089282b35c5aa5fd71ddb5f7d09d Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 20:03:02 -0400 Subject: [PATCH 08/11] fix: restrict whole-target -Oipa0 to CPU builds; GPU builds use per-file --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72b4bcbb7a..a0ba986860 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -750,14 +750,13 @@ if (MFC_SIMULATION) MPI FFTW OpenACC OpenMP) # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during # ipa_processing on GitHub Actions runners. Only manifests in CI. - # For non-OpenMP builds: disable IPA for the entire target (safe, no IPA - # requirements). For OpenMP builds: thermochem uses !DIR$ INLINEALWAYS - # which requires IPA for device-call inlining, so we cannot disable IPA - # globally. Instead apply -Oipa0 per-file to the known crash sites. - # On OpenACC the pyrometheus patch emits !$acc routine seq (no IPA needed). + # CPU builds: safe to disable IPA for the entire target (no GPU device-call + # requirements). GPU builds (OpenACC or OpenMP): whole-target -Oipa0 breaks + # cross-file !$acc routine / !DIR$ INLINEALWAYS device registration, causing + # runtime aborts. Apply -Oipa0 per-file to the known crash sites only. # See PR #1286. if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND DEFINED ENV{GITHUB_ACTIONS}) - if (NOT MFC_OpenMP) + if (NOT MFC_OpenACC AND NOT MFC_OpenMP) target_compile_options(simulation PRIVATE -Oipa0) else() set_source_files_properties( From 10c2de82287de63bbe3786a45362a741724d2b52 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 20:06:21 -0400 Subject: [PATCH 09/11] fix: make GPU per-file -Oipa0 unconditional; CPU whole-target stays CI-only --- CMakeLists.txt | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a0ba986860..971c605ae2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -748,17 +748,17 @@ if (MFC_SIMULATION) MFC_SETUP_TARGET(TARGET simulation SOURCES "${simulation_SRCs}" MPI FFTW OpenACC OpenMP) - # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during - # ipa_processing on GitHub Actions runners. Only manifests in CI. - # CPU builds: safe to disable IPA for the entire target (no GPU device-call - # requirements). GPU builds (OpenACC or OpenMP): whole-target -Oipa0 breaks - # cross-file !$acc routine / !DIR$ INLINEALWAYS device registration, causing - # runtime aborts. Apply -Oipa0 per-file to the known crash sites only. - # See PR #1286. - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND DEFINED ENV{GITHUB_ACTIONS}) - if (NOT MFC_OpenACC AND NOT MFC_OpenMP) - target_compile_options(simulation PRIVATE -Oipa0) - else() + # CCE 19.0.0 optcg ICE: two distinct crashes triggered by IPA inlining: + # m_bubbles_EL: castIsValid assertion (InstCombine/foldIntegerTypedPHI) + # m_phase_change, m_mpi_common, m_start_up: bring_routine_resident SIGSEGV + # Both crash locally and in CI on GPU builds. Apply -Oipa0 per-file + # unconditionally to the known crash sites (IPA cross-file inlining triggers + # the ICE; per-file disabling prevents it without affecting other files). + # CPU-only builds in CI additionally disable IPA for the whole target + # (safe — no GPU device-call requirements, and the crash is nondeterministic + # so any file can become the crash site). See PR #1286. + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") + if (MFC_OpenACC OR MFC_OpenMP) set_source_files_properties( "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" "${CMAKE_BINARY_DIR}/fypp/simulation/m_phase_change.fpp.f90" @@ -766,6 +766,8 @@ if (MFC_SIMULATION) "${CMAKE_BINARY_DIR}/fypp/simulation/m_start_up.fpp.f90" PROPERTIES COMPILE_OPTIONS "-Oipa0" ) + elseif (DEFINED ENV{GITHUB_ACTIONS}) + target_compile_options(simulation PRIVATE -Oipa0) endif() endif() endif() From 78ba220017f743522a066f2468ad540a1574adf4 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 20:23:30 -0400 Subject: [PATCH 10/11] fix: gate all CCE IPA workarounds on GITHUB_ACTIONS; GPU per-file, CPU whole-target --- CMakeLists.txt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 971c605ae2..40f711727a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -748,16 +748,17 @@ if (MFC_SIMULATION) MFC_SETUP_TARGET(TARGET simulation SOURCES "${simulation_SRCs}" MPI FFTW OpenACC OpenMP) - # CCE 19.0.0 optcg ICE: two distinct crashes triggered by IPA inlining: + # CCE 19.0.0 optcg ICE on GitHub Actions runners: IPA inlining triggers two + # distinct crashes in optcg: # m_bubbles_EL: castIsValid assertion (InstCombine/foldIntegerTypedPHI) # m_phase_change, m_mpi_common, m_start_up: bring_routine_resident SIGSEGV - # Both crash locally and in CI on GPU builds. Apply -Oipa0 per-file - # unconditionally to the known crash sites (IPA cross-file inlining triggers - # the ICE; per-file disabling prevents it without affecting other files). - # CPU-only builds in CI additionally disable IPA for the whole target - # (safe — no GPU device-call requirements, and the crash is nondeterministic - # so any file can become the crash site). See PR #1286. - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") + # GPU builds: apply -Oipa0 per-file to known crash sites. Whole-target + # -Oipa0 is not safe for GPU builds — it breaks cross-file !$acc routine / + # !DIR$ INLINEALWAYS device-call registration, causing runtime aborts. + # CPU builds: disable IPA for the whole target (safe — no GPU requirements, + # and the crash is nondeterministic so any file can become the crash site). + # See PR #1286. + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND DEFINED ENV{GITHUB_ACTIONS}) if (MFC_OpenACC OR MFC_OpenMP) set_source_files_properties( "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90" @@ -766,7 +767,7 @@ if (MFC_SIMULATION) "${CMAKE_BINARY_DIR}/fypp/simulation/m_start_up.fpp.f90" PROPERTIES COMPILE_OPTIONS "-Oipa0" ) - elseif (DEFINED ENV{GITHUB_ACTIONS}) + else() target_compile_options(simulation PRIVATE -Oipa0) endif() endif() From 2f83f0a845b0ec8cf2c4f6b599293bcb272f8b56 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 8 May 2026 20:35:44 -0400 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20remove=20GITHUB=5FACTIONS=20guard?= =?UTF-8?q?=20=E2=80=94=20CCE=2019=20IPA=20crash=20also=20hits=20local=20b?= =?UTF-8?q?uilds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40f711727a..5622d94105 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -735,12 +735,10 @@ if (MFC_PRE_PROCESS) if(CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") target_compile_options(pre_process PRIVATE -hfp0) # CCE 19.0.0 IPA ICE: bring_routine_resident SIGSEGV in optcg during - # ipa_processing on GitHub Actions runners. Only manifests in CI (runner - # memory layout triggers the nondeterministic crash). Guard with - # GITHUB_ACTIONS so local Frontier builds keep full IPA performance. - if (DEFINED ENV{GITHUB_ACTIONS}) - target_compile_options(pre_process PRIVATE -Oipa0) - endif() + # ipa_processing. Nondeterministic — any file can become the crash site + # via cross-file inlining. Safe to disable IPA for the whole target + # (CPU-only, no GPU device-call requirements). See PR #1286. + target_compile_options(pre_process PRIVATE -Oipa0) endif() endif() @@ -748,8 +746,7 @@ if (MFC_SIMULATION) MFC_SETUP_TARGET(TARGET simulation SOURCES "${simulation_SRCs}" MPI FFTW OpenACC OpenMP) - # CCE 19.0.0 optcg ICE on GitHub Actions runners: IPA inlining triggers two - # distinct crashes in optcg: + # CCE 19.0.0 optcg ICE: IPA inlining triggers two distinct crashes: # m_bubbles_EL: castIsValid assertion (InstCombine/foldIntegerTypedPHI) # m_phase_change, m_mpi_common, m_start_up: bring_routine_resident SIGSEGV # GPU builds: apply -Oipa0 per-file to known crash sites. Whole-target @@ -758,7 +755,7 @@ if (MFC_SIMULATION) # CPU builds: disable IPA for the whole target (safe — no GPU requirements, # and the crash is nondeterministic so any file can become the crash site). # See PR #1286. - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND DEFINED ENV{GITHUB_ACTIONS}) + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") if (MFC_OpenACC OR MFC_OpenMP) set_source_files_properties( "${CMAKE_BINARY_DIR}/fypp/simulation/m_bubbles_EL.fpp.f90"