Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 98 additions & 77 deletions .github/workflows/jit.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
name: JIT
on:
pull_request:
paths:
paths: &paths
- '**jit**'
- 'Python/bytecodes.c'
- 'Python/optimizer*.c'
- '!Python/perf_jit_trampoline.c'
- '!**/*.md'
- '!**/*.ini'
push:
paths:
- '**jit**'
- 'Python/bytecodes.c'
- 'Python/optimizer*.c'
- '!Python/perf_jit_trampoline.c'
- '!**/*.md'
- '!**/*.ini'
paths: *paths
workflow_dispatch:

permissions:
Expand All @@ -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:
Expand All @@ -44,27 +39,22 @@ 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:
target:
- 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
Expand All @@ -75,103 +65,134 @@ 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:
persist-credentials: false
- 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):
export CFLAGS_JIT='-Werror=unguarded-availability'
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
- name: Test
run: |
./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: 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:
persist-credentials: false
- 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
Loading