[clang] [XCore] Migrate BuiltinsXCore.def to TableGen (PR #196688)
Shuqi Liang via cfe-commits
cfe-commits at lists.llvm.org
Fri May 8 22:15:40 PDT 2026
https://github.com/Cheskaqiqi updated https://github.com/llvm/llvm-project/pull/196688
>From 4da965579c390b421105b164b4a358355dcc3852 Mon Sep 17 00:00:00 2001
From: Shuqi Liang <Shuqi.Liang at ibm.com>
Date: Sat, 9 May 2026 00:17:21 -0400
Subject: [PATCH 1/3] [XCore] Migrate BuiltinsXCore.def to TableGen
---
clang/include/clang/Basic/BuiltinsXCore.def | 21 --
clang/include/clang/Basic/BuiltinsXCore.td | 20 ++
clang/include/clang/Basic/CMakeLists.txt | 4 +
clang/include/clang/Basic/TargetBuiltins.h | 17 +-
clang/include/clang/Basic/convert_xcore.py | 242 ++++++++++++++++++++
clang/include/module.modulemap | 1 -
clang/lib/Basic/Targets/XCore.cpp | 22 +-
7 files changed, 286 insertions(+), 41 deletions(-)
delete mode 100644 clang/include/clang/Basic/BuiltinsXCore.def
create mode 100644 clang/include/clang/Basic/BuiltinsXCore.td
create mode 100644 clang/include/clang/Basic/convert_xcore.py
diff --git a/clang/include/clang/Basic/BuiltinsXCore.def b/clang/include/clang/Basic/BuiltinsXCore.def
deleted file mode 100644
index c99b7ced13511..0000000000000
--- a/clang/include/clang/Basic/BuiltinsXCore.def
+++ /dev/null
@@ -1,21 +0,0 @@
-//===--- BuiltinsXCore.def - XCore Builtin function database ----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the XCore-specific builtin function database. Users of
-// this file must define the BUILTIN macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-// The format of this database matches clang/Basic/Builtins.def.
-
-BUILTIN(__builtin_bitrev, "UiUi", "nc")
-BUILTIN(__builtin_getid, "Si", "nc")
-BUILTIN(__builtin_getps, "UiUi", "n")
-BUILTIN(__builtin_setps, "vUiUi", "n")
-
-#undef BUILTIN
diff --git a/clang/include/clang/Basic/BuiltinsXCore.td b/clang/include/clang/Basic/BuiltinsXCore.td
new file mode 100644
index 0000000000000..140c28285d1a1
--- /dev/null
+++ b/clang/include/clang/Basic/BuiltinsXCore.td
@@ -0,0 +1,20 @@
+//===--- BuiltinsXCore.td - XCore Builtin function database ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+include "clang/Basic/BuiltinsBase.td"
+
+class XCoreBuiltin<string prototype, list<Attribute> Attr = []> : TargetBuiltin {
+ let Spellings = [NAME];
+ let Prototype = prototype;
+ let Attributes = Attr;
+}
+
+def __builtin_bitrev : XCoreBuiltin<"unsigned int(unsigned int)", [NoThrow, Const]>;
+def __builtin_getid : XCoreBuiltin<"signed int()", [NoThrow, Const]>;
+def __builtin_getps : XCoreBuiltin<"unsigned int(unsigned int)", [NoThrow]>;
+def __builtin_setps : XCoreBuiltin<"void(unsigned int, unsigned int)", [NoThrow]>;
diff --git a/clang/include/clang/Basic/CMakeLists.txt b/clang/include/clang/Basic/CMakeLists.txt
index 20172622ca424..07be7e29fcd0f 100644
--- a/clang/include/clang/Basic/CMakeLists.txt
+++ b/clang/include/clang/Basic/CMakeLists.txt
@@ -138,6 +138,10 @@ clang_tablegen(BuiltinsSystemZ.inc -gen-clang-builtins
SOURCE BuiltinsSystemZ.td
TARGET ClangBuiltinsSystemZ)
+clang_tablegen(BuiltinsXCore.inc -gen-clang-builtins
+ SOURCE BuiltinsXCore.td
+ TARGET ClangBuiltinsXCore)
+
clang_tablegen(BuiltinsX86.inc -gen-clang-builtins
SOURCE BuiltinsX86.td
TARGET ClangBuiltinsX86)
diff --git a/clang/include/clang/Basic/TargetBuiltins.h b/clang/include/clang/Basic/TargetBuiltins.h
index ae4bcdb9eeb64..e7d2fe32ce7cc 100644
--- a/clang/include/clang/Basic/TargetBuiltins.h
+++ b/clang/include/clang/Basic/TargetBuiltins.h
@@ -442,16 +442,17 @@ namespace clang {
};
}
- /// XCore builtins
+ /// XCore builtins
namespace XCore {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
-#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
-#include "clang/Basic/BuiltinsXCore.def"
- LastTSBuiltin
- };
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+#define GET_BUILTIN_ENUMERATORS
+#include "clang/Basic/BuiltinsXCore.inc"
+#undef GET_BUILTIN_ENUMERATORS
+ LastTSBuiltin
+ };
}
-
+
/// SystemZ builtins
namespace SystemZ {
enum {
diff --git a/clang/include/clang/Basic/convert_xcore.py b/clang/include/clang/Basic/convert_xcore.py
new file mode 100644
index 0000000000000..8b18a0ae6df8c
--- /dev/null
+++ b/clang/include/clang/Basic/convert_xcore.py
@@ -0,0 +1,242 @@
+#!/usr/bin/env python3
+
+import re
+import sys
+from typing import List, Tuple, Optional
+
+
+class XCoreConverter:
+ def __init__(self):
+ self.base_types = {
+ 'v': 'void',
+ 'b': 'bool',
+ 'c': 'char',
+ 's': 'short',
+ 'i': 'int',
+ 'h': '__fp16',
+ 'x': '_Float16',
+ 'y': '__bf16',
+ 'f': 'float',
+ 'd': 'double',
+ 'z': 'size_t',
+ 'w': 'wchar_t',
+ 'F': 'CFString',
+ 'G': 'id',
+ 'H': 'SEL',
+ 'M': 'struct objc_super',
+ 'a': '__builtin_va_list',
+ 'A': '__builtin_va_list&',
+ 'Y': 'ptrdiff_t',
+ 'P': 'FILE*',
+ 'J': 'jmp_buf',
+ 'p': 'pid_t',
+ }
+
+ self.attributes = {
+ 'n': 'NoThrow',
+ 'r': 'NoReturn',
+ 'U': 'Pure',
+ 'c': 'Const',
+ 't': 'CustomTypeChecking',
+ 'T': 'TypeGeneric',
+ 'F': 'LibBuiltin',
+ 'f': 'LibFunction',
+ 'h': 'RequiresHeader',
+ 'i': 'RuntimeLibFunction',
+ 'e': 'ConstWithoutErrnoAndExceptions',
+ 'g': 'ConstWithoutExceptions',
+ 'j': 'ReturnsTwice',
+ 'u': 'NoSideEffects',
+ 'z': 'CXXNamespaceStd',
+ 'E': 'ConstantEvaluated',
+ 'G': 'CXXConsteval',
+ }
+
+
+ def parse_builtin_line(self, line: str) -> Optional[Tuple[str, str, str]]:
+ # XCore uses BUILTIN instead of TARGET_BUILTIN
+ pattern = r'BUILTIN\(([^,]+),\s*"([^"]*)",\s*"([^"]*)"\)'
+ match = re.match(pattern, line.strip())
+ if match:
+ return match.group(1), match.group(2), match.group(3)
+ return None
+
+
+ def parse_type_encoding(self, encoding: str) -> Tuple[str, List[str]]:
+ if not encoding:
+ return "void", []
+
+ i = 0
+ return_type = self._parse_single_type(encoding, i)
+ i = return_type[1]
+
+ params = []
+ while i < len(encoding):
+ if encoding[i] == '.':
+ params.append("...")
+ break
+ param_type = self._parse_single_type(encoding, i)
+ params.append(param_type[0])
+ i = param_type[1]
+
+ return return_type[0], params
+
+
+ def _parse_single_type(self, encoding: str, start_pos: int) -> Tuple[str, int]:
+ i = start_pos
+ if i >= len(encoding):
+ return "void", i
+
+ prefixes = []
+ while i < len(encoding):
+ if encoding[i:i+2] == 'LL':
+ prefixes.append('long long')
+ i += 2
+ elif encoding[i] == 'L':
+ prefixes.append('long')
+ i += 1
+ elif encoding[i] == 'U':
+ prefixes.append('unsigned')
+ i += 1
+ elif encoding[i] == 'S':
+ prefixes.append('signed')
+ i += 1
+ elif encoding[i] in 'ZWNOI':
+ i += 1
+ else:
+ break
+
+ if i >= len(encoding):
+ return "void", i
+
+ base_type = self.base_types.get(encoding[i], f"UnknownType_{encoding[i]}")
+ i += 1
+
+ cv = []
+ ptrs = []
+ while i < len(encoding):
+ ch = encoding[i]
+ if ch == '*':
+ ptrs.append('*')
+ i += 1
+ elif ch == '&':
+ ptrs.append('&')
+ i += 1
+ elif ch == 'C':
+ cv.append('const')
+ i += 1
+ elif ch == 'D':
+ cv.append('volatile')
+ i += 1
+ elif ch == 'R':
+ cv.append('restrict')
+ i += 1
+ else:
+ break
+
+ prefix_str = (" ".join(prefixes) + " ") if prefixes else ""
+ cv_str = (" " + " ".join(cv)) if cv else ""
+ ptr_str = "".join((" *" if p == "*" else " &") for p in ptrs)
+ return f"{prefix_str}{base_type}{cv_str}{ptr_str}".strip(), i
+
+
+ def decode_attributes(self, attr_str: str) -> List[str]:
+ attrs = []
+ for char in attr_str:
+ if char in self.attributes:
+ attrs.append(self.attributes[char])
+ return attrs
+
+
+ def convert_file(self, input_file: str, output_file: str = None):
+ try:
+ with open(input_file, 'r') as f:
+ lines = f.readlines()
+ except FileNotFoundError:
+ print(f"Error: File not found {input_file}")
+ return
+
+ builtins = []
+ for line in lines:
+ line = line.strip()
+ if line.startswith('BUILTIN'):
+ parsed = self.parse_builtin_line(line)
+ if parsed:
+ builtins.append(parsed)
+
+ # Generate output
+ output_lines = []
+
+ # Header
+ output_lines.append("//===--- BuiltinsXCore.td - XCore Builtin function database ----*- C++ -*-===//")
+ output_lines.append("//")
+ output_lines.append("// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.")
+ output_lines.append("// See https://llvm.org/LICENSE.txt for license information.")
+ output_lines.append("// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception")
+ output_lines.append("//")
+ output_lines.append("//===----------------------------------------------------------------------===//")
+ output_lines.append("")
+ output_lines.append('include "clang/Basic/BuiltinsBase.td"')
+ output_lines.append("")
+
+ # Base class
+ output_lines.append("class XCoreBuiltin<string prototype, list<Attribute> Attr = []> : TargetBuiltin {")
+ output_lines.append(" let Spellings = [NAME];")
+ output_lines.append(" let Prototype = prototype;")
+ output_lines.append(" let Attributes = Attr;")
+ output_lines.append("}")
+ output_lines.append("")
+
+ # Builtins
+ for name, proto_encoding, attr_encoding in builtins:
+ try:
+ return_type, param_types = self.parse_type_encoding(proto_encoding)
+ attributes = self.decode_attributes(attr_encoding)
+
+ # Build prototype
+ if not param_types:
+ prototype = f"{return_type}()"
+ else:
+ prototype = f"{return_type}({', '.join(param_types)})"
+
+ # Build definition
+ if attributes:
+ attr_str = f", [{', '.join(attributes)}]"
+ else:
+ attr_str = ""
+
+ output_lines.append(f'def {name} : XCoreBuiltin<"{prototype}"{attr_str}>;')
+
+ except Exception as e:
+ output_lines.append(f"// ERROR converting {name}: {e}")
+
+ output_content = '\n'.join(output_lines) + '\n'
+
+ if output_file:
+ with open(output_file, 'w') as f:
+ f.write(output_content)
+ print(f"Conversion completed!")
+ print(f"Output file: {output_file}")
+ print(f"Successfully converted: {len(builtins)} functions")
+ else:
+ print(output_content)
+
+
+def main():
+ converter = XCoreConverter()
+
+ if len(sys.argv) > 1:
+ input_file = sys.argv[1]
+ output_file = sys.argv[2] if len(sys.argv) > 2 else 'BuiltinsXCore.td'
+ converter.convert_file(input_file, output_file)
+ else:
+ print("XCore Builtin Function Converter")
+ print("Usage:")
+ print(" python convert_xcore.py input.def [output.td]")
+ print("")
+ print("Example:")
+ print(" python convert_xcore.py BuiltinsXCore.def BuiltinsXCore.td")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/clang/include/module.modulemap b/clang/include/module.modulemap
index 62a3ba104b0df..3f6e63c0e41dc 100644
--- a/clang/include/module.modulemap
+++ b/clang/include/module.modulemap
@@ -51,7 +51,6 @@ module Clang_Basic {
textual header "clang/Basic/BuiltinsVE.def"
textual header "clang/Basic/BuiltinsVEVL.gen.def"
textual header "clang/Basic/BuiltinsWebAssembly.def"
- textual header "clang/Basic/BuiltinsXCore.def"
textual header "clang/Basic/CFProtectionOptions.def"
textual header "clang/Basic/CodeGenOptions.def"
textual header "clang/Basic/DebugOptions.def"
diff --git a/clang/lib/Basic/Targets/XCore.cpp b/clang/lib/Basic/Targets/XCore.cpp
index c725703ede5b0..9a4f8f125f29f 100644
--- a/clang/lib/Basic/Targets/XCore.cpp
+++ b/clang/lib/Basic/Targets/XCore.cpp
@@ -21,17 +21,17 @@ using namespace clang::targets;
static constexpr int NumBuiltins =
XCore::LastTSBuiltin - Builtin::FirstTSBuiltin;
-static constexpr llvm::StringTable BuiltinStrings =
- CLANG_BUILTIN_STR_TABLE_START
-#define BUILTIN CLANG_BUILTIN_STR_TABLE
-#include "clang/Basic/BuiltinsXCore.def"
- ;
-
-static constexpr auto BuiltinInfos = Builtin::MakeInfos<NumBuiltins>({
-#define BUILTIN CLANG_BUILTIN_ENTRY
-#define LIBBUILTIN CLANG_LIBBUILTIN_ENTRY
-#include "clang/Basic/BuiltinsXCore.def"
-});
+#define GET_BUILTIN_STR_TABLE
+#include "clang/Basic/BuiltinsXCore.inc"
+#undef GET_BUILTIN_STR_TABLE
+
+static constexpr Builtin::Info BuiltinInfos[] = {
+#define GET_BUILTIN_INFOS
+#include "clang/Basic/BuiltinsXCore.inc"
+#undef GET_BUILTIN_INFOS
+};
+
+static_assert(std::size(BuiltinInfos) == NumBuiltins);
void XCoreTargetInfo::getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
>From 7e5e690cb100f9bc89b9e0fc8e377598eb117edd Mon Sep 17 00:00:00 2001
From: Shuqi Liang <Shuqi.Liang at ibm.com>
Date: Sat, 9 May 2026 00:51:57 -0400
Subject: [PATCH 2/3] Fix clang-format issues
---
clang/include/clang/Basic/TargetBuiltins.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/include/clang/Basic/TargetBuiltins.h b/clang/include/clang/Basic/TargetBuiltins.h
index e7d2fe32ce7cc..18275d18293eb 100644
--- a/clang/include/clang/Basic/TargetBuiltins.h
+++ b/clang/include/clang/Basic/TargetBuiltins.h
@@ -442,7 +442,7 @@ namespace clang {
};
}
- /// XCore builtins
+ /// XCore builtins
namespace XCore {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -452,7 +452,7 @@ namespace clang {
LastTSBuiltin
};
}
-
+
/// SystemZ builtins
namespace SystemZ {
enum {
>From 3a64f3ff3fff8501c00970bbe10fb1b8759709f9 Mon Sep 17 00:00:00 2001
From: Shuqi Liang <Shuqi.Liang at ibm.com>
Date: Sat, 9 May 2026 01:00:35 -0400
Subject: [PATCH 3/3] Fix Python formatting issues
---
clang/include/clang/Basic/convert_xcore.py | 167 +++++++++++----------
1 file changed, 88 insertions(+), 79 deletions(-)
diff --git a/clang/include/clang/Basic/convert_xcore.py b/clang/include/clang/Basic/convert_xcore.py
index 8b18a0ae6df8c..8758461c96a70 100644
--- a/clang/include/clang/Basic/convert_xcore.py
+++ b/clang/include/clang/Basic/convert_xcore.py
@@ -8,51 +8,50 @@
class XCoreConverter:
def __init__(self):
self.base_types = {
- 'v': 'void',
- 'b': 'bool',
- 'c': 'char',
- 's': 'short',
- 'i': 'int',
- 'h': '__fp16',
- 'x': '_Float16',
- 'y': '__bf16',
- 'f': 'float',
- 'd': 'double',
- 'z': 'size_t',
- 'w': 'wchar_t',
- 'F': 'CFString',
- 'G': 'id',
- 'H': 'SEL',
- 'M': 'struct objc_super',
- 'a': '__builtin_va_list',
- 'A': '__builtin_va_list&',
- 'Y': 'ptrdiff_t',
- 'P': 'FILE*',
- 'J': 'jmp_buf',
- 'p': 'pid_t',
+ "v": "void",
+ "b": "bool",
+ "c": "char",
+ "s": "short",
+ "i": "int",
+ "h": "__fp16",
+ "x": "_Float16",
+ "y": "__bf16",
+ "f": "float",
+ "d": "double",
+ "z": "size_t",
+ "w": "wchar_t",
+ "F": "CFString",
+ "G": "id",
+ "H": "SEL",
+ "M": "struct objc_super",
+ "a": "__builtin_va_list",
+ "A": "__builtin_va_list&",
+ "Y": "ptrdiff_t",
+ "P": "FILE*",
+ "J": "jmp_buf",
+ "p": "pid_t",
}
self.attributes = {
- 'n': 'NoThrow',
- 'r': 'NoReturn',
- 'U': 'Pure',
- 'c': 'Const',
- 't': 'CustomTypeChecking',
- 'T': 'TypeGeneric',
- 'F': 'LibBuiltin',
- 'f': 'LibFunction',
- 'h': 'RequiresHeader',
- 'i': 'RuntimeLibFunction',
- 'e': 'ConstWithoutErrnoAndExceptions',
- 'g': 'ConstWithoutExceptions',
- 'j': 'ReturnsTwice',
- 'u': 'NoSideEffects',
- 'z': 'CXXNamespaceStd',
- 'E': 'ConstantEvaluated',
- 'G': 'CXXConsteval',
+ "n": "NoThrow",
+ "r": "NoReturn",
+ "U": "Pure",
+ "c": "Const",
+ "t": "CustomTypeChecking",
+ "T": "TypeGeneric",
+ "F": "LibBuiltin",
+ "f": "LibFunction",
+ "h": "RequiresHeader",
+ "i": "RuntimeLibFunction",
+ "e": "ConstWithoutErrnoAndExceptions",
+ "g": "ConstWithoutExceptions",
+ "j": "ReturnsTwice",
+ "u": "NoSideEffects",
+ "z": "CXXNamespaceStd",
+ "E": "ConstantEvaluated",
+ "G": "CXXConsteval",
}
-
def parse_builtin_line(self, line: str) -> Optional[Tuple[str, str, str]]:
# XCore uses BUILTIN instead of TARGET_BUILTIN
pattern = r'BUILTIN\(([^,]+),\s*"([^"]*)",\s*"([^"]*)"\)'
@@ -61,7 +60,6 @@ def parse_builtin_line(self, line: str) -> Optional[Tuple[str, str, str]]:
return match.group(1), match.group(2), match.group(3)
return None
-
def parse_type_encoding(self, encoding: str) -> Tuple[str, List[str]]:
if not encoding:
return "void", []
@@ -72,7 +70,7 @@ def parse_type_encoding(self, encoding: str) -> Tuple[str, List[str]]:
params = []
while i < len(encoding):
- if encoding[i] == '.':
+ if encoding[i] == ".":
params.append("...")
break
param_type = self._parse_single_type(encoding, i)
@@ -81,7 +79,6 @@ def parse_type_encoding(self, encoding: str) -> Tuple[str, List[str]]:
return return_type[0], params
-
def _parse_single_type(self, encoding: str, start_pos: int) -> Tuple[str, int]:
i = start_pos
if i >= len(encoding):
@@ -89,19 +86,19 @@ def _parse_single_type(self, encoding: str, start_pos: int) -> Tuple[str, int]:
prefixes = []
while i < len(encoding):
- if encoding[i:i+2] == 'LL':
- prefixes.append('long long')
+ if encoding[i : i + 2] == "LL":
+ prefixes.append("long long")
i += 2
- elif encoding[i] == 'L':
- prefixes.append('long')
+ elif encoding[i] == "L":
+ prefixes.append("long")
i += 1
- elif encoding[i] == 'U':
- prefixes.append('unsigned')
+ elif encoding[i] == "U":
+ prefixes.append("unsigned")
i += 1
- elif encoding[i] == 'S':
- prefixes.append('signed')
+ elif encoding[i] == "S":
+ prefixes.append("signed")
i += 1
- elif encoding[i] in 'ZWNOI':
+ elif encoding[i] in "ZWNOI":
i += 1
else:
break
@@ -116,20 +113,20 @@ def _parse_single_type(self, encoding: str, start_pos: int) -> Tuple[str, int]:
ptrs = []
while i < len(encoding):
ch = encoding[i]
- if ch == '*':
- ptrs.append('*')
+ if ch == "*":
+ ptrs.append("*")
i += 1
- elif ch == '&':
- ptrs.append('&')
+ elif ch == "&":
+ ptrs.append("&")
i += 1
- elif ch == 'C':
- cv.append('const')
+ elif ch == "C":
+ cv.append("const")
i += 1
- elif ch == 'D':
- cv.append('volatile')
+ elif ch == "D":
+ cv.append("volatile")
i += 1
- elif ch == 'R':
- cv.append('restrict')
+ elif ch == "R":
+ cv.append("restrict")
i += 1
else:
break
@@ -139,7 +136,6 @@ def _parse_single_type(self, encoding: str, start_pos: int) -> Tuple[str, int]:
ptr_str = "".join((" *" if p == "*" else " &") for p in ptrs)
return f"{prefix_str}{base_type}{cv_str}{ptr_str}".strip(), i
-
def decode_attributes(self, attr_str: str) -> List[str]:
attrs = []
for char in attr_str:
@@ -147,10 +143,9 @@ def decode_attributes(self, attr_str: str) -> List[str]:
attrs.append(self.attributes[char])
return attrs
-
def convert_file(self, input_file: str, output_file: str = None):
try:
- with open(input_file, 'r') as f:
+ with open(input_file, "r") as f:
lines = f.readlines()
except FileNotFoundError:
print(f"Error: File not found {input_file}")
@@ -159,28 +154,40 @@ def convert_file(self, input_file: str, output_file: str = None):
builtins = []
for line in lines:
line = line.strip()
- if line.startswith('BUILTIN'):
+ if line.startswith("BUILTIN"):
parsed = self.parse_builtin_line(line)
if parsed:
builtins.append(parsed)
# Generate output
output_lines = []
-
+
# Header
- output_lines.append("//===--- BuiltinsXCore.td - XCore Builtin function database ----*- C++ -*-===//")
+ output_lines.append(
+ "//===--- BuiltinsXCore.td - XCore Builtin function database ----*- C++ -*-===//"
+ )
output_lines.append("//")
- output_lines.append("// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.")
- output_lines.append("// See https://llvm.org/LICENSE.txt for license information.")
- output_lines.append("// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception")
+ output_lines.append(
+ "// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions."
+ )
+ output_lines.append(
+ "// See https://llvm.org/LICENSE.txt for license information."
+ )
+ output_lines.append(
+ "// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception"
+ )
output_lines.append("//")
- output_lines.append("//===----------------------------------------------------------------------===//")
+ output_lines.append(
+ "//===----------------------------------------------------------------------===//"
+ )
output_lines.append("")
output_lines.append('include "clang/Basic/BuiltinsBase.td"')
output_lines.append("")
-
+
# Base class
- output_lines.append("class XCoreBuiltin<string prototype, list<Attribute> Attr = []> : TargetBuiltin {")
+ output_lines.append(
+ "class XCoreBuiltin<string prototype, list<Attribute> Attr = []> : TargetBuiltin {"
+ )
output_lines.append(" let Spellings = [NAME];")
output_lines.append(" let Prototype = prototype;")
output_lines.append(" let Attributes = Attr;")
@@ -205,15 +212,17 @@ def convert_file(self, input_file: str, output_file: str = None):
else:
attr_str = ""
- output_lines.append(f'def {name} : XCoreBuiltin<"{prototype}"{attr_str}>;')
+ output_lines.append(
+ f'def {name} : XCoreBuiltin<"{prototype}"{attr_str}>;'
+ )
except Exception as e:
output_lines.append(f"// ERROR converting {name}: {e}")
- output_content = '\n'.join(output_lines) + '\n'
-
+ output_content = "\n".join(output_lines) + "\n"
+
if output_file:
- with open(output_file, 'w') as f:
+ with open(output_file, "w") as f:
f.write(output_content)
print(f"Conversion completed!")
print(f"Output file: {output_file}")
@@ -227,7 +236,7 @@ def main():
if len(sys.argv) > 1:
input_file = sys.argv[1]
- output_file = sys.argv[2] if len(sys.argv) > 2 else 'BuiltinsXCore.td'
+ output_file = sys.argv[2] if len(sys.argv) > 2 else "BuiltinsXCore.td"
converter.convert_file(input_file, output_file)
else:
print("XCore Builtin Function Converter")
More information about the cfe-commits
mailing list