From aa99a3819065e7a0dfb8fddfdd4c94cbf64bc217 Mon Sep 17 00:00:00 2001 From: Philipp van Kempen Date: Thu, 16 Jan 2025 10:36:10 +0100 Subject: [PATCH] fixes --- seal5/backends/riscv_intrinsics/writer.py | 2 +- seal5/flow.py | 1 + seal5/pass_list.py | 2 ++ seal5/passes.py | 4 ++-- seal5/transform/process_settings/transform.py | 12 ++++++++---- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/seal5/backends/riscv_intrinsics/writer.py b/seal5/backends/riscv_intrinsics/writer.py index 40d8162c..18bbb270 100644 --- a/seal5/backends/riscv_intrinsics/writer.py +++ b/seal5/backends/riscv_intrinsics/writer.py @@ -359,7 +359,7 @@ def main(): metrics["n_skipped"] += 1 metrics["skipped_sets"].append(set_name) continue - assert riscv_settings is not None + assert riscv_settings_ is not None xlen = riscv_settings_.xlen assert xlen is not None for intrinsic in settings.intrinsics.intrinsics: diff --git a/seal5/flow.py b/seal5/flow.py index 61f8a476..71e179c4 100644 --- a/seal5/flow.py +++ b/seal5/flow.py @@ -55,6 +55,7 @@ ("explicit_truncations", passes.explicit_truncations, {}), ("process_settings", passes.process_settings, {}), ("write_yaml", passes.write_yaml, {}), + ("process_settings2", passes.process_settings, {}), ("detect_behavior_constraints", passes.detect_behavior_constraints, {}), ("detect_registers", passes.detect_registers, {}), ("collect_register_operands", passes.collect_register_operands, {}), diff --git a/seal5/pass_list.py b/seal5/pass_list.py index bf30d8b5..8ba69dd7 100644 --- a/seal5/pass_list.py +++ b/seal5/pass_list.py @@ -279,6 +279,7 @@ def process_settings( assert input_file.is_file(), f"File not found: {input_file}" name = input_file.name logger.info("Processing settings for %s", name) + settings.save() args = [ settings.models_dir / name, "--log", @@ -812,6 +813,7 @@ def write_yaml( ) new_settings: Seal5Settings = Seal5Settings.from_yaml_file(settings.temp_dir / new_name) settings.merge(new_settings, overwrite=False, inplace=True) + settings.save() return PassResult(metrics={}) diff --git a/seal5/passes.py b/seal5/passes.py index 1a71e078..05f11358 100644 --- a/seal5/passes.py +++ b/seal5/passes.py @@ -145,8 +145,8 @@ def run(self, inputs: List[str], *_args, settings: Optional[Seal5Settings] = Non futures = [] passes_settings_ = passes_settings for input_model in inputs: - model_settings = settings.models[input_model] - model_passes_settings = model_settings.passes + model_settings = settings.models.get(input_model) + model_passes_settings = model_settings.passes if model_settings is not None else None kwargs__ = kwargs_.copy() if model_passes_settings is not None: passes_settings_ = passes_settings_.merge(model_passes_settings) diff --git a/seal5/transform/process_settings/transform.py b/seal5/transform/process_settings/transform.py index 5e8cb560..46f9b6d3 100644 --- a/seal5/transform/process_settings/transform.py +++ b/seal5/transform/process_settings/transform.py @@ -75,8 +75,10 @@ def run(args): assert False model_name = top_level.stem - assert "settings" not in model - model["settings"] = settings + if "settings" not in model: + model["settings"] = settings + else: + model["settings"].merge(settings, overwrite=True, inplace=True) for set_name, set_def in model["sets"].items(): model_settings = settings.models.get(model_name) @@ -90,8 +92,10 @@ def run(args): riscv_settings = RISCVSettings(xlen=set_def.xlen) if riscv_settings.xlen is None: riscv_settings.xlen = set_def.xlen - assert set_def.settings is None - set_def.settings = ext_settings # TODO: decide how to do this properly + if set_def.settings is None: + set_def.settings = ext_settings # TODO: decide how to do this properly + else: + set_def.settings.merge(ext_settings, overwrite=True, inplace=True) logger.info("dumping model") with open(model_path, "wb") as f: