[llvm] af52d5a - [IPConstantProp][NFCI] Improve and modernize tests

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 9 13:25:34 PST 2019


Author: Johannes Doerfert
Date: 2019-12-09T15:24:08-06:00
New Revision: af52d5a04cb3c488af06c50806d15f1ee9252cc7

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

LOG: [IPConstantProp][NFCI] Improve and modernize tests

Summary:
This change is in preparation to reuse these test for the Attributor.
It mainly is to remove UB, make it clear what is tested, and use
"modern" run lines.

Reviewers: fhahn, efriedma, mssimpso, davide

Subscribers: bollu, llvm-commits

Tags: #llvm

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

Added: 
    

Modified: 
    llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
    llvm/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll
    llvm/test/Transforms/IPConstantProp/PR16052.ll
    llvm/test/Transforms/IPConstantProp/PR26044.ll
    llvm/test/Transforms/IPConstantProp/PR43857.ll
    llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
    llvm/test/Transforms/IPConstantProp/recursion.ll
    llvm/test/Transforms/IPConstantProp/return-argument.ll
    llvm/test/Transforms/IPConstantProp/return-constant.ll
    llvm/test/Transforms/IPConstantProp/return-constants.ll
    llvm/test/Transforms/IPConstantProp/solve-after-each-resolving-undefs-for-function.ll
    llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
    llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll b/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
index 54a65d61da37..6471ed925797 100644
--- a/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
+++ b/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
@@ -1,7 +1,9 @@
-; RUN: opt < %s -ipconstprop -S | grep "ret i32 %r"
+; RUN: opt < %s -ipconstprop -S | FileCheck %s
 ; Should not propagate the result of a weak function.
 ; PR2411
 
