55      - ' **jit**' 
66      - ' Python/bytecodes.c' 
77      - ' Python/optimizer*.c' 
8+       - ' !Python/perf_jit_trampoline.c' 
9+       - ' !**/*.md' 
10+       - ' !**/*.ini' 
811  push :
912    paths :
1013      - ' **jit**' 
1114      - ' Python/bytecodes.c' 
1215      - ' Python/optimizer*.c' 
16+       - ' !Python/perf_jit_trampoline.c' 
17+       - ' !**/*.md' 
18+       - ' !**/*.ini' 
1319  workflow_dispatch :
1420
21+ permissions :
22+   contents : read 
23+ 
1524concurrency :
1625  group : ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 
1726  cancel-in-progress : true 
1827
1928jobs :
29+   interpreter :
30+     name : Interpreter (Debug) 
31+     runs-on : ubuntu-latest 
32+     timeout-minutes : 90 
33+     steps :
34+       - uses : actions/checkout@v4 
35+       - name : Build tier two interpreter 
36+         run : | 
37+           ./configure --enable-experimental-jit=interpreter --with-pydebug 
38+           make all --jobs 4 
39+ name : Test tier two interpreter 
40+         run : | 
41+           ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
2042jit :
2143    name : ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) 
44+     needs : interpreter 
2245    runs-on : ${{ matrix.runner }} 
23-     timeout-minutes : 75 
46+     timeout-minutes : 90 
2447    strategy :
2548      fail-fast : false 
2649      matrix :
3861          - true 
3962          - false 
4063        llvm :
41-           - 16 
64+           - 18 
4265        include :
4366          - target : i686-pc-windows-msvc/msvc 
4467            architecture : Win32 
@@ -72,14 +95,10 @@ jobs:
7295            architecture : aarch64 
7396            runner : ubuntu-latest 
7497            compiler : gcc 
75-             #  These fail because of emulation, not because of the JIT:
76-             exclude : test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv test_external_inspection 
7798          - target : aarch64-unknown-linux-gnu/clang 
7899            architecture : aarch64 
79100            runner : ubuntu-latest 
80101            compiler : clang 
81-             #  These fail because of emulation, not because of the JIT:
82-             exclude : test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv test_external_inspection 
83102    env :
84103      CC : ${{ matrix.compiler }} 
85104    steps :
@@ -91,37 +110,43 @@ jobs:
91110      - name : Native Windows 
92111        if : runner.os == 'Windows' && matrix.architecture != 'ARM64' 
93112        run : | 
113+           choco upgrade llvm -y 
94114          choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }} 
95115          ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '--pgo' }} -p ${{ matrix.architecture }} 
96-           ./PCbuild/rt.bat ${{ matrix.debug && '-d' }} -p ${{ matrix.architecture }} -q --exclude ${{ matrix.exclude }}  --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
116+           ./PCbuild/rt.bat ${{ matrix.debug && '-d' || ''  }} -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
97117
98118#  No PGO or tests (yet):
99119      - name : Emulated Windows 
100120        if : runner.os == 'Windows' && matrix.architecture == 'ARM64' 
101121        run : | 
122+           choco upgrade llvm -y 
102123          choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }} 
103124          ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} 
104125
105126name : Native macOS 
106127        if : runner.os == 'macOS' 
107128        run : | 
129+           brew update 
108130          brew install llvm@${{ matrix.llvm }} 
109131          SDKROOT="$(xcrun --show-sdk-path)" \ 
110132            ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto' }} 
111133          make all --jobs 4 
112-           ./python.exe -m test --exclude ${{ matrix.exclude }} -- multiprocess 0 --timeout 4500 --verbose2 --verbose3 
134+           ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
113135
136+ #  --with-lto has been removed temporarily as a result of an open issue in LLVM 18 (see https://github.com/llvm/llvm-project/issues/87553)
114137      - name : Native Linux 
115138        if : runner.os == 'Linux' && matrix.architecture == 'x86_64' 
116139        run : | 
117140          sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} 
118141          export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" 
119-           ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto ' }} 
142+           ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations' }} 
120143          make all --jobs 4 
121-           ./python -m test --exclude ${{ matrix.exclude }} -- multiprocess 0 --timeout 4500 --verbose2 --verbose3 
144+           ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
122145
146+ #  --with-lto has been removed temporarily as a result of an open issue in LLVM 18 (see https://github.com/llvm/llvm-project/issues/87553)
123147      - name : Emulated Linux 
124148        if : runner.os == 'Linux' && matrix.architecture != 'x86_64' 
149+         #  The --ignorefile on ./python -m test is used to exclude tests known to fail when running on an emulated Linux.
125150        run : | 
126151          sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} 
127152          export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" 
@@ -136,6 +161,25 @@ jobs:
136161          CC="${{ matrix.compiler == 'clang' && 'clang --target=$HOST' || '$HOST-gcc' }}" \ 
137162            CPP="$CC --preprocess" \ 
138163            HOSTRUNNER=qemu-${{ matrix.architecture }} \ 
139-             ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto ' }} --build=x86_64-linux-gnu --host="$HOST" --with-build-python=../build/bin/python3 --with-pkg-config=no ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=yes 
164+             ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations ' }} --build=x86_64-linux-gnu --host="$HOST" --with-build-python=../build/bin/python3 --with-pkg-config=no ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=yes 
140165          make all --jobs 4 
141-           ./python -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
166+           ./python -m test --ignorefile=Tools/jit/ignore-tests-emulated-linux.txt --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
167+ 
168+ jit-with-disabled-gil :
169+     name : Free-Threaded (Debug) 
170+     needs : interpreter 
171+     runs-on : ubuntu-latest 
172+     steps :
173+       - uses : actions/checkout@v4 
174+       - uses : actions/setup-python@v5 
175+         with :
176+           python-version : ' 3.11' 
177+       - name : Build with JIT enabled and GIL disabled 
178+         run : | 
179+           sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 18 
180+           export PATH="$(llvm-config-18 --bindir):$PATH" 
181+           ./configure --enable-experimental-jit --with-pydebug --disable-gil 
182+           make all --jobs 4 
183+ name : Run tests 
184+         run : | 
185+           ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 
0 commit comments