diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py --- a/llvm/utils/UpdateTestChecks/common.py +++ b/llvm/utils/UpdateTestChecks/common.py @@ -229,16 +229,37 @@ def add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, check_label_format, is_asm, is_analyze): + # blacklist are prefixes we cannot use to print the function because it doesn't exist in run lines that use these prefixes as well. + blacklist = set() printed_prefixes = [] for p in prefix_list: checkprefixes = p[0] + # If not all checkprefixes of this run line produced the function we cannot check for it as it does not + # exist for this run line. A subset of the check prefixes might know about the function but only because + # other run lines created it. + if any(map(lambda checkprefix: func_name not in func_dict[checkprefix], checkprefixes)): + blacklist |= set(checkprefixes) + continue + + # blacklist is constructed, we can now emit the output + for p in prefix_list: + checkprefixes = p[0] + saved_output = None for checkprefix in checkprefixes: if checkprefix in printed_prefixes: break - # TODO func_dict[checkprefix] may be None, '' or not exist. - # Fix the call sites. - if func_name not in func_dict[checkprefix] or not func_dict[checkprefix][func_name]: - continue + + # prefix is blacklisted. We remember the output as we might need it later but we will not emit anything for the prefix. + if checkprefix in blacklist: + if not saved_output and func_name in func_dict[checkprefix]: + saved_output = func_dict[checkprefix][func_name] + continue + + # If we do not have output for this prefix but there is one saved, we go ahead with this prefix and the saved output. + if not func_dict[checkprefix][func_name]: + if not saved_output: + continue + func_dict[checkprefix][func_name] = saved_output # Add some space between different check prefixes, but not after the last # check line (before the test code).