+; CHECK: ret i32 %r
+
 define weak i32 @foo() nounwind  {
 entry:
         ret i32 1

diff  --git a/llvm/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll b/llvm/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll
index 61f4bf6d9f7f..9a027668036c 100644
--- a/llvm/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll
+++ b/llvm/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll
@@ -21,10 +21,10 @@ define internal i32 @vfu2(%struct.MYstr* byval align 4 %u) nounwind readonly {
 entry:
   %0 = getelementptr %struct.MYstr, %struct.MYstr* %u, i32 0, i32 1 ; <i32*> [#uses=1]
   %1 = load i32, i32* %0
-; CHECK: load i32, i32* getelementptr inbounds (%struct.MYstr, %struct.MYstr* @mystr, i32 0, i32 1)
+; CHECK: %struct.MYstr* @mystr, i{{..}} 0, i32 1
   %2 = getelementptr %struct.MYstr, %struct.MYstr* %u, i32 0, i32 0 ; <i8*> [#uses=1]
   %3 = load i8, i8* %2
-; CHECK: load i8, i8* getelementptr inbounds (%struct.MYstr, %struct.MYstr* @mystr, i32 0, i32 0)
+; CHECK: %struct.MYstr* @mystr, i{{..}} 0, i32 0
   %4 = zext i8 %3 to i32
   %5 = add i32 %4, %1
   ret i32 %5
@@ -34,7 +34,7 @@ define i32 @unions() nounwind {
 entry:
   call void @vfu1(%struct.MYstr* byval align 4 @mystr) nounwind
   %result = call i32 @vfu2(%struct.MYstr* byval align 4 @mystr) nounwind
-
+; CHECK: ret i32 %result
   ret i32 %result
 }
 

diff  --git a/llvm/test/Transforms/IPConstantProp/PR16052.ll b/llvm/test/Transforms/IPConstantProp/PR16052.ll
index 959074d771f9..451693f1c90c 100644
--- a/llvm/test/Transforms/IPConstantProp/PR16052.ll
+++ b/llvm/test/Transforms/IPConstantProp/PR16052.ll
@@ -1,9 +1,15 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes 
 ; RUN: opt < %s -S -ipsccp | FileCheck %s
 
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 define i64 @fn2() {
+; CHECK-LABEL: define {{[^@]+}}@fn2()
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[CALL2:%.*]] = call i64 @fn1(i64 undef)
+; CHECK-NEXT:    ret i64 [[CALL2]]
+;
 entry:
   %conv = sext i32 undef to i64
   %div = sdiv i64 8, %conv
@@ -11,16 +17,15 @@ entry:
   ret i64 %call2
 }
 
-; CHECK-DAG: define i64 @fn2(
-; CHECK: %[[CALL:.*]] = call i64 @fn1(i64 undef)
-
 define internal i64 @fn1(i64 %p1) {
+; CHECK-LABEL: define {{[^@]+}}@fn1
+; CHECK-SAME: (i64 [[P1:%.*]])
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[COND:%.*]] = select i1 undef, i64 undef, i64 undef
+; CHECK-NEXT:    ret i64 [[COND]]
+;
 entry:
   %tobool = icmp ne i64 %p1, 0
   %cond = select i1 %tobool, i64 %p1, i64 %p1
   ret i64 %cond
 }
-
-; CHECK-DAG: define internal i64 @fn1(
-; CHECK: %[[SEL:.*]] = select i1 undef, i64 undef, i64 undef
-; CHECK: ret i64 %[[SEL]]

diff  --git a/llvm/test/Transforms/IPConstantProp/PR26044.ll b/llvm/test/Transforms/IPConstantProp/PR26044.ll
index 6c608868210c..eeb5b87e0a28 100644
--- a/llvm/test/Transforms/IPConstantProp/PR26044.ll
+++ b/llvm/test/Transforms/IPConstantProp/PR26044.ll
@@ -1,8 +1,20 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
 ; RUN: opt < %s -S -ipsccp | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-define void @fn2() {
+define void @fn2(i32* %P) {
+; CHECK-LABEL: define {{[^@]+}}@fn2
+; CHECK-SAME: (i32* [[P:%.*]])
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[IF_END:%.*]]
+; CHECK:       for.cond1:
+; CHECK-NEXT:    br i1 false, label [[IF_END]], label [[IF_END]]
+; CHECK:       if.end:
+; CHECK-NEXT:    [[CALL:%.*]] = call i32 @fn1(i32 undef)
+; CHECK-NEXT:    store i32 [[CALL]], i32* [[P]]
+; CHECK-NEXT:    br label [[FOR_COND1:%.*]]
+;
 entry:
   br label %if.end
 
@@ -13,17 +25,36 @@ if.end:                                           ; preds = %lbl, %for.cond1
   %e.2 = phi i32* [ undef, %entry ], [ null, %for.cond1 ], [ null, %for.cond1 ]
   %0 = load i32, i32* %e.2, align 4
   %call = call i32 @fn1(i32 %0)
+  store i32 %call, i32* %P
   br label %for.cond1
 }
 
 define internal i32 @fn1(i32 %p1) {
+; CHECK-LABEL: define {{[^@]+}}@fn1
+; CHECK-SAME: (i32 [[P1:%.*]])
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[COND:%.*]] = select i1 undef, i32 undef, i32 undef
+; CHECK-NEXT:    ret i32 [[COND]]
+;
 entry:
   %tobool = icmp ne i32 %p1, 0
   %cond = select i1 %tobool, i32 %p1, i32 %p1
   ret i32 %cond
 }
 
-define void @fn_no_null_opt() #0 {
+define void @fn_no_null_opt(i32* %P) #0 {
+; CHECK-LABEL: define {{[^@]+}}@fn_no_null_opt
+; CHECK-SAME: (i32* [[P:%.*]])
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[IF_END:%.*]]
+; CHECK:       for.cond1:
+; CHECK-NEXT:    br i1 false, label [[IF_END]], label [[IF_END]]
+; CHECK:       if.end:
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* null, align 4
+; CHECK-NEXT:    [[CALL:%.*]] = call i32 @fn0(i32 [[TMP0]])
+; CHECK-NEXT:    store i32 [[CALL]], i32* [[P]]
+; CHECK-NEXT:    br label [[FOR_COND1:%.*]]
+;
 entry:
   br label %if.end
 
@@ -34,10 +65,18 @@ if.end:                                           ; preds = %lbl, %for.cond1
   %e.2 = phi i32* [ undef, %entry ], [ null, %for.cond1 ], [ null, %for.cond1 ]
   %0 = load i32, i32* %e.2, align 4
   %call = call i32 @fn0(i32 %0)
+  store i32 %call, i32* %P
   br label %for.cond1
 }
 
 define internal i32 @fn0(i32 %p1) {
+; CHECK-LABEL: define {{[^@]+}}@fn0
+; CHECK-SAME: (i32 [[P1:%.*]])
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[P1]], 0
+; CHECK-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], i32 [[P1]], i32 [[P1]]
+; CHECK-NEXT:    ret i32 [[COND]]
+;
 entry:
   %tobool = icmp ne i32 %p1, 0
   %cond = select i1 %tobool, i32 %p1, i32 %p1
