[llvm] Add macOS premerge check workflow (PR #207435)

Mishal Shah via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 16 21:46:35 PDT 2026


https://github.com/shahmishal updated https://github.com/llvm/llvm-project/pull/207435

>From 4592973b72322eec62908bbec6409cb6b9b3ff90 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 3 Jul 2026 10:41:33 -0700
Subject: [PATCH 01/23] Add macOS premerge check workflow

Added a premerge check workflow for macOS self-hosted runners to build and test projects.
---
 .github/workflows/premerge.yaml | 38 +++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index d506e631e2f21..4825b80da2c76 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -248,3 +248,41 @@ jobs:
 
           # The libcxx tests fail, so we are skipping the runtime targets.
           ninja -C build ${project_check_targets}
+
+  premerge-check-macos-self-hosted-runners:
+    name: Build and Test macOS
+    runs-on: [self-hosted, macos, apple-runners]
+    if: >-
+        github.repository_owner == 'llvm' &&
+        (github.event_name != 'pull_request' || github.event.action != 'closed')
+    steps:
+      - name: Checkout LLVM
+        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+          fetch-depth: 2
+      - name: Install Ninja
+        run: |
+          brew install ninja
+      - name: Build and Test
+        run: |
+          source <(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py)
+
+          if [[ "${projects_to_build}" == "" ]]; then
+            echo "No projects to build"
+            exit 0
+          fi
+
+          echo "Building projects: ${projects_to_build}"
+          echo "Running project checks targets: ${project_check_targets}"
+
+          xcrun cmake -G Ninja \
+                -B build \
+                -S llvm \
+                -DLLVM_ENABLE_PROJECTS="${projects_to_build}" \
+                -DLLVM_DISABLE_ASSEMBLY_FILES=ON \
+                -DCMAKE_BUILD_TYPE=Release \
+                -DLLDB_INCLUDE_TESTS=OFF \
+                -DLLVM_ENABLE_ASSERTIONS=ON \
+
+          ninja -C build ${project_check_targets}

>From 880315710e05b23174e500f50618fea78c691d37 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 3 Jul 2026 23:38:41 -0700
Subject: [PATCH 02/23] Enhance debug output in premerge workflow

Added debug statements to display changed files and building information.
---
 .github/workflows/premerge.yaml | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 4825b80da2c76..18fc6eb01c409 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -266,16 +266,23 @@ jobs:
           brew install ninja
       - name: Build and Test
         run: |
+          echo "** Debug **"
+          git diff --name-only HEAD~1...HEAD
+          echo "** Debug **"
+          
           source <(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py)
 
+          echo "Building projects: ${projects_to_build}"
+          echo "Running project checks targets: ${project_check_targets}"
+          echo "Building runtimes: ${runtimes_to_build}"
+          echo "Running runtimes checks targets: ${runtimes_check_targets}"
+          echo "Running runtimes checks requiring reconfiguring targets: ${runtimes_check_targets_needs_reconfig}"
+
           if [[ "${projects_to_build}" == "" ]]; then
             echo "No projects to build"
             exit 0
           fi
 
-          echo "Building projects: ${projects_to_build}"
-          echo "Running project checks targets: ${project_check_targets}"
-
           xcrun cmake -G Ninja \
                 -B build \
                 -S llvm \

>From 263f980a7052f165f26e8e4f7a49cb890966cfc4 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Sat, 4 Jul 2026 00:02:52 -0700
Subject: [PATCH 03/23] [Github] Fix macOS self-hosted premerge env var
 sourcing

source <(...) via process substitution silently produces empty variables under macOS's bash 3.2, causing the job to skip building any projects. Write compute_projects.py output to a temp file and source that instead.
---
 .github/workflows/premerge.yaml | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 18fc6eb01c409..2a1aa447fcd54 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -266,11 +266,8 @@ jobs:
           brew install ninja
       - name: Build and Test
         run: |
-          echo "** Debug **"
-          git diff --name-only HEAD~1...HEAD
-          echo "** Debug **"
-          
-          source <(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py)
+          git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py > /tmp/env_vars.sh
+          source /tmp/env_vars.sh
 
           echo "Building projects: ${projects_to_build}"
           echo "Running project checks targets: ${project_check_targets}"

>From 2199a83060a8be8ff078e085484377ea0b8c0e5c Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Sat, 4 Jul 2026 00:12:13 -0700
Subject: [PATCH 04/23] [Github] Install cmake for macOS self-hosted premerge
 runners

---
 .github/workflows/premerge.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 2a1aa447fcd54..fb5f1d53cf4fb 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -261,9 +261,9 @@ jobs:
         with:
           persist-credentials: false
           fetch-depth: 2
-      - name: Install Ninja
+      - name: Install Ninja and CMake
         run: |
-          brew install ninja
+          brew install ninja cmake
       - name: Build and Test
         run: |
           git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py > /tmp/env_vars.sh

>From 93c134991bcf979144dbd0471b68763e58ea35a8 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 7 Jul 2026 11:25:14 -0700
Subject: [PATCH 05/23] [Github] Add sccache S3 support for macOS self-hosted
 premerge runners

Configures sccache with the sccache-bucket S3 bucket (us-west-2) for
the self-hosted macOS premerge job to speed up rebuilds.
---
 .github/workflows/premerge.yaml | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index fb5f1d53cf4fb..0d2b6554fd0c6 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -261,10 +261,14 @@ jobs:
         with:
           persist-credentials: false
           fetch-depth: 2
-      - name: Install Ninja and CMake
+      - name: Install Ninja, CMake, and sccache
         run: |
           brew install ninja cmake
+          command -v sccache >/dev/null || brew install sccache
       - name: Build and Test
+        env:
+          SCCACHE_BUCKET: sccache-bucket
+          SCCACHE_REGION: us-west-2
         run: |
           git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py > /tmp/env_vars.sh
           source /tmp/env_vars.sh
@@ -280,6 +284,10 @@ jobs:
             exit 0
           fi
 
+          export SCCACHE_IDLE_TIMEOUT=0
+          mkdir -p artifacts
+          SCCACHE_LOG=info SCCACHE_ERROR_LOG=$(pwd)/artifacts/sccache.log sccache --start-server
+
           xcrun cmake -G Ninja \
                 -B build \
                 -S llvm \
@@ -288,5 +296,9 @@ jobs:
                 -DCMAKE_BUILD_TYPE=Release \
                 -DLLDB_INCLUDE_TESTS=OFF \
                 -DLLVM_ENABLE_ASSERTIONS=ON \
+                -DCMAKE_C_COMPILER_LAUNCHER=sccache \
+                -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
 
           ninja -C build ${project_check_targets}
+
+          sccache --show-stats

>From 5c1893cc4fbad140f8b280ec2b1787e9d0a889b1 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 7 Jul 2026 14:46:46 -0700
Subject: [PATCH 06/23] [Github] Fix output/env var name mismatches in macOS
 self-hosted premerge job

The Compute Projects step's outputs and the Build and Test step's
env vars used inconsistent names (macos-projects vs projects_to_build,
hyphen vs underscore), so the gating condition was always false and
PROJECTS/CHECK_TARGETS were always empty. Align names with the pattern
used in the Windows job.
---
 .github/workflows/premerge.yaml | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 0d2b6554fd0c6..0525e0f6841bd 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -265,10 +265,8 @@ jobs:
         run: |
           brew install ninja cmake
           command -v sccache >/dev/null || brew install sccache
-      - name: Build and Test
-        env:
-          SCCACHE_BUCKET: sccache-bucket
-          SCCACHE_REGION: us-west-2
+      - name: Compute Projects
+        id: vars
         run: |
           git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py > /tmp/env_vars.sh
           source /tmp/env_vars.sh
@@ -279,11 +277,16 @@ jobs:
           echo "Running runtimes checks targets: ${runtimes_check_targets}"
           echo "Running runtimes checks requiring reconfiguring targets: ${runtimes_check_targets_needs_reconfig}"
 
-          if [[ "${projects_to_build}" == "" ]]; then
-            echo "No projects to build"
-            exit 0
-          fi
-
+          echo "macos-projects=${projects_to_build}" >> $GITHUB_OUTPUT
+          echo "macos-check-targets=${project_check_targets}" >> $GITHUB_OUTPUT
+      - name: Build and Test
+        if: ${{ steps.vars.outputs.macos-projects != '' }}
+        env:
+          SCCACHE_BUCKET: sccache-bucket
+          SCCACHE_REGION: us-west-2
+          PROJECTS: ${{ steps.vars.outputs.macos-projects }}
+          CHECK_TARGETS: ${{ steps.vars.outputs.macos-check-targets }}
+        run: |
           export SCCACHE_IDLE_TIMEOUT=0
           mkdir -p artifacts
           SCCACHE_LOG=info SCCACHE_ERROR_LOG=$(pwd)/artifacts/sccache.log sccache --start-server
@@ -291,7 +294,7 @@ jobs:
           xcrun cmake -G Ninja \
                 -B build \
                 -S llvm \
-                -DLLVM_ENABLE_PROJECTS="${projects_to_build}" \
+                -DLLVM_ENABLE_PROJECTS="${PROJECTS}" \
                 -DLLVM_DISABLE_ASSEMBLY_FILES=ON \
                 -DCMAKE_BUILD_TYPE=Release \
                 -DLLDB_INCLUDE_TESTS=OFF \
@@ -299,6 +302,14 @@ jobs:
                 -DCMAKE_C_COMPILER_LAUNCHER=sccache \
                 -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
 
-          ninja -C build ${project_check_targets}
+          echo "::group::Build $PROJECTS"
+          ninja -C build
+          echo "::endgroup::"
+
+          for target in ${CHECK_TARGETS}; do
+            echo "::group::Running $target"
+            ninja -C build "$target"
+            echo "::endgroup::"
+          done
 
           sccache --show-stats

>From 7b0a5f1cb8b87f4106dd2718f0ace59854c49f6c Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 7 Jul 2026 22:59:33 -0700
Subject: [PATCH 07/23] [Github] Skip macOS self-hosted premerge job when no
 projects need building

Compute the changed-project list in a separate job on ubuntu-latest,
using the GitHub API to fetch the PR's changed files, and only spin up
the macOS self-hosted runner if there's actually something to build.
---
 .github/workflows/premerge.yaml | 63 +++++++++++++++++++++++++++------
 1 file changed, 53 insertions(+), 10 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 0525e0f6841bd..c285f49379429 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -249,26 +249,51 @@ jobs:
           # The libcxx tests fail, so we are skipping the runtime targets.
           ninja -C build ${project_check_targets}
 
-  premerge-check-macos-self-hosted-runners:
-    name: Build and Test macOS
-    runs-on: [self-hosted, macos, apple-runners]
+  premerge-compute-macos-self-hosted:
+    name: Compute macOS Projects
     if: >-
         github.repository_owner == 'llvm' &&
         (github.event_name != 'pull_request' || github.event.action != 'closed')
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      pull-requests: read
+    outputs:
+      macos-projects: ${{ steps.vars.outputs.macos-projects }}
+      macos-check-targets: ${{ steps.vars.outputs.macos-check-targets }}
     steps:
+      # For pull requests we get the changed files from the GitHub API, so we
+      # only need a sparse checkout of .ci/ to run compute_projects.py. For
+      # pushes (e.g. release branches) there is no PR to query, so we fall
+      # back to a git diff, which needs real history.
+      - name: Checkout LLVM (sparse)
+        if: github.event_name == 'pull_request'
+        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+          sparse-checkout: .ci
+          sparse-checkout-cone-mode: false
       - name: Checkout LLVM
+        if: github.event_name != 'pull_request'
         uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
         with:
           persist-credentials: false
           fetch-depth: 2
-      - name: Install Ninja, CMake, and sccache
+      - name: Get Changed Files
+        env:
+          GH_TOKEN: ${{ github.token }}
+          PR_NUMBER: ${{ github.event.pull_request.number }}
+          REPO: ${{ github.repository }}
         run: |
-          brew install ninja cmake
-          command -v sccache >/dev/null || brew install sccache
+          if [[ "${{ github.event_name }}" == "pull_request" ]]; then
+            gh api "repos/${REPO}/pulls/${PR_NUMBER}/files" --paginate --jq '.[].filename' > /tmp/changed_files.txt
+          else
+            git diff --name-only HEAD~1...HEAD > /tmp/changed_files.txt
+          fi
       - name: Compute Projects
         id: vars
         run: |
-          git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py > /tmp/env_vars.sh
+          python3 .ci/compute_projects.py Darwin < /tmp/changed_files.txt > /tmp/env_vars.sh
           source /tmp/env_vars.sh
 
           echo "Building projects: ${projects_to_build}"
@@ -279,13 +304,31 @@ jobs:
 
           echo "macos-projects=${projects_to_build}" >> $GITHUB_OUTPUT
           echo "macos-check-targets=${project_check_targets}" >> $GITHUB_OUTPUT
+
+  premerge-check-macos-self-hosted-runners:
+    name: Build and Test macOS
+    needs: premerge-compute-macos-self-hosted
+    runs-on: [self-hosted, macos, apple-runners]
+    if: >-
+        github.repository_owner == 'llvm' &&
+        (github.event_name != 'pull_request' || github.event.action != 'closed') &&
+        needs.premerge-compute-macos-self-hosted.outputs.macos-projects != ''
+    steps:
+      - name: Checkout LLVM
+        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+          fetch-depth: 2
+      - name: Install Ninja, CMake, and sccache
+        run: |
+          brew install ninja cmake
+          command -v sccache >/dev/null || brew install sccache
       - name: Build and Test
-        if: ${{ steps.vars.outputs.macos-projects != '' }}
         env:
           SCCACHE_BUCKET: sccache-bucket
           SCCACHE_REGION: us-west-2
-          PROJECTS: ${{ steps.vars.outputs.macos-projects }}
-          CHECK_TARGETS: ${{ steps.vars.outputs.macos-check-targets }}
+          PROJECTS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-projects }}
+          CHECK_TARGETS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-check-targets }}
         run: |
           export SCCACHE_IDLE_TIMEOUT=0
           mkdir -p artifacts

>From 8460f8c81a6d45a65e1e9fd1f1cddee21af7cadb Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 7 Jul 2026 23:20:57 -0700
Subject: [PATCH 08/23] [Github] Exclude mlir/flang/flang-rt from macOS
 self-hosted premerge

The self-hosted macOS runners are not yet set up to build/test these
projects, so filter them out of the computed project/check-target
lists before they are used, without changing compute_projects.py
(shared with the macos-14 GitHub-hosted runner job).
---
 .github/workflows/premerge.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index c285f49379429..129ce51e95ed5 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -296,6 +296,13 @@ jobs:
           python3 .ci/compute_projects.py Darwin < /tmp/changed_files.txt > /tmp/env_vars.sh
           source /tmp/env_vars.sh
 
+          # The self-hosted macOS runners aren't set up to build/test mlir or
+          # flang (flang-rt depends on flang), so drop them here rather than
+          # in compute_projects.py, which is shared with the macos-14
+          # GitHub-hosted runner job above.
+          projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E '^(mlir|flang|flang-rt)$' | paste -sd ';' -)
+          project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E '^(check-mlir|check-flang|check-flang-rt)$' | paste -sd ' ' -)
+
           echo "Building projects: ${projects_to_build}"
           echo "Running project checks targets: ${project_check_targets}"
           echo "Building runtimes: ${runtimes_to_build}"

