https://github.com/python/cpython/commit/424438b11ec90110054f720bfa6ea67d644cc2ec
commit: 424438b11ec90110054f720bfa6ea67d644cc2ec
branch: main
author: Brandt Bucher <[email protected]>
committer: brandtbucher <[email protected]>
date: 2024-05-01T21:35:49Z
summary:

GH-113464: Display a warning when building the JIT (GH-118481)

files:
M Tools/jit/_llvm.py
M Tools/jit/_schema.py
M Tools/jit/_stencils.py
M Tools/jit/_targets.py
M Tools/jit/_writer.py
M Tools/jit/build.py

diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py
index 74a048ccbfcc58..45bd69ff861b56 100644
--- a/Tools/jit/_llvm.py
+++ b/Tools/jit/_llvm.py
@@ -1,4 +1,5 @@
 """Utilities for invoking LLVM tools."""
+
 import asyncio
 import functools
 import os
diff --git a/Tools/jit/_schema.py b/Tools/jit/_schema.py
index 6aef887e12475b..228fc389584dd7 100644
--- a/Tools/jit/_schema.py
+++ b/Tools/jit/_schema.py
@@ -1,4 +1,5 @@
 """Schema for the JSON produced by llvm-readobj --elf-output-style=JSON."""
+
 import typing
 
 HoleKind: typing.TypeAlias = typing.Literal[
diff --git a/Tools/jit/_stencils.py b/Tools/jit/_stencils.py
index f8ecffcf3ddda2..9feceb45388d05 100644
--- a/Tools/jit/_stencils.py
+++ b/Tools/jit/_stencils.py
@@ -1,4 +1,5 @@
 """Core data structures for compiled code templates."""
+
 import dataclasses
 import enum
 import sys
@@ -29,7 +30,7 @@ class HoleValue(enum.Enum):
     OPARG = enum.auto()
     # The current uop's operand on 64-bit platforms (exposed as _JIT_OPERAND):
     OPERAND = enum.auto()
-    # The current uop's operand on 32-bit platforms (exposed as 
_JIT_OPERAND_HI and _JIT_OPERAND_LO):
+    # The current uop's operand on 32-bit platforms (exposed as 
_JIT_OPERAND_HI/LO):
     OPERAND_HI = enum.auto()
     OPERAND_LO = enum.auto()
     # The current uop's target (exposed as _JIT_TARGET):
@@ -203,9 +204,8 @@ def process_relocations(self, *, alignment: int = 1) -> 
None:
         """Fix up all GOT and internal relocations for this stencil group."""
         for hole in self.code.holes.copy():
             if (
-                hole.kind in {
-                    "R_AARCH64_CALL26", "R_AARCH64_JUMP26", 
"ARM64_RELOC_BRANCH26"
-                }
+                hole.kind
+                in {"R_AARCH64_CALL26", "R_AARCH64_JUMP26", 
"ARM64_RELOC_BRANCH26"}
                 and hole.value is HoleValue.ZERO
             ):
                 self.code.pad(alignment)
diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py
index 274d17bcf38deb..23bb18947f80ea 100644
--- a/Tools/jit/_targets.py
+++ b/Tools/jit/_targets.py
@@ -1,4 +1,5 @@
 """Target-specific code generation, parsing, and processing."""
+
 import asyncio
 import dataclasses
 import hashlib
@@ -40,8 +41,8 @@ class _Target(typing.Generic[_S, _R]):
     args: typing.Sequence[str] = ()
     ghccc: bool = False
     prefix: str = ""
+    stable: bool = False
     debug: bool = False
-    force: bool = False
     verbose: bool = False
 
     def _compute_digest(self, out: pathlib.Path) -> str:
@@ -186,12 +187,19 @@ async def _build_stencils(self) -> dict[str, 
_stencils.StencilGroup]:
                     tasks.append(group.create_task(coro, name=opname))
         return {task.get_name(): task.result() for task in tasks}
 
-    def build(self, out: pathlib.Path, *, comment: str = "") -> None:
+    def build(
+        self, out: pathlib.Path, *, comment: str = "", force: bool = False
+    ) -> None:
         """Build jit_stencils.h in the given directory."""