@@ -45,18 +84,3 @@ entry:
 }
 
 attributes #0 = { "null-pointer-is-valid"="true" }
-
-; CHECK-LABEL: define void @fn2(
-; CHECK: call i32 @fn1(i32 undef)
-
-; CHECK-LABEL: define internal i32 @fn1(
-; CHECK:%[[COND:.*]] = select i1 undef, i32 undef, i32 undef
-; CHECK: ret i32 %[[COND]]
-
-; CHECK-LABEL: define void @fn_no_null_opt(
-; CHECK: call i32 @fn0(i32 %0)
-
-; CHECK-LABEL: define internal i32 @fn0(
-; CHECK:%[[TOBOOL:.*]] = icmp ne i32 %p1, 0
-; CHECK:%[[COND:.*]] = select i1 %[[TOBOOL]], i32 %p1, i32 %p1
-; CHECK: ret i32 %[[COND]]

diff  --git a/llvm/test/Transforms/IPConstantProp/PR43857.ll b/llvm/test/Transforms/IPConstantProp/PR43857.ll
index b1a9760abad2..0d0d14d398de 100644
--- a/llvm/test/Transforms/IPConstantProp/PR43857.ll
+++ b/llvm/test/Transforms/IPConstantProp/PR43857.ll
@@ -1,6 +1,5 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt < %s -S -ipconstprop | FileCheck %s --check-prefixes=ALL,IPCP
-; RUN: opt -S -passes=attributor -attributor-disable=false -attributor-max-iterations-verify -attributor-max-iterations=1 < %s | FileCheck %s --check-prefixes=ALL,ATTRIBUTOR
+; RUN: opt < %s -S -ipconstprop | FileCheck %s
 
 %struct.wobble = type { i32 }
 %struct.zot = type { %struct.wobble, %struct.wobble, %struct.wobble }
@@ -8,25 +7,20 @@
 declare dso_local fastcc float @bar(%struct.wobble* noalias, <8 x i32>) unnamed_addr
 
 define %struct.zot @widget(<8 x i32> %arg) local_unnamed_addr {
-; ALL-LABEL: @widget(
-; ALL-NEXT:  bb:
-; ALL-NEXT:    ret [[STRUCT_ZOT:%.*]] undef
+; CHECK-LABEL: @widget(
+; CHECK-NEXT:  bb:
+; CHECK-NEXT:    ret [[STRUCT_ZOT:%.*]] undef
 ;
 bb:
   ret %struct.zot undef
 }
 
 define void @baz(<8 x i32> %arg) local_unnamed_addr {
-; IPCP-LABEL: @baz(
-; IPCP-NEXT:  bb:
-; IPCP-NEXT:    [[TMP:%.*]] = call [[STRUCT_ZOT:%.*]] @widget(<8 x i32> [[ARG:%.*]])
-; IPCP-NEXT:    [[TMP1:%.*]] = extractvalue [[STRUCT_ZOT]] %tmp, 0, 0
-; IPCP-NEXT:    ret void
-;
-; ATTRIBUTOR-LABEL: @baz(
-; ATTRIBUTOR-NEXT:  bb:
-; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = extractvalue [[STRUCT_ZOT:%.*]] undef, 0, 0
-; ATTRIBUTOR-NEXT:    ret void
+; CHECK-LABEL: @baz(
+; CHECK-NEXT:  bb:
+; CHECK-NEXT:    [[TMP:%.*]] = call [[STRUCT_ZOT:%.*]] @widget(<8 x i32> [[ARG:%.*]])
+; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue [[STRUCT_ZOT]] %tmp, 0, 0
+; CHECK-NEXT:    ret void
 ;
 bb:
   %tmp = call %struct.zot @widget(<8 x i32> %arg)

diff  --git a/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll b/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
index 1f62f6465095..2a7d92d3f9b6 100644
--- a/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
+++ b/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
@@ -50,10 +50,11 @@ define internal i16 @bar(i16 %p1, i16 %p2) {
 ; in argument count due to varargs (as long as all non-variadic arguments have
 ; been provided),
 
-define dso_local void @vararg_tests(i16 %a) {
+define dso_local i16 @vararg_tests(i16 %a) {
   %call1 = call i16 (i16, ...) @vararg_prop(i16 7, i16 8, i16 %a)
   %call2 = call i16 bitcast (i16 (i16, i16, ...) * @vararg_no_prop to i16 (i16) *) (i16 7)
-  ret void
+  %add = add i16 %call1, %call2
+  ret i16 %add
 }
 
 define internal i16 @vararg_prop(i16 %p1, ...) {

diff  --git a/llvm/test/Transforms/IPConstantProp/recursion.ll b/llvm/test/Transforms/IPConstantProp/recursion.ll
index b25a6c081811..13aea8fc7b4a 100644
--- a/llvm/test/Transforms/IPConstantProp/recursion.ll
+++ b/llvm/test/Transforms/IPConstantProp/recursion.ll
@@ -1,4 +1,7 @@
-; RUN: opt < %s -ipconstprop -deadargelim -S | not grep %X
+; RUN: opt < %s -ipconstprop -deadargelim -S | FileCheck %s
+
+; CHECK-NOT: %X
+
 define internal i32 @foo(i32 %X) {
         %Y = call i32 @foo( i32 %X )            ; <i32> [#uses=1]
         %Z = add i32 %Y, 1              ; <i32> [#uses=1]

diff  --git a/llvm/test/Transforms/IPConstantProp/return-argument.ll b/llvm/test/Transforms/IPConstantProp/return-argument.ll
index 0290adc4b78d..830a6547b632 100644
--- a/llvm/test/Transforms/IPConstantProp/return-argument.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-argument.ll
@@ -1,6 +1,7 @@
-; RUN: opt < %s -ipconstprop -S > %t
-; RUN: cat %t | grep "store i32 %Z, i32\* %Q"
-; RUN: cat %t | grep "add i32 1, 3"
+; RUN: opt < %s -ipconstprop -S | FileCheck %s
+
+; CHECK: add i32 1, 3
+; CHECK: store i32 %Z, i32* %Q
 
 ;; This function returns its second argument on all return statements
 define internal i32* @incdec(i1 %C, i32* %V) {

diff  --git a/llvm/test/Transforms/IPConstantProp/return-constant.ll b/llvm/test/Transforms/IPConstantProp/return-constant.ll
index 195420d6aad7..155a3011dd66 100644
--- a/llvm/test/Transforms/IPConstantProp/return-constant.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-constant.ll
@@ -1,4 +1,9 @@
-; RUN: opt < %s -ipconstprop -instcombine -S | grep "ret i1 true" | count 2
+; RUN: opt < %s -ipconstprop -instcombine -S | FileCheck %s
+
+; CHECK: ret i1 true
+; CHECK: ret i1 true
+; CHECK-NOT: ret i1 true
+
 define internal i32 @foo(i1 %C) {
         br i1 %C, label %T, label %F
 

diff  --git a/llvm/test/Transforms/IPConstantProp/return-constants.ll b/llvm/test/Transforms/IPConstantProp/return-constants.ll
index be2ca71c55c6..40b97ad04a9d 100644
--- a/llvm/test/Transforms/IPConstantProp/return-constants.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-constants.ll
@@ -1,8 +1,9 @@
-; RUN: opt < %s -ipconstprop -S > %t
+; RUN: opt < %s -ipconstprop -S | FileCheck %s
+
 ;; Check that the 21 constants got propagated properly
-; RUN: cat %t | grep "%M = add i32 21, 21"
+; CHECK: %M = add i32 21, 21
 ;; Check that the second return values didn't get propagated
-; RUN: cat %t | grep "%N = add i32 %B, %D"
+; CHECK: %N = add i32 %B, %D
 
 %0 = type { i32, i32 }
 

diff  --git a/llvm/test/Transforms/IPConstantProp/solve-after-each-resolving-undefs-for-function.ll b/llvm/test/Transforms/IPConstantProp/solve-after-each-resolving-undefs-for-function.ll
index 5e7c323641d3..b7b3e7191b98 100644
--- a/llvm/test/Transforms/IPConstantProp/solve-after-each-resolving-undefs-for-function.ll
+++ b/llvm/test/Transforms/IPConstantProp/solve-after-each-resolving-undefs-for-function.ll
@@ -3,12 +3,15 @@
 ; CHECK-LABEL: @testf(
 ; CHECK:         ret i32 undef
 ;
-define internal i32 @testf() {
+define internal i32 @testf(i1 %c) {
 entry:
+  br i1 %c, label %if.cond, label %if.end
+
+if.cond:
   br i1 undef, label %if.then, label %if.end
 
 if.then:                                          ; preds = %entry, %if.then
-  br label %if.end
+  ret i32 11
 
 if.end:                                          ; preds = %if.then1, %entry
   ret i32 10
@@ -17,12 +20,12 @@ if.end:                                          ; preds = %if.then1, %entry
 ; CHECK-LABEL: @test1(
 ; CHECK:         ret i32 undef
 ;
-define internal i32 @test1() {
+define internal i32 @test1(i1 %c) {
 entry:
   br label %if.then
 
 if.then:                                          ; preds = %entry, %if.then
-  %call = call i32 @testf()
+  %call = call i32 @testf(i1 %c)
   %res = icmp eq i32 %call, 10
   br i1 %res, label %ret1, label %ret2
 
@@ -34,10 +37,10 @@ ret2:                                           ; preds = %if.then, %entry
 }
 
 ; CHECK-LABEL: @main(
-; CHECK-NEXT:    %res = call i32 @test1()
+; CHECK-NEXT:    %res = call i32 @test1(
 ; CHECK-NEXT:    ret i32 99
 ;
-define i32 @main() {
-  %res = call i32 @test1()
+define i32 @main(i1 %c) {
+  %res = call i32 @test1(i1 %c)
   ret i32 %res
 }

diff  --git a/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll b/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
index 6e10d23c145f..0595a5ca7f13 100644
--- a/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
+++ b/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
@@ -1,5 +1,4 @@
 ; RUN: opt -ipconstprop -S < %s | FileCheck %s
-; RUN: opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-disable=false -attributor-max-iterations-verify -attributor-max-iterations=1 < %s | FileCheck %s
 ;
 ;    #include <threads.h>
 ;    thread_local int gtl = 0;

diff  --git a/llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll b/llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll
index 3146709aec62..92e1f3423018 100644
--- a/llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll
+++ b/llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll
@@ -28,6 +28,3 @@ sw.default:
 return:
   ret i32 0
 }
-
-; CHECK: attributes #0 = { noreturn nounwind }
-; CHECK: attributes #1 = { nounwind }


        


More information about the llvm-commits mailing list