>From 35dea81d61a9216b470b9d160f92ecd9f02ecd4b Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 10 Jul 2026 13:43:37 -0700
Subject: [PATCH 09/23] Include lldb, compiler-rt, and libnuwind projects on
 macOS

---
 .ci/compute_projects.py | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index 30296ff05f322..d4012a48ace5d 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -132,16 +132,13 @@
 
 EXCLUDE_MAC = {
     "bolt",
-    "compiler-rt",
     "cross-project-tests",
     "flang",
     "libc",
-    "lldb",
     "openmp",
     "polly",
     "libcxx",
     "libcxxabi",
-    "libunwind",
     "offload",
 }
 

>From 842978db1eb235cd3c6ee1d4bb34950ed5eb2d7a Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 10 Jul 2026 14:27:05 -0700
Subject: [PATCH 10/23] [Github] Exclude CIR from macOS self-hosted premerge
 and extract exclusion lists

---
 .github/workflows/premerge.yaml | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 129ce51e95ed5..05e33ab96f4d6 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -296,12 +296,14 @@ jobs:
           python3 .ci/compute_projects.py Darwin < /tmp/changed_files.txt > /tmp/env_vars.sh
           source /tmp/env_vars.sh
 
-          # The self-hosted macOS runners aren't set up to build/test mlir or
-          # flang (flang-rt depends on flang), so drop them here rather than
-          # in compute_projects.py, which is shared with the macos-14
-          # GitHub-hosted runner job above.
-          projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E '^(mlir|flang|flang-rt)$' | paste -sd ';' -)
-          project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E '^(check-mlir|check-flang|check-flang-rt)$' | paste -sd ' ' -)
+          # The self-hosted macOS runners aren't set up to build/test mlir,
+          # flang (flang-rt depends on flang), or CIR (depends on mlir), so
+          # drop them here rather than in compute_projects.py, which is
+          # shared with the macos-14 GitHub-hosted runner job above.
+          excluded_projects="mlir|flang|flang-rt|CIR"
+          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir"
+          projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E "^(${excluded_projects})$" | paste -sd ';' -)
+          project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E "^(${excluded_check_targets})$" | paste -sd ' ' -)
 
           echo "Building projects: ${projects_to_build}"
           echo "Running project checks targets: ${project_check_targets}"

>From acbc442c7d5120520dc613fcd3b591a47b172275 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 10 Jul 2026 16:11:38 -0700
Subject: [PATCH 11/23] [Github] Skip check-lldb and rename macOS self-hosted
 premerge job

check-lldb is temporarily excluded on the self-hosted macOS runners.
Also renames the job to "Build and Test macOS arm64" to reflect the
runner architecture.
---
 .github/workflows/premerge.yaml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 05e33ab96f4d6..935447368c0ab 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -300,8 +300,9 @@ jobs:
           # flang (flang-rt depends on flang), or CIR (depends on mlir), so
           # drop them here rather than in compute_projects.py, which is
           # shared with the macos-14 GitHub-hosted runner job above.
+          # check-lldb is temporarily skipped as well.
           excluded_projects="mlir|flang|flang-rt|CIR"
-          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir"
+          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir|check-lldb"
           projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E "^(${excluded_projects})$" | paste -sd ';' -)
           project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E "^(${excluded_check_targets})$" | paste -sd ' ' -)
 
@@ -315,7 +316,7 @@ jobs:
           echo "macos-check-targets=${project_check_targets}" >> $GITHUB_OUTPUT
 
   premerge-check-macos-self-hosted-runners:
-    name: Build and Test macOS
+    name: Build and Test macOS arm64
     needs: premerge-compute-macos-self-hosted
     runs-on: [self-hosted, macos, apple-runners]
     if: >-

>From dcb74daf3094de99175356586b7ffbe33261f3f5 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Fri, 10 Jul 2026 21:38:22 -0700
Subject: [PATCH 12/23] [Github] Skip check-libclc on macOS self-hosted
 premerge runners

---
 .github/workflows/premerge.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 935447368c0ab..927caf85e1a0d 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -300,9 +300,9 @@ jobs:
           # flang (flang-rt depends on flang), or CIR (depends on mlir), so
           # drop them here rather than in compute_projects.py, which is
           # shared with the macos-14 GitHub-hosted runner job above.
-          # check-lldb is temporarily skipped as well.
+          # check-lldb and check-libclc are temporarily skipped as well.
           excluded_projects="mlir|flang|flang-rt|CIR"
-          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir|check-lldb"
+          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir|check-lldb|check-libclc"
           projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E "^(${excluded_projects})$" | paste -sd ';' -)
           project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E "^(${excluded_check_targets})$" | paste -sd ' ' -)
 

>From 71d28eb9febb8062b0b38e80fc1b153b2f3481bd Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Mon, 13 Jul 2026 17:06:07 -0700
Subject: [PATCH 13/23] [Github] Fix test_llvm_mac after enabling
 lldb/compiler-rt/libunwind on macOS

35dea81d61a9 removed lldb, compiler-rt, and libunwind from EXCLUDE_MAC
but did not update the corresponding test expectations.
---
 .ci/compute_projects_test.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index e7445a49bd764..5e4e88818aa64 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -62,20 +62,20 @@ def test_llvm_mac(self):
         )
         self.assertEqual(
             env_variables["projects_to_build"],
-            "clang;clang-tools-extra;lld;llvm;mlir",
+            "clang;clang-tools-extra;lld;lldb;llvm;mlir",
         )
         self.assertEqual(
             env_variables["project_check_targets"],
-            "check-clang check-clang-tools check-lld check-llvm check-mlir",
+            "check-clang check-clang-tools check-lld check-lldb check-llvm check-mlir",
         )
-        self.assertEqual(env_variables["runtimes_to_build"], "")
+        self.assertEqual(env_variables["runtimes_to_build"], "libunwind")
         self.assertEqual(
             env_variables["runtimes_check_targets"],
             "",
         )
         self.assertEqual(
             env_variables["runtimes_check_targets_needs_reconfig"],
-            "",
+            "check-unwind",
         )
 
     def test_clang(self):

>From c59dd2c21e194cbda8efb95a2d4c4eab7f7f159f Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Mon, 13 Jul 2026 17:29:45 -0700
Subject: [PATCH 14/23] [Github] Pin Linux premerge to ubuntu-22.04 and
 simplify build/check step

Build and run all check targets in a single ninja invocation instead
of a separate build pass followed by a per-target loop.
---
 .github/workflows/premerge.yaml | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 927caf85e1a0d..07f2a18f68738 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -254,7 +254,7 @@ jobs:
     if: >-
         github.repository_owner == 'llvm' &&
         (github.event_name != 'pull_request' || github.event.action != 'closed')
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04
     permissions:
       contents: read
       pull-requests: read
@@ -355,14 +355,6 @@ jobs:
                 -DCMAKE_C_COMPILER_LAUNCHER=sccache \
                 -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
 
-          echo "::group::Build $PROJECTS"
-          ninja -C build
-          echo "::endgroup::"
-
-          for target in ${CHECK_TARGETS}; do
-            echo "::group::Running $target"
-            ninja -C build "$target"
-            echo "::endgroup::"
-          done
+          ninja -C build ${CHECK_TARGETS}
 
           sccache --show-stats

>From 2270136bfc699e856b07ebf332ce2bfb8ebd195c Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Mon, 13 Jul 2026 17:50:54 -0700
Subject: [PATCH 15/23] [Github] Remove redundant macos-14 premerge check job

The premerge-check-macos job duplicates the self-hosted macOS
premerge checks (premerge-compute-macos-self-hosted), which now
cover release branches.
---
 .github/workflows/premerge.yaml | 50 ---------------------------------
 1 file changed, 50 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 07f2a18f68738..68be28ce347c1 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -199,56 +199,6 @@ jobs:
           path: |
             comments-Windows-AMD64
 
-  premerge-check-macos:
-    name: MacOS Premerge Checks
-    runs-on: macos-14
-    if: >-
-      github.repository_owner == 'llvm' &&
-      (startswith(github.ref_name, 'release/') ||
-       startswith(github.base_ref, 'release/')) &&
-      (github.event_name != 'pull_request' || github.event.action != 'closed')
-    steps:
-      - name: Checkout LLVM
-        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-        with:
-          persist-credentials: false
-          fetch-depth: 2
-      - name: Setup ccache
-        uses: hendrikmuhs/ccache-action at 33522472633dbd32578e909b315f5ee43ba878ce # v1.2.22
-        with:
-          max-size: "2000M"
-      - name: Install Ninja
-        run: |
-          brew install ninja
-      - name: Build and Test
-        run: |
-          source <(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py)
-
-          if [[ "${projects_to_build}" == "" ]]; then
-            echo "No projects to build"
-            exit 0
-          fi
-
-          echo "Building projects: ${projects_to_build}"
-          echo "Running project checks targets: ${project_check_targets}"
-
-          # -DLLVM_DISABLE_ASSEMBLY_FILES=ON is for
-          # https://github.com/llvm/llvm-project/issues/81967
-          # Disable sharding in lit so that the LIT_XFAIL environment var works.
-          cmake -G Ninja \
-                -B build \
-                -S llvm \
-                -DLLVM_ENABLE_PROJECTS="${projects_to_build}" \
-                -DLLVM_DISABLE_ASSEMBLY_FILES=ON \
-                -DCMAKE_BUILD_TYPE=Release \
-                -DLLDB_INCLUDE_TESTS=OFF \
-                -DLLVM_ENABLE_ASSERTIONS=ON \
-                -DCMAKE_C_COMPILER_LAUNCHER=ccache \
-                -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-
-          # The libcxx tests fail, so we are skipping the runtime targets.
-          ninja -C build ${project_check_targets}
-
   premerge-compute-macos-self-hosted:
     name: Compute macOS Projects
     if: >-

>From 04ff09473d9913dbdf8a634c218c256eefcd89a7 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Mon, 13 Jul 2026 20:54:16 -0700
Subject: [PATCH 16/23] [Github] Move macOS premerge exclusions into
 compute_projects.py