+        if not self.stable:
+            warning = f"JIT support for {self.triple} is still experimental!"
+            request = "Please report any issues you 
encounter.".center(len(warning))
+            outline = "=" * len(warning)
+            print("\n".join(["", outline, warning, request, outline, ""]))
         digest = f"// {self._compute_digest(out)}\n"
         jit_stencils = out / "jit_stencils.h"
         if (
-            not self.force
+            not force
             and jit_stencils.exists()
             and jit_stencils.read_text().startswith(digest)
         ):
@@ -450,9 +458,7 @@ def _handle_relocation(
             } | {
                 "Offset": offset,
                 "Symbol": {"Name": s},
-                "Type": {
-                    "Name": "X86_64_RELOC_BRANCH" | "X86_64_RELOC_SIGNED" as 
kind
-                },
+                "Type": {"Name": "X86_64_RELOC_BRANCH" | "X86_64_RELOC_SIGNED" 
as kind},
             }:
                 offset += base
                 s = s.removeprefix(self.prefix)
@@ -481,23 +487,26 @@ def _handle_relocation(
 def get_target(host: str) -> _COFF | _ELF | _MachO:
     """Build a _Target for the given host "triple" and options."""
     # ghccc currently crashes Clang when combined with musttail on aarch64. :(
+    target: _COFF | _ELF | _MachO
     if re.fullmatch(r"aarch64-apple-darwin.*", host):
-        return _MachO(host, alignment=8, prefix="_")
-    if re.fullmatch(r"aarch64-pc-windows-msvc", host):
+        target = _MachO(host, alignment=8, prefix="_")
+    elif re.fullmatch(r"aarch64-pc-windows-msvc", host):
         args = ["-fms-runtime-lib=dll"]
-        return _COFF(host, alignment=8, args=args)
-    if re.fullmatch(r"aarch64-.*-linux-gnu", host):
+        target = _COFF(host, alignment=8, args=args)
+    elif re.fullmatch(r"aarch64-.*-linux-gnu", host):
         args = ["-fpic"]
-        return _ELF(host, alignment=8, args=args)
-    if re.fullmatch(r"i686-pc-windows-msvc", host):
+        target = _ELF(host, alignment=8, args=args)
+    elif re.fullmatch(r"i686-pc-windows-msvc", host):
         args = ["-DPy_NO_ENABLE_SHARED"]
-        return _COFF(host, args=args, ghccc=True, prefix="_")
-    if re.fullmatch(r"x86_64-apple-darwin.*", host):
-        return _MachO(host, ghccc=True, prefix="_")
-    if re.fullmatch(r"x86_64-pc-windows-msvc", host):
+        target = _COFF(host, args=args, ghccc=True, prefix="_")
+    elif re.fullmatch(r"x86_64-apple-darwin.*", host):
+        target = _MachO(host, ghccc=True, prefix="_")
+    elif re.fullmatch(r"x86_64-pc-windows-msvc", host):
         args = ["-fms-runtime-lib=dll"]
-        return _COFF(host, args=args, ghccc=True)
-    if re.fullmatch(r"x86_64-.*-linux-gnu", host):
+        target = _COFF(host, args=args, ghccc=True)
+    elif re.fullmatch(r"x86_64-.*-linux-gnu", host):
         args = ["-fpic"]
-        return _ELF(host, args=args, ghccc=True)
-    raise ValueError(host)
+        target = _ELF(host, args=args, ghccc=True)
+    else:
+        raise ValueError(host)
+    return target
diff --git a/Tools/jit/_writer.py b/Tools/jit/_writer.py
index 6b36d8a9c66a3f..ccd67850c37787 100644
--- a/Tools/jit/_writer.py
+++ b/Tools/jit/_writer.py
@@ -1,4 +1,5 @@
 """Utilities for writing StencilGroups out to a C header file."""
+
 import typing
 
 import _schema
diff --git a/Tools/jit/build.py b/Tools/jit/build.py
index 4d4ace14ebf26c..4a23c6f0afa74a 100644
--- a/Tools/jit/build.py
+++ b/Tools/jit/build.py
@@ -1,4 +1,5 @@
 """Build an experimental just-in-time compiler for CPython."""
+
 import argparse
 import pathlib
 import shlex
@@ -23,6 +24,5 @@
     )
     args = parser.parse_args()
     args.target.debug = args.debug
-    args.target.force = args.force
     args.target.verbose = args.verbose
-    args.target.build(pathlib.Path.cwd(), comment=comment)
+    args.target.build(pathlib.Path.cwd(), comment=comment, force=args.force)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to