[llvm] a8b2fed - [Utils][FIX] Properly deal with occasionally deleted functions

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 1 20:01:08 PDT 2020


Author: Johannes Doerfert
Date: 2020-04-01T21:56:18-05:00
New Revision: a8b2fed0aef99be3efd11f8eec26df5a7d42fde2

URL: https://github.com/llvm/llvm-project/commit/a8b2fed0aef99be3efd11f8eec26df5a7d42fde2
DIFF: https://github.com/llvm/llvm-project/commit/a8b2fed0aef99be3efd11f8eec26df5a7d42fde2.diff

LOG: [Utils][FIX] Properly deal with occasionally deleted functions

While D68850 allowed functions to be deleted I accidentally saved some
version of the function to be used once a suitable prefix was found.
This turned out to be problematic when the occasionally deleted function
is also occasionally modified. The test case is adjusted to resemble the
case in which the problem was found.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D76586

Added: 
    

Modified: 
    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/utils/UpdateTestChecks/common.py

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
index 6b82c49f018e..adb1ec9154f7 100644
--- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll
@@ -1,9 +1,13 @@
-; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,FIRST
-; RUN: opt -S -globalopt < %s | FileCheck %s --check-prefixes=ALL,SECOND
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_TWO,ALL_BUT_THREE,ALL_BUT_FOUR,ONE_AND_TWO,ONE_AND_THREE,ONE_AND_FOUR,ONE
+; RUN: opt -S -globalopt < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_THREE,ALL_BUT_FOUR,ONE_AND_TWO,TWO_AND_THREE,TWO_AND_FOUR,TWO
+; RUN: opt -S -instsimplify < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_TWO,ALL_BUT_FOUR,ONE_AND_THREE,TWO_AND_THREE,THREE_AND_FOUR,THREE
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_TWO,ALL_BUT_THREE,ONE_AND_FOUR,TWO_AND_FOUR,THREE_AND_FOUR,FOUR
 ;
-; Make sure we use FIRST to check for @sometimes_here as ALL does not work.
+; Make sure we don't use anything to check for @sometimes_here that contains "ALL" or "TWO".
+; Also verify we use "ONE_AND_FOUR" for the unmodified @sometimes_here version and "THREE" for the version without the add.
 
 define internal void @sometimes_here() {
+  %c = add i32 undef, undef
   ret void
 }
 

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
index f9374257162f..c42845f8d859 100644
--- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/sometimes_deleted_function.ll.expected
@@ -1,13 +1,21 @@
 ; 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
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_TWO,ALL_BUT_THREE,ALL_BUT_FOUR,ONE_AND_TWO,ONE_AND_THREE,ONE_AND_FOUR,ONE
+; RUN: opt -S -globalopt < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_THREE,ALL_BUT_FOUR,ONE_AND_TWO,TWO_AND_THREE,TWO_AND_FOUR,TWO
+; RUN: opt -S -instsimplify < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_TWO,ALL_BUT_FOUR,ONE_AND_THREE,TWO_AND_THREE,THREE_AND_FOUR,THREE
+; RUN: opt -S < %s | FileCheck %s --check-prefixes=ALL,ALL_BUT_ONE,ALL_BUT_TWO,ALL_BUT_THREE,ONE_AND_FOUR,TWO_AND_FOUR,THREE_AND_FOUR,FOUR
 ;
-; Make sure we use FIRST to check for @sometimes_here as ALL does not work.
+; Make sure we don't use anything to check for @sometimes_here that contains "ALL" or "TWO".
+; Also verify we use "ONE_AND_FOUR" for the unmodified @sometimes_here version and "THREE" for the version without the add.
 
 define internal void @sometimes_here() {
-; FIRST-LABEL: @sometimes_here(
-; FIRST-NEXT:    ret void
+; ONE_AND_FOUR-LABEL: @sometimes_here(
+; ONE_AND_FOUR-NEXT:    [[C:%.*]] = add i32 undef, undef
+; ONE_AND_FOUR-NEXT:    ret void
 ;
+; THREE-LABEL: @sometimes_here(
+; THREE-NEXT:    ret void
+;
+  %c = add i32 undef, undef
   ret void
 }
 

diff  --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py
index 3186628b50a2..e35f4b10c3ba 100644
--- a/llvm/utils/UpdateTestChecks/common.py
+++ b/llvm/utils/UpdateTestChecks/common.py
@@ -283,22 +283,17 @@ def add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name,
   # 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
 
-      # prefix is blacklisted. We remember the output as we might need it later but we will not emit anything for the prefix.
+      # Check if the prefix is blacklisted.
       if checkprefix in prefix_blacklist:
-          if not saved_output and func_name in func_dict[checkprefix]:
-              saved_output = func_dict[checkprefix][func_name]
-          continue
+        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 we do not have output for this prefix we skip it.
       if not func_dict[checkprefix][func_name]:
-        if not saved_output:
-            continue
-        func_dict[checkprefix][func_name] = saved_output
+        continue
 
       # Add some space between 
diff erent check prefixes, but not after the last
       # check line (before the test code).


        


More information about the llvm-commits mailing list