The self-hosted macOS premerge job hardcoded exclusions for
mlir/flang/flang-rt/CIR and skipped check-lldb/check-libclc via a
shell grep filter. Move this logic into compute_projects.py so it is
tested and shared like the other platform exclusions.
---
 .ci/compute_projects.py         | 12 ++++++++++
 .ci/compute_projects_test.py    | 39 +++++++++++++++++++++++++++++++--
 .github/workflows/premerge.yaml | 10 ---------
 3 files changed, 49 insertions(+), 12 deletions(-)

diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index 363ff8b7e45d0..1a70cf513beaa 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -132,9 +132,12 @@
 
 EXCLUDE_MAC = {
     "bolt",
+    "CIR",  # Depends on mlir, which is excluded below.
     "cross-project-tests",
     "flang",
+    "flang-rt",
     "libc",
+    "mlir",
     "openmp",
     "polly",
     "libcxx",
@@ -142,6 +145,13 @@
     "offload",
 }
 
+# These projects are still built on the self-hosted macOS runners, but their
+# tests are temporarily skipped there.
+EXCLUDE_CHECK_TARGETS_MAC = {
+    "lldb",
+    "libclc",
+}
+
 PROJECT_CHECK_TARGETS = {
     "clang-tools-extra": "check-clang-tools",
     "compiler-rt": "check-compiler-rt",
@@ -259,6 +269,8 @@ def _compute_project_check_targets(
 ) -> Set[str]:
     check_targets = set()
     for project_to_test in projects_to_test:
+        if platform == "Darwin" and project_to_test in EXCLUDE_CHECK_TARGETS_MAC:
+            continue
         if project_to_test in PROJECT_CHECK_TARGETS:
             check_targets.add(PROJECT_CHECK_TARGETS[project_to_test])
     return check_targets
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index 5e5783227e933..fa926c476a3db 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -62,11 +62,11 @@ def test_llvm_mac(self):
         )
         self.assertEqual(
             env_variables["projects_to_build"],
-            "clang;clang-tools-extra;lld;lldb;llvm;mlir",
+            "clang;clang-tools-extra;lld;lldb;llvm",
         )
         self.assertEqual(
             env_variables["project_check_targets"],
-            "check-clang check-clang-python check-clang-tools check-lld check-lldb check-llvm check-mlir",
+            "check-clang check-clang-python check-clang-tools check-lld check-llvm",
         )
         self.assertEqual(env_variables["runtimes_to_build"], "libunwind")
         self.assertEqual(
@@ -78,6 +78,41 @@ def test_llvm_mac(self):
             "check-unwind",
         )
 
+    def test_mlir_mac(self):
+        env_variables = compute_projects.get_env_variables(
+            ["mlir/CMakeLists.txt"], "Darwin"
+        )
+        self.assertEqual(env_variables["projects_to_build"], "")
+        self.assertEqual(env_variables["project_check_targets"], "")
+
+    def test_cir_mac(self):
+        env_variables = compute_projects.get_env_variables(
+            ["clang/lib/CIR/CMakeLists.txt"], "Darwin"
+        )
+        self.assertEqual(
+            env_variables["projects_to_build"],
+            "clang;clang-tools-extra;lld;lldb;llvm",
+        )
+        self.assertEqual(
+            env_variables["project_check_targets"],
+            "check-clang check-clang-python check-clang-tools",
+        )
+        self.assertEqual(env_variables["enable_cir"], "OFF")
+
+    def test_lldb_mac(self):
+        env_variables = compute_projects.get_env_variables(
+            ["lldb/CMakeLists.txt"], "Darwin"
+        )
+        self.assertEqual(env_variables["projects_to_build"], "clang;lld;lldb;llvm")
+        self.assertEqual(env_variables["project_check_targets"], "")
+
+    def test_libclc_mac(self):
+        env_variables = compute_projects.get_env_variables(
+            ["libclc/CMakeLists.txt"], "Darwin"
+        )
+        self.assertEqual(env_variables["projects_to_build"], "clang;llvm")
+        self.assertEqual(env_variables["runtimes_check_targets"], "")
+
     def test_clang(self):
         env_variables = compute_projects.get_env_variables(
             ["clang/CMakeLists.txt"], "Linux"
diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 68be28ce347c1..9c549b8a11ab0 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -246,16 +246,6 @@ jobs:
           python3 .ci/compute_projects.py Darwin < /tmp/changed_files.txt > /tmp/env_vars.sh
           source /tmp/env_vars.sh
 
-          # The self-hosted macOS runners aren't set up to build/test mlir,
-          # flang (flang-rt depends on flang), or CIR (depends on mlir), so
-          # drop them here rather than in compute_projects.py, which is
-          # shared with the macos-14 GitHub-hosted runner job above.
-          # check-lldb and check-libclc are temporarily skipped as well.
-          excluded_projects="mlir|flang|flang-rt|CIR"
-          excluded_check_targets="check-mlir|check-flang|check-flang-rt|check-clang-cir|check-lldb|check-libclc"
-          projects_to_build=$(echo "${projects_to_build}" | tr ';' '\n' | grep -v -E "^(${excluded_projects})$" | paste -sd ';' -)
-          project_check_targets=$(echo "${project_check_targets}" | tr ' ' '\n' | grep -v -E "^(${excluded_check_targets})$" | paste -sd ' ' -)
-
           echo "Building projects: ${projects_to_build}"
           echo "Running project checks targets: ${project_check_targets}"
           echo "Building runtimes: ${runtimes_to_build}"

>From 9ace310ec2a5fbd06bd49520736ab03c6f1f405c Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 14 Jul 2026 10:18:11 -0700
Subject: [PATCH 17/23] [Github] Increase CLANG_TOOLCHAIN_PROGRAM_TIMEOUT on
 self-hosted macOS runner

The macOS self-hosted runners have been intermittently hitting the
default 60s toolchain-program timeout (e.g. nvptx-cuda-system-arch.c)
under load, causing spurious failures. Raise it to 120s for more
headroom.
---
 .github/workflows/premerge.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index 9c549b8a11ab0..b657c0a11accc 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -279,6 +279,7 @@ jobs:
           SCCACHE_REGION: us-west-2
           PROJECTS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-projects }}
           CHECK_TARGETS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-check-targets }}
+          CLANG_TOOLCHAIN_PROGRAM_TIMEOUT: 120
         run: |
           export SCCACHE_IDLE_TIMEOUT=0
           mkdir -p artifacts

>From 04680b5dddd05d852db8816642654cddc51f0bd4 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Tue, 14 Jul 2026 13:33:43 -0700
Subject: [PATCH 18/23] [Github] Always stop sccache on self-hosted macOS
 runner

Move sccache --stop-server into its own step with if: always() so
cache stats are printed and the server is shut down even if the
build/test step fails.
---
 .github/workflows/premerge.yaml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index b657c0a11accc..e0825a544f9ce 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -297,5 +297,6 @@ jobs:
                 -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
 
           ninja -C build ${CHECK_TARGETS}
-
-          sccache --show-stats
+      - name: Stop sccache
+        if: always()
+        run: sccache --stop-server

>From 6e1e4fe6bb97f26a85cf2f433d5763f2cdd2017d Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Thu, 16 Jul 2026 10:25:47 -0700
Subject: [PATCH 19/23] [CI] Exclude libunwind from self-hosted macOS runner

Add libunwind to EXCLUDE_MAC so it is not built or tested on the
self-hosted macOS runners, and update the affected test.
---
 .ci/compute_projects.py      | 1 +
 .ci/compute_projects_test.py | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index 1a70cf513beaa..42d1524d638ed 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -142,6 +142,7 @@
     "polly",
     "libcxx",
     "libcxxabi",
+    "libunwind",
     "offload",
 }
 
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index fa926c476a3db..941d07c5426ee 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -68,14 +68,14 @@ def test_llvm_mac(self):
             env_variables["project_check_targets"],
             "check-clang check-clang-python check-clang-tools check-lld check-llvm",
         )
-        self.assertEqual(env_variables["runtimes_to_build"], "libunwind")
+        self.assertEqual(env_variables["runtimes_to_build"], "")
         self.assertEqual(
             env_variables["runtimes_check_targets"],
             "",
         )
         self.assertEqual(
             env_variables["runtimes_check_targets_needs_reconfig"],
-            "check-unwind",
+            "",
         )
 
     def test_mlir_mac(self):

>From 0c306cd7df889e72a40ff24537f5c64820d152de Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Thu, 16 Jul 2026 10:44:23 -0700
Subject: [PATCH 20/23] [Github] Rename macOS premerge jobs and document their
 relationship

Rename premerge-compute-macos-self-hosted to premerge-compute-macos
and premerge-check-macos-self-hosted-runners to premerge-check-macos.
Add comments explaining why the compute step runs on a GitHub-hosted
runner and how it feeds the self-hosted build/test job.
---
 .github/workflows/premerge.yaml | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index e0825a544f9ce..e128170ee14ae 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -199,7 +199,14 @@ jobs:
           path: |
             comments-Windows-AMD64
 
-  premerge-compute-macos-self-hosted:
+  # Computes which projects/check-targets to build and test on the
+  # self-hosted macOS runners. This job intentionally runs on a
+  # GitHub-hosted runner rather than a self-hosted one, since self-hosted
+  # macOS capacity is limited and shouldn't be spent just to compute what
+  # to build. Its outputs feed premerge-check-macos below, which does the
+  # actual build/test on the self-hosted runners, so changes here directly
+  # affect what runs there.
+  premerge-compute-macos:
     name: Compute macOS Projects
     if: >-
         github.repository_owner == 'llvm' &&
@@ -255,14 +262,16 @@ jobs:
           echo "macos-projects=${projects_to_build}" >> $GITHUB_OUTPUT
           echo "macos-check-targets=${project_check_targets}" >> $GITHUB_OUTPUT
 
-  premerge-check-macos-self-hosted-runners:
+  premerge-check-macos:
     name: Build and Test macOS arm64
-    needs: premerge-compute-macos-self-hosted
+    needs: premerge-compute-macos
     runs-on: [self-hosted, macos, apple-runners]
