Skip to content

Commit

Permalink
[UTC] Add do-not-autogenerate capability
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D154383
  • Loading branch information
pogo59 committed Jul 6, 2023
1 parent bce8c9e commit c2bed2a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
15 changes: 12 additions & 3 deletions llvm/docs/TestingGuide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -283,14 +283,23 @@ In that case to reduce the human work we can use the scripts available in
llvm/utils/ to generate the assertions.

For example to generate assertions in an :program:`llc`-based test, after
adding RUN line use:
adding one or more RUN lines use:

.. code-block:: bash
% llvm/utils/update_llc_test_checks.py --llc-binary build/bin/llc test.ll
And if you want to update assertions in an existing test case, pass `-u` option
which first check the ``NOTE:`` line exists and matches the script name.
This will generate FileCheck assertions, and insert a ``NOTE:`` line at the
top to indicate that assertions were automatically generated.

If you want to update assertions in an existing test case, pass the `-u` option
which first checks the ``NOTE:`` line exists and matches the script name.

Sometimes a test absolutely depends on hand-written assertions and should not
have assertions automatically generated. In that case, add the text ``NOTE: Do
not autogenerate`` to the first line, and the scripts will skip that test. It
is a good idea to explain why generated assertions will not work for the test
so future developers will understand what is going on.

These are the most common scripts and their purposes/applications in generating
assertions:
Expand Down
4 changes: 4 additions & 0 deletions llvm/utils/UpdateTestChecks/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,9 @@ def itertests(
with open(test) as f:
input_lines = [l.rstrip() for l in f]
first_line = input_lines[0] if input_lines else ""
if UTC_AVOID in first_line:
warn("Skipping test that must not be autogenerated: " + test)
continue
is_regenerate = UTC_ADVERT in first_line

# If we're generating a new test, set the default version to the latest.
Expand Down Expand Up @@ -468,6 +471,7 @@ def invoke_tool(exe, cmd_args, ir, preprocess_cmd=None, verbose=False):
UTC_ARGS_KEY = "UTC_ARGS:"
UTC_ARGS_CMD = re.compile(r".*" + UTC_ARGS_KEY + "\s*(?P<cmd>.*)\s*$")
UTC_ADVERT = "NOTE: Assertions have been autogenerated by "
UTC_AVOID = "NOTE: Do not autogenerate"
UNUSED_NOTE = "NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:"

OPT_FUNCTION_RE = re.compile(
Expand Down

0 comments on commit c2bed2a

Please sign in to comment.