Skip to content

Commit b30abe0

Browse files
committed
[CHERI-Generic] Make it easier to add new substitutions
1 parent 1dcc97c commit b30abe0

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

llvm/test/CodeGen/CHERI-Generic/regenerate-all.py

+15-12
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,23 @@
1515
CHERI_GENERIC_UTC_CMD = re.compile((r'.*' + CHERI_GENERIC_UTC_KEY + r'\s*(?P<cmd>.*)\s*$').encode("utf-8"))
1616

1717

18+
def _list2bytes(l: "list[str]") -> bytes:
19+
return " ".join(l).encode("utf-8")
20+
1821
class ArchSpecificValues(object):
1922
def __init__(self, architecture: str, *, cap_range, cap_width,
2023
common_args: list, hybrid_sf_args: list, hybrid_hf_args: list,
2124
purecap_sf_args: list, purecap_hf_args: list, datalayout: bytes,
2225
base_architecture: str = None):
23-
self.hybrid_datalayout = datalayout
24-
self.purecap_datalayout = datalayout + b"-A200-P200-G200"
25-
self.hybrid_softfloat_args = (" ".join(common_args + hybrid_sf_args)).encode("utf-8")
26-
self.hybrid_hardfloat_args = (" ".join(common_args + hybrid_hf_args)).encode("utf-8")
27-
self.purecap_softfloat_args = (" ".join(common_args + purecap_sf_args)).encode("utf-8")
28-
self.purecap_hardfloat_args = (" ".join(common_args + purecap_hf_args)).encode("utf-8")
26+
27+
self.replacements: "dict[bytes, bytes]" = {
28+
b"@HYBRID_DATALAYOUT@": datalayout,
29+
b"@PURECAP_DATALAYOUT@": datalayout + b"-A200-P200-G200",
30+
b"@HYBRID_SOFTFLOAT_ARGS@": _list2bytes(common_args + hybrid_sf_args),
31+
b"@HYBRID_HARDFLOAT_ARGS@": _list2bytes(common_args + hybrid_hf_args),
32+
b"@PURECAP_SOFTFLOAT_ARGS@": _list2bytes(common_args + purecap_sf_args),
33+
b"@PURECAP_HARDFLOAT_ARGS@": _list2bytes(common_args + purecap_hf_args),
34+
}
2935
self.cap_width = cap_width
3036
self.cap_range = cap_range
3137
self.name = architecture
@@ -200,12 +206,9 @@ def update_one_test(test_name: str, input_file: typing.BinaryIO,
200206
int(math.log2(arch_def.cap_range / 8))).encode("utf-8"))
201207
# Opt tests require a datalayout since the lit substitutions don't
202208
# include it in their commandline
203-
converted_line = converted_line.replace(b"@PURECAP_DATALAYOUT@", arch_def.purecap_datalayout)
204-
converted_line = converted_line.replace(b"@HYBRID_DATALAYOUT@", arch_def.hybrid_datalayout)
205-
converted_line = converted_line.replace(b"@HYBRID_SOFTFLOAT_ARGS@", arch_def.hybrid_softfloat_args)
206-
converted_line = converted_line.replace(b"@HYBRID_HARDFLOAT_ARGS@", arch_def.hybrid_hardfloat_args)
207-
converted_line = converted_line.replace(b"@PURECAP_SOFTFLOAT_ARGS@", arch_def.purecap_softfloat_args)
208-
converted_line = converted_line.replace(b"@PURECAP_HARDFLOAT_ARGS@", arch_def.purecap_hardfloat_args)
209+
for key, replacement in arch_def.replacements.items():
210+
converted_line = converted_line.replace(key, replacement)
211+
209212
if args.verbose and converted_line != line:
210213
print("Adjusted line:")
211214
print(" Before:", line)

0 commit comments

Comments
 (0)