+    # Skip the self-hosted runner entirely if there is nothing to build,
+    # rather than tying up a runner slot for a no-op run.
     if: >-
         github.repository_owner == 'llvm' &&
         (github.event_name != 'pull_request' || github.event.action != 'closed') &&
-        needs.premerge-compute-macos-self-hosted.outputs.macos-projects != ''
+        needs.premerge-compute-macos.outputs.macos-projects != ''
     steps:
       - name: Checkout LLVM
         uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -277,8 +286,8 @@ jobs:
         env:
           SCCACHE_BUCKET: sccache-bucket
           SCCACHE_REGION: us-west-2
-          PROJECTS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-projects }}
-          CHECK_TARGETS: ${{ needs.premerge-compute-macos-self-hosted.outputs.macos-check-targets }}
+          PROJECTS: ${{ needs.premerge-compute-macos.outputs.macos-projects }}
+          CHECK_TARGETS: ${{ needs.premerge-compute-macos.outputs.macos-check-targets }}
           CLANG_TOOLCHAIN_PROGRAM_TIMEOUT: 120
         run: |
           export SCCACHE_IDLE_TIMEOUT=0

>From 81f998b85b4c5f34c5585e021f3dd75473c52afd Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Thu, 16 Jul 2026 21:38:07 -0700
Subject: [PATCH 21/23] [CI] Assert all env variables in Darwin
 compute_projects tests

Per review feedback, assert every field returned by get_env_variables
in test_mlir_mac, test_cir_mac, test_lldb_mac, and test_libclc_mac,
not just the ones each test was originally focused on.
---
 .ci/compute_projects_test.py | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index 941d07c5426ee..b080ccf3b9f4d 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -84,6 +84,10 @@ def test_mlir_mac(self):
         )
         self.assertEqual(env_variables["projects_to_build"], "")
         self.assertEqual(env_variables["project_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_to_build"], "")
+        self.assertEqual(env_variables["runtimes_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
+        self.assertEqual(env_variables["enable_cir"], "OFF")
 
     def test_cir_mac(self):
         env_variables = compute_projects.get_env_variables(
@@ -97,6 +101,11 @@ def test_cir_mac(self):
             env_variables["project_check_targets"],
             "check-clang check-clang-python check-clang-tools",
         )
+        self.assertEqual(env_variables["runtimes_to_build"], "compiler-rt")
+        self.assertEqual(
+            env_variables["runtimes_check_targets"], "check-compiler-rt"
+        )
+        self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
         self.assertEqual(env_variables["enable_cir"], "OFF")
 
     def test_lldb_mac(self):
@@ -105,13 +114,19 @@ def test_lldb_mac(self):
         )
         self.assertEqual(env_variables["projects_to_build"], "clang;lld;lldb;llvm")
         self.assertEqual(env_variables["project_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_to_build"], "compiler-rt")
+        self.assertEqual(env_variables["runtimes_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
 
     def test_libclc_mac(self):
         env_variables = compute_projects.get_env_variables(
             ["libclc/CMakeLists.txt"], "Darwin"
         )
         self.assertEqual(env_variables["projects_to_build"], "clang;llvm")
+        self.assertEqual(env_variables["project_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_to_build"], "")
         self.assertEqual(env_variables["runtimes_check_targets"], "")
+        self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
 
     def test_clang(self):
         env_variables = compute_projects.get_env_variables(

>From d86bd86cbc963cd9b6dd5041eac380fa71eade3c Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Thu, 16 Jul 2026 21:38:39 -0700
Subject: [PATCH 22/23] [Github] Add timeout to macOS self-hosted Build and
 Test step

Per review feedback, this job was missing a timeout, so a hung build
could tie up the self-hosted runner indefinitely.
---
 .github/workflows/premerge.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/premerge.yaml b/.github/workflows/premerge.yaml
index e128170ee14ae..d90c8139264aa 100644
--- a/.github/workflows/premerge.yaml
+++ b/.github/workflows/premerge.yaml
@@ -283,6 +283,7 @@ jobs:
           brew install ninja cmake
           command -v sccache >/dev/null || brew install sccache
       - name: Build and Test
+        timeout-minutes: 240
         env:
           SCCACHE_BUCKET: sccache-bucket
           SCCACHE_REGION: us-west-2

>From 64d791e867877bca928ff589fde022b54ff2f287 Mon Sep 17 00:00:00 2001
From: Mishal Shah <mishal_shah at apple.com>
Date: Thu, 16 Jul 2026 21:46:02 -0700
Subject: [PATCH 23/23] [CI] Fix darker formatting in compute_projects_test.py

---
 .ci/compute_projects_test.py | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index b080ccf3b9f4d..c0c9cc100d91b 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -102,9 +102,7 @@ def test_cir_mac(self):
             "check-clang check-clang-python check-clang-tools",
         )
         self.assertEqual(env_variables["runtimes_to_build"], "compiler-rt")
-        self.assertEqual(
-            env_variables["runtimes_check_targets"], "check-compiler-rt"
-        )
+        self.assertEqual(env_variables["runtimes_check_targets"], "check-compiler-rt")
         self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
         self.assertEqual(env_variables["enable_cir"], "OFF")
 



More information about the llvm-commits mailing list