[flang-commits] [flang] [flang][cmake] Order flang profdata generation after clang's (PR #206023)

Madhur Amilkanthwar via flang-commits flang-commits at lists.llvm.org
Sun Jun 28 22:29:19 PDT 2026


https://github.com/madhur13490 updated https://github.com/llvm/llvm-project/pull/206023

>From 0a21526f35af3bbdabc3a836160aac0607c4f150 Mon Sep 17 00:00:00 2001
From: Madhur Amilkanthwar <madhura at nvidia.com>
Date: Thu, 25 Jun 2026 22:55:44 -0700
Subject: [PATCH 1/2] [flang][cmake] Order flang profdata generation after
 clang's

The clang and flang PGO pipelines clean and regenerate the same shared
profraw directories, so running them concurrently can truncate a profraw
while the other merge has it mmap'd. Add an ordering edge so flang's
pipeline runs after clang's.
---
 flang/test/CMakeLists.txt | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index 538432c05e14b..4c4dab9e7bf87 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -281,6 +281,14 @@ if(LLVM_BUILD_INSTRUMENTED)
     )
     add_custom_target(generate-flang-profdata DEPENDS "${PROFDATA}")
 
+    # The clang and flang profdata pipelines clean and regenerate the same
+    # shared profraw directories (profiles/ and clang/utils/perf-training).
+    # Order flang after clang so flang's clean/regenerate never races clang's
+    # merge while it has a profraw mmap'd.
+    if(TARGET generate-profdata)
+      add_dependencies(generate-flang-profdata generate-profdata)
+    endif()
+
     if(FLANG_PGO_TRAINING_CLANG_COUPLING)
       string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" LLVM_BUILD_UPPER_INSTRUMENTED)
       if (LLVM_BUILD_UPPER_INSTRUMENTED STREQUAL "CSSPGO")

>From 8fc8865c95e2d305b069bc98713fc101643fda2f Mon Sep 17 00:00:00 2001
From: Madhur Amilkanthwar <madhura at nvidia.com>
Date: Sun, 28 Jun 2026 22:24:31 -0700
Subject: [PATCH 2/2] fixup! guard the code

---
 flang/test/CMakeLists.txt | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index 4c4dab9e7bf87..d582514206d5e 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -281,20 +281,23 @@ if(LLVM_BUILD_INSTRUMENTED)
     )
     add_custom_target(generate-flang-profdata DEPENDS "${PROFDATA}")
 
-    # The clang and flang profdata pipelines clean and regenerate the same
-    # shared profraw directories (profiles/ and clang/utils/perf-training).
-    # Order flang after clang so flang's clean/regenerate never races clang's
-    # merge while it has a profraw mmap'd.
-    if(TARGET generate-profdata)
-      add_dependencies(generate-flang-profdata generate-profdata)
-    endif()
-
     if(FLANG_PGO_TRAINING_CLANG_COUPLING)
       string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" LLVM_BUILD_UPPER_INSTRUMENTED)
       if (LLVM_BUILD_UPPER_INSTRUMENTED STREQUAL "CSSPGO")
         message(STATUS "CSSPGO of flang is not supported")
       else()
         add_dependencies(clang-bootstrap-deps generate-flang-profdata)
+        # When clang drives the bootstrap PGO, clang's generate-profdata is
+        # also a bootstrap provider, so both pipelines run concurrently and
+        # clean/regenerate the same shared profraw dirs, racing each other's
+        # merge. Order flang after clang to remove the race. generate-profdata
+        # already runs in this case, so this adds no extra work; when flang
+        # drives the bootstrap (provider is generate-flang-profdata) the guard
+        # keeps it a no-op.
+        if(TARGET generate-profdata AND
+           "${PGO_OPT_PROFDATA_PROVIDER}" STREQUAL "generate-profdata")
+          add_dependencies(generate-flang-profdata generate-profdata)
+        endif()
       endif()
     endif()
   endif()



More information about the flang-commits mailing list