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 @@ -51,8 +51,8 @@ CHECK_RE = re.compile(r'^\s*[;#]\s*([^:]+?)(?:-NEXT|-NOT|-DAG|-LABEL)?:') OPT_FUNCTION_RE = re.compile( - r'^\s*define\s+(?:internal\s+)?[^@]*@(?P[\w-]+?)\s*\(' - r'(\s+)?[^)]*[^{]*\{\n(?P.*?)^\}$', + r'^\s*define\s+(?:internal\s+)?[^@]*@(?P[\w-]+?)\s*' + r'(?P\((\s+)?[^)]*\)?)[^{]*\{\n(?P.*?)^\}$', flags=(re.M | re.S)) ANALYZE_FUNCTION_RE = re.compile( @@ -102,18 +102,26 @@ # Build up a dictionary of all the function bodies. class function_body(object): - def __init__(self, string, extra): + def __init__(self, string, extra, args): self.scrub = string self.extrascrub = extra + self.args = args def __str__(self): return self.scrub -def build_function_body_dictionary(function_re, scrubber, scrubber_args, raw_tool_output, prefixes, func_dict, verbose): +def build_function_body_dictionary(function_re, scrubber, scrubber_args, raw_tool_output, prefixes, func_dict, verbose, record_args): for m in function_re.finditer(raw_tool_output): if not m: continue func = m.group('func') body = m.group('body') + # Determine if we print arguments, the opening brace, or nothing after the function name + if record_args and 'args' in m.groupdict(): + args = m.group('args').strip() + elif 'args' in m.groupdict(): + args = '(' + else: + args = '' scrubbed_body = do_scrub(body, scrubber, scrubber_args, extra = False) scrubbed_extra = do_scrub(body, scrubber, scrubber_args, extra = True) if 'analysis' in m.groupdict(): @@ -139,7 +147,7 @@ func_dict[prefix][func] = None continue - func_dict[prefix][func] = function_body(scrubbed_body, scrubbed_extra) + func_dict[prefix][func] = function_body(scrubbed_body, scrubbed_extra, args) ##### Generator of LLVM IR CHECK lines @@ -219,7 +227,8 @@ output_lines.append(comment_marker) printed_prefixes.append(checkprefix) - output_lines.append(check_label_format % (checkprefix, func_name)) + args = str(func_dict[checkprefix][func_name].args) + output_lines.append(check_label_format % (checkprefix, func_name, args)) func_body = str(func_dict[checkprefix][func_name]).splitlines() # For ASM output, just emit the check lines. @@ -270,12 +279,12 @@ def add_ir_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, preserve_names): # Label format is based on IR string. - check_label_format = '{} %s-LABEL: @%s('.format(comment_marker) + check_label_format = '{} %s-LABEL: @%s%s'.format(comment_marker) add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, check_label_format, False, preserve_names) def add_analyze_checks(output_lines, comment_marker, prefix_list, func_dict, func_name): - check_label_format = '{} %s-LABEL: \'%s\''.format(comment_marker) + check_label_format = '{} %s-LABEL: \'%s%s\''.format(comment_marker) add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, check_label_format, False, True) diff --git a/llvm/utils/update_analyze_test_checks.py b/llvm/utils/update_analyze_test_checks.py --- a/llvm/utils/update_analyze_test_checks.py +++ b/llvm/utils/update_analyze_test_checks.py @@ -146,7 +146,7 @@ for raw_tool_output in re.split(r'Printing analysis ', raw_tool_outputs): common.build_function_body_dictionary( common.ANALYZE_FUNCTION_RE, common.scrub_body, [], - raw_tool_output, prefixes, func_dict, args.verbose) + raw_tool_output, prefixes, func_dict, args.verbose, False) is_in_function = False is_in_function_start = False diff --git a/llvm/utils/update_mir_test_checks.py b/llvm/utils/update_mir_test_checks.py --- a/llvm/utils/update_mir_test_checks.py +++ b/llvm/utils/update_mir_test_checks.py @@ -330,7 +330,7 @@ build_function_body_dictionary(test, raw_tool_output, triple_in_cmd or triple_in_ir, - prefixes, func_dict, args.verbose) + prefixes, func_dict, args.verbose, False) state = 'toplevel' func_name = None diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py --- a/llvm/utils/update_test_checks.py +++ b/llvm/utils/update_test_checks.py @@ -66,6 +66,8 @@ help='Only update test if it was already autogened') parser.add_argument('-p', '--preserve-names', action='store_true', help='Do not scrub IR names') + parser.add_argument('--function-arguments', action='store_true', + help='Keep function argument information around for the check line') parser.add_argument('tests', nargs='+') args = parser.parse_args() @@ -155,7 +157,8 @@ raw_tool_output = common.invoke_tool(args.opt_binary, opt_args, test) common.build_function_body_dictionary( common.OPT_FUNCTION_RE, common.scrub_body, [], - raw_tool_output, prefixes, func_dict, args.verbose) + raw_tool_output, prefixes, func_dict, args.verbose, + args.function_arguments) is_in_function = False is_in_function_start = False