diff --git a/utils/update_mir_test_checks.py b/utils/update_mir_test_checks.py
index 58b193d..21f3f77 100755
--- a/utils/update_mir_test_checks.py
+++ b/utils/update_mir_test_checks.py
@@ -322,22 +322,10 @@
     return True
 
 
-def update_test_file(args, test):
+def update_test_file(args, test, autogenerated_note):
     with open(test) as fd:
         input_lines = [l.rstrip() for l in fd]
 
-    script_name = os.path.basename(__file__)
-    first_line = input_lines[0] if input_lines else ""
-    if 'autogenerated' in first_line and script_name not in first_line:
-        common.warn("Skipping test which wasn't autogenerated by " +
-                    script_name + ": " + test)
-        return
-
-    if args.update_only:
-      if not first_line or 'autogenerated' not in first_line:
-        common.warn("Skipping test which isn't autogenerated: " + test)
-        return
-
     triple_in_ir = find_triple_in_ir(input_lines, args.verbose)
     run_lines = common.find_run_lines(test, input_lines)
     run_list = build_run_list(test, run_lines, args.verbose)
@@ -352,7 +340,7 @@
         log('Extracted LLC cmd: llc {}'.format(llc_args), args.verbose)
         log('Extracted FileCheck prefixes: {}'.format(prefixes), args.verbose)
 
-        raw_tool_output = args.llc(llc_args, test)
+        raw_tool_output = args.llc_binary(llc_args, test)
         if not triple_in_cmd and not triple_in_ir:
             common.warn('No triple found: skipping file', test_file=test)
             return
@@ -366,9 +354,6 @@
     prefix_set = set([prefix for run in run_list for prefix in run.prefixes])
     log('Rewriting FileCheck prefixes: {}'.format(prefix_set), args.verbose)
 
-    comment_char = '#' if test.endswith('.mir') else ';'
-    autogenerated_note = ('{} NOTE: Assertions have been autogenerated by '
-                          'utils/{}'.format(comment_char, script_name))
     output_lines = []
     output_lines.append(autogenerated_note)
 
@@ -450,19 +435,20 @@
 def main():
     parser = argparse.ArgumentParser(
         description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
-    parser.add_argument('--llc-binary', dest='llc', default='llc', type=LLC,
+    parser.add_argument('--llc-binary', default='llc', type=LLC,
                         help='The "llc" binary to generate the test case with')
     parser.add_argument('--print-fixed-stack', action='store_true',
                         help='Add check lines for fixedStack')
     parser.add_argument('tests', nargs='+')
     args = common.parse_commandline_args(parser)
 
-    test_paths = [test for pattern in args.tests for test in glob.glob(pattern)]
-    for test in test_paths:
+    script_name = os.path.basename(__file__)
+    for ti in common.itertests(args.tests, parser,
+                               script_name='utils/' + script_name):
         try:
-            update_test_file(args, test)
+            update_test_file(ti.args, ti.path, ti.test_autogenerated_note)
         except Exception:
-            common.warn('Error processing file', test_file=test)
+            common.warn('Error processing file', test_file=ti.path)
             raise
 
 
