[PATCH] D68850: [Utils] Deal with occasionally deleted functions
Johannes Doerfert via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 31 00:43:54 PST 2019
This revision was automatically updated to reflect the committed changes.
jdoerfert marked an inline comment as done.
Closed by commit rGa6c59e0792ed: [Utils] Deal with occasionally deleted functions (authored by jdoerfert).
Changed prior to commit:
https://reviews.llvm.org/D68850?vs=235681&id=235690#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68850/new/
https://reviews.llvm.org/D68850
Files:
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
llvm/test/tools/UpdateTestChecks/update_test_checks/sometimes_deleted_function.test
llvm/utils/UpdateTestChecks/common.py
Index: llvm/utils/UpdateTestChecks/common.py
===================================================================
--- llvm/utils/UpdateTestChecks/common.py
+++ llvm/utils/UpdateTestChecks/common.py
@@ -265,16 +265,37 @@
def add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, check_label_format, is_asm, is_analyze):
+ # prefix_blacklist are prefixes we cannot use to print the function because it doesn't exist in run lines that use these prefixes as well.
+ prefix_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)):
+ prefix_blacklist |= set(checkprefixes)
+ continue
+
+ # prefix_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 prefix_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).
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/sometimes_deleted_function.test
===================================================================
--- /dev/null
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/sometimes_deleted_function.test
@@ -0,0 +1,5 @@
+# RUN: cp -f %S/Inputs/sometimes_deleted_function.ll %t.ll && %update_test_checks %t.ll
+# RUN: diff -u %t.ll %S/Inputs/sometimes_deleted_function.ll.expected
+## Check that running the script again does not change the result:
+# RUN: %update_test_checks %t.ll
+# RUN: diff -u %t.ll %S/Inputs/sometimes_deleted_function.ll.expected
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
===================================================================
--- /dev/null
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
@@ -0,0 +1,19 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,FIRST
+; RUN: opt -S -globalopt < %s | FileCheck %s --check-prefixes=ALL,SECOND
+;
+; Make sure we use FIRST to check for @sometimes_here as ALL does not work.
+
+define internal void @sometimes_here() {
+; FIRST-LABEL: @sometimes_here(
+; FIRST-NEXT: ret void
+;
+ ret void
+}
+
+define void @always_here() {
+; ALL-LABEL: @always_here(
+; ALL-NEXT: ret void
+;
+ ret void
+}
Index: llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
@@ -0,0 +1,12 @@
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,FIRST
+; RUN: opt -S -globalopt < %s | FileCheck %s --check-prefixes=ALL,SECOND
+;
+; Make sure we use FIRST to check for @sometimes_here as ALL does not work.
+
+define internal void @sometimes_here() {
+ ret void
+}
+
+define void @always_here() {
+ ret void
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68850.235690.patch
Type: text/x-patch
Size: 4234 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191231/c7ae69e2/attachment.bin>
More information about the llvm-commits
mailing list