llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-testing-tools Author: Ivan Kosarev (kosarev) <details> <summary>Changes</summary> Refine the code a bit to make it easier to comprehend the logic. --- Full diff: https://github.com/llvm/llvm-project/pull/164454.diff 1 Files Affected: - (modified) llvm/utils/update_mc_test_checks.py (+20-36) ``````````diff diff --git a/llvm/utils/update_mc_test_checks.py b/llvm/utils/update_mc_test_checks.py index c830833a11a14..fb2f7e0b78730 100755 --- a/llvm/utils/update_mc_test_checks.py +++ b/llvm/utils/update_mc_test_checks.py @@ -223,9 +223,6 @@ def update_test(ti: common.TestInfo): testlines = list(dict.fromkeys(testlines)) common.debug("Valid test line found: ", len(testlines)) - run_list_size = len(run_list) - testnum = len(testlines) - raw_output = [] raw_prefixes = [] for ( @@ -267,14 +264,12 @@ def update_test(ti: common.TestInfo): prefix_set = set([prefix for p in run_list for prefix in p[0]]) common.debug("Rewriting FileCheck prefixes:", str(prefix_set)) - for test_id in range(testnum): - input_line = testlines[test_id] - + for test_id, input_line in enumerate(testlines): # a {prefix : output, [runid] } dict # insert output to a prefix-key dict, and do a max sorting # to select the most-used prefix which share the same output string p_dict = {} - for run_id in range(run_list_size): + for run_id in range(len(run_list)): out = raw_output[run_id][test_id] if hasErr(out): @@ -282,45 +277,34 @@ def update_test(ti: common.TestInfo): else: o = getOutputString(out) - prefixes = raw_prefixes[run_id] - - for p in prefixes: + for p in raw_prefixes[run_id]: if p not in p_dict: p_dict[p] = o, [run_id] - else: - if p_dict[p] == (None, []): - continue + continue - prev_o, run_ids = p_dict[p] - if o == prev_o: - run_ids.append(run_id) - p_dict[p] = o, run_ids - else: - # conflict, discard - p_dict[p] = None, [] + if p_dict[p] == (None, []): + continue - p_dict_sorted = dict(sorted(p_dict.items(), key=lambda item: -len(item[1][1]))) + prev_o, run_ids = p_dict[p] + if o == prev_o: + run_ids.append(run_id) + p_dict[p] = o, run_ids + else: + # conflict, discard + p_dict[p] = None, [] # prefix is selected and generated with most shared output lines # each run_id can only be used once - used_runid = set() - + used_run_ids = set() selected_prefixes = set() - for prefix, tup in p_dict_sorted.items(): - o, run_ids = tup - - if len(run_ids) == 0: - continue - - skip = False - for i in run_ids: - if i in used_runid: - skip = True - else: - used_runid.add(i) - if not skip: + get_num_runs = lambda item: len(item[1][1]) + p_dict_sorted = sorted(p_dict.items(), key=get_num_runs, reverse=True) + for prefix, (o, run_ids) in p_dict_sorted: + if run_ids and used_run_ids.isdisjoint(run_ids): selected_prefixes.add(prefix) + used_run_ids.update(run_ids) + # Generate check lines in alphabetical order. check_lines = [] for prefix in sorted(selected_prefixes): `````````` </details> https://github.com/llvm/llvm-project/pull/164454 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
