From 763bd546a02ef4edba160be7186f32846edda4d0 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 10:43:35 -0800 Subject: [PATCH 1/7] Clean up cherry pick --- .github/workflows/jit.yml | 172 +++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 77 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 22e1a160bca162..db9f55af56e175 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -1,7 +1,7 @@ name: JIT on: pull_request: - paths: + paths: &paths - '**jit**' - 'Python/bytecodes.c' - 'Python/optimizer*.c' @@ -9,13 +9,7 @@ on: - '!**/*.md' - '!**/*.ini' push: - paths: - - '**jit**' - - 'Python/bytecodes.c' - - 'Python/optimizer*.c' - - '!Python/perf_jit_trampoline.c' - - '!**/*.md' - - '!**/*.ini' + paths: *paths workflow_dispatch: permissions: @@ -27,12 +21,13 @@ concurrency: env: FORCE_COLOR: 1 + LLVM_VERSION: 19 jobs: interpreter: name: Interpreter (Debug) runs-on: ubuntu-24.04 - timeout-minutes: 90 + timeout-minutes: 60 steps: - uses: actions/checkout@v6 with: @@ -44,11 +39,11 @@ jobs: - name: Test tier two interpreter run: | ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - jit: + + windows: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) - needs: interpreter runs-on: ${{ matrix.runner }} - timeout-minutes: 90 + timeout-minutes: 60 strategy: fail-fast: false matrix: @@ -56,15 +51,9 @@ jobs: - i686-pc-windows-msvc/msvc - x86_64-pc-windows-msvc/msvc - aarch64-pc-windows-msvc/msvc - - x86_64-apple-darwin/clang - - aarch64-apple-darwin/clang - - x86_64-unknown-linux-gnu/gcc - - aarch64-unknown-linux-gnu/gcc debug: - true - false - llvm: - - 19 include: - target: i686-pc-windows-msvc/msvc architecture: Win32 @@ -75,18 +64,6 @@ jobs: - target: aarch64-pc-windows-msvc/msvc architecture: ARM64 runner: windows-11-arm - - target: x86_64-apple-darwin/clang - architecture: x86_64 - runner: macos-15-intel - - target: aarch64-apple-darwin/clang - architecture: aarch64 - runner: macos-14 - - target: x86_64-unknown-linux-gnu/gcc - architecture: x86_64 - runner: ubuntu-24.04 - - target: aarch64-unknown-linux-gnu/gcc - architecture: aarch64 - runner: ubuntu-24.04-arm steps: - uses: actions/checkout@v6 with: @@ -94,19 +71,45 @@ jobs: - uses: actions/setup-python@v6 with: python-version: '3.11' - # PCbuild downloads LLVM automatically: - - name: Windows - if: runner.os == 'Windows' + - name: Build run: | ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} + - name: Test + run: | ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - name: macOS - if: runner.os == 'macOS' + macos: + name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + runs-on: ${{ matrix.runner }} + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + target: + - x86_64-apple-darwin/clang + - aarch64-apple-darwin/clang + debug: + - true + - false + include: + - target: x86_64-apple-darwin/clang + runner: macos-15-intel + - target: aarch64-apple-darwin/clang + runner: macos-14 + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/setup-python@v6 + with: + python-version: '3.11' + - name: Install LLVM run: | brew update - brew install llvm@${{ matrix.llvm }} + brew install llvm@${{ env.LLVM_VERSION }} + - name: Build + run: | export SDKROOT="$(xcrun --show-sdk-path)" # Set MACOSX_DEPLOYMENT_TARGET and -Werror=unguarded-availability to # make sure we don't break downstream distributors (like uv): @@ -114,54 +117,61 @@ jobs: export MACOSX_DEPLOYMENT_TARGET=10.15 ./configure --enable-experimental-jit --enable-universalsdk --with-universal-archs=universal2 ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 + - name: Test + run: | ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - name: Linux - if: runner.os == 'Linux' + linux: + name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + runs-on: ${{ matrix.runner }} + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + target: + - x86_64-unknown-linux-gnu/gcc + - aarch64-unknown-linux-gnu/gcc + debug: + - true + - false + include: + - target: x86_64-unknown-linux-gnu/gcc + runner: ubuntu-24.04 + - target: aarch64-unknown-linux-gnu/gcc + runner: ubuntu-24.04-arm + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/setup-python@v6 + with: + python-version: '3.11' + - name: Build run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM_VERSION }} + export PATH="$(llvm-config-${{ env.LLVM_VERSION }} --bindir):$PATH" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - # XXX: GH-133171 - # jit-with-disabled-gil: - # name: Free-Threaded (Debug) - # needs: interpreter - # runs-on: ubuntu-24.04 - # timeout-minutes: 90 - # strategy: - # fail-fast: false - # matrix: - # llvm: - # - 19 - # steps: - # - uses: actions/checkout@v6 - # with: - # persist-credentials: false - # - uses: actions/setup-python@v6 - # with: - # python-version: '3.11' - # - name: Build with JIT enabled and GIL disabled - # run: | - # sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - # export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - # ./configure --enable-experimental-jit --with-pydebug --disable-gil - # make all --jobs 4 - # - name: Run tests - # run: | - # ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - tail-call-jit: - name: JIT with tail calling interpreter - needs: interpreter + linux-extras: + name: ${{ matrix.name }} runs-on: ubuntu-24.04 - timeout-minutes: 90 + timeout-minutes: 60 strategy: fail-fast: false matrix: - llvm: - - 19 + include: + - name: Free-Threaded (Debug) + configure_flags: --enable-experimental-jit --with-pydebug --disable-gil + continue_on_error: true + - name: JIT without optimizations (Debug) + configure_flags: --enable-experimental-jit --with-pydebug + test_env: "PYTHON_UOPS_OPTIMIZE=0" + - name: JIT with tail calling interpreter + configure_flags: --enable-experimental-jit --with-tail-call-interp --with-pydebug + use_clang: true + run_tests: false steps: - uses: actions/checkout@v6 with: @@ -169,9 +179,17 @@ jobs: - uses: actions/setup-python@v6 with: python-version: '3.11' - - name: Build with JIT and tailcall + - name: Build run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - CC=clang-${{ matrix.llvm }} ./configure --enable-experimental-jit --with-tail-call-interp --with-pydebug + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM_VERSION }} + export PATH="$(llvm-config-${{ env.LLVM_VERSION }} --bindir):$PATH" + if [ "${{ matrix.use_clang }}" = "true" ]; then + export CC=clang-${{ env.LLVM_VERSION }} + fi + ./configure ${{ matrix.configure_flags }} make all --jobs 4 + - name: Test + if: matrix.run_tests != false + run: | + ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 + continue-on-error: ${{ matrix.continue_on_error }} \ No newline at end of file From 05cb5070aaa88685e87888679e0d2db8ad22ac3c Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 11:29:04 -0800 Subject: [PATCH 2/7] Add new line --- .github/workflows/jit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index db9f55af56e175..cef44af68ee326 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -192,4 +192,4 @@ jobs: if: matrix.run_tests != false run: | ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - continue-on-error: ${{ matrix.continue_on_error }} \ No newline at end of file + continue-on-error: ${{ matrix.continue_on_error }} From 7bc83cda7d3b9fc86b516098cf020d5649c19f5a Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 11:32:10 -0800 Subject: [PATCH 3/7] Remove JIT + free threaded --- .devcontainer/devcontainer.json | 2 +- .github/workflows/jit.yml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fb11c82bb96d9c..b780b1a4b962d6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "ghcr.io/python/devcontainer:latest", + "image": "cpython-devcontainer-local", "onCreateCommand": [ // Install common tooling. "dnf", diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index cef44af68ee326..46c30fc43d0efd 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -162,9 +162,6 @@ jobs: fail-fast: false matrix: include: - - name: Free-Threaded (Debug) - configure_flags: --enable-experimental-jit --with-pydebug --disable-gil - continue_on_error: true - name: JIT without optimizations (Debug) configure_flags: --enable-experimental-jit --with-pydebug test_env: "PYTHON_UOPS_OPTIMIZE=0" From 324e76285142b2a12bfb6f6c12305b02bbef3593 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 11:34:49 -0800 Subject: [PATCH 4/7] Remove continue on error --- .github/workflows/jit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 46c30fc43d0efd..a2f92c8844db44 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -162,6 +162,7 @@ jobs: fail-fast: false matrix: include: + - name: JIT without optimizations (Debug) configure_flags: --enable-experimental-jit --with-pydebug test_env: "PYTHON_UOPS_OPTIMIZE=0" @@ -188,5 +189,4 @@ jobs: - name: Test if: matrix.run_tests != false run: | - ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - continue-on-error: ${{ matrix.continue_on_error }} + ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 \ No newline at end of file From f0339ff30d3892ffddd188580b83dc1bd9c35585 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 11:36:27 -0800 Subject: [PATCH 5/7] Revert accidental changes to devcontainer from other branch; --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b780b1a4b962d6..fb11c82bb96d9c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "cpython-devcontainer-local", + "image": "ghcr.io/python/devcontainer:latest", "onCreateCommand": [ // Install common tooling. "dnf", From 01a14b3f9d8cfb3710b55354b24f69bbc679d6e5 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Feb 2026 11:37:10 -0800 Subject: [PATCH 6/7] Add newline...again --- .github/workflows/jit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index a2f92c8844db44..04fca65480d69a 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -189,4 +189,4 @@ jobs: - name: Test if: matrix.run_tests != false run: | - ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 \ No newline at end of file + ${{ matrix.test_env }} ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 From 69fe331bfa7d1983526b58efc7a4cd9c4281c778 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Feb 2026 07:54:19 -0800 Subject: [PATCH 7/7] Apply suggestions from code review Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- .github/workflows/jit.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 04fca65480d69a..1cdd746e0af5cb 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -42,6 +42,7 @@ jobs: windows: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + runs-on: ${{ matrix.runner }} timeout-minutes: 60 strategy: @@ -81,6 +82,7 @@ jobs: macos: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + runs-on: ${{ matrix.runner }} timeout-minutes: 60 strategy: @@ -123,6 +125,7 @@ jobs: linux: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + runs-on: ${{ matrix.runner }} timeout-minutes: 60 strategy: @@ -152,10 +155,13 @@ jobs: export PATH="$(llvm-config-${{ env.LLVM_VERSION }} --bindir):$PATH" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 + - name: Test + run: | ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 linux-extras: name: ${{ matrix.name }} + runs-on: ubuntu-24.04 timeout-minutes: 60 strategy: