[llvm] d527ace - [GVN] Regenerate test checks (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 3 07:05:12 PDT 2023


Author: Nikita Popov
Date: 2023-04-03T16:05:02+02:00
New Revision: d527ace7d92b3bbbbe0e74f871d94ca43af58df2

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

LOG: [GVN] Regenerate test checks (NFC)

And add an additional metadata preservation test.

Added: 
    

Modified: 
    llvm/test/Transforms/GVN/PRE/invariant-load.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/GVN/PRE/invariant-load.ll b/llvm/test/Transforms/GVN/PRE/invariant-load.ll
index 686c40d0c6b83..3d0102629e621 100644
--- a/llvm/test/Transforms/GVN/PRE/invariant-load.ll
+++ b/llvm/test/Transforms/GVN/PRE/invariant-load.ll
@@ -1,10 +1,17 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
 ; Test if the !invariant.load metadata is maintained by GVN.
 ; RUN: opt -passes=gvn -S < %s | FileCheck %s
 
 define i32 @test1(ptr nocapture %p, ptr nocapture %q) {
-; CHECK-LABEL: test1
-; CHECK: %x = load i32, ptr %p, align 4, !invariant.load !0
-; CHECK-NOT: %y = load
+; CHECK-LABEL: define i32 @test1
+; CHECK-SAME: (ptr nocapture [[P:%.*]], ptr nocapture [[Q:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P]], align 4, !invariant.load !0
+; CHECK-NEXT:    [[CONV:%.*]] = trunc i32 [[X]] to i8
+; CHECK-NEXT:    store i8 [[CONV]], ptr [[Q]], align 1
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[X]], 1
+; CHECK-NEXT:    ret i32 [[ADD]]
+;
 entry:
   %x = load i32, ptr %p, align 4, !invariant.load !0
   %conv = trunc i32 %x to i8
@@ -15,9 +22,15 @@ entry:
 }
 
 define i32 @test2(ptr nocapture %p, ptr nocapture %q) {
-; CHECK-LABEL: test2
-; CHECK-NOT: !invariant.load
-; CHECK-NOT: %y = load
+; CHECK-LABEL: define i32 @test2
+; CHECK-SAME: (ptr nocapture [[P:%.*]], ptr nocapture [[Q:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P]], align 4
+; CHECK-NEXT:    [[CONV:%.*]] = trunc i32 [[X]] to i8
+; CHECK-NEXT:    store i8 [[CONV]], ptr [[Q]], align 1
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[X]], 1
+; CHECK-NEXT:    ret i32 [[ADD]]
+;
 entry:
   %x = load i32, ptr %p, align 4
   %conv = trunc i32 %x to i8
@@ -30,8 +43,16 @@ entry:
 ; With the invariant.load metadata, what would otherwise
 ; be a case for PRE becomes a full redundancy.
 define i32 @test3(i1 %cnd, ptr %p, ptr %q) {
-; CHECK-LABEL: test3
-; CHECK-NOT: load
+; CHECK-LABEL: define i32 @test3
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br i1 [[CND]], label [[BB1:%.*]], label [[BB2:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    store i32 5, ptr [[Q]], align 4
+; CHECK-NEXT:    br label [[BB2]]
+; CHECK:       bb2:
+; CHECK-NEXT:    ret i32 0
+;
 entry:
   %v1 = load i32, ptr %p
   br i1 %cnd, label %bb1, label %bb2
@@ -47,9 +68,22 @@ bb2:
 }
 
 ; This test is here to document a case which doesn't optimize
-; as well as it could.  
+; as well as it could.
 define i32 @test4(i1 %cnd, ptr %p, ptr %q) {
-; CHECK-LABEL: test4
+; CHECK-LABEL: define i32 @test4
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load !0
+; CHECK-NEXT:    br i1 [[CND]], label [[BB1:%.*]], label [[BB2:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    store i32 5, ptr [[Q]], align 4
+; CHECK-NEXT:    [[V2_PRE:%.*]] = load i32, ptr [[P]], align 4
+; CHECK-NEXT:    br label [[BB2]]
+; CHECK:       bb2:
+; CHECK-NEXT:    [[V2:%.*]] = phi i32 [ [[V2_PRE]], [[BB1]] ], [ [[V1]], [[ENTRY:%.*]] ]
+; CHECK-NEXT:    [[RES:%.*]] = sub i32 [[V1]], [[V2]]
+; CHECK-NEXT:    ret i32 [[RES]]
+;
 ; %v2 is redundant, but GVN currently doesn't catch that
 entry:
   %v1 = load i32, ptr %p, !invariant.load !0
@@ -69,10 +103,12 @@ bb2:
 ; so that it contributes to value forwarding.  Note
 ; that we could and should remove the store too.
 define i32 @test5(i1 %cnd, ptr %p) {
-; CHECK-LABEL: test5
-; CHECK-LABEL: entry:
-; CHECK-NEXT: store i32 5, ptr %p
-; CHECK-NEXT: ret i32 5
+; CHECK-LABEL: define i32 @test5
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    store i32 5, ptr [[P]], align 4
+; CHECK-NEXT:    ret i32 5
+;
 entry:
   %v1 = load i32, ptr %p, !invariant.load !0
   store i32 5, ptr %p ;; must alias store, want to exploit
@@ -85,10 +121,12 @@ declare void @foo()
 
 ; Clobbering (mayalias) stores, even in function calls, can be ignored
 define i32 @test6(i1 %cnd, ptr %p) {
-; CHECK-LABEL: test6
-; CHECK-LABEL: entry:
-; CHECK-NEXT: @foo
-; CHECK-NEXT: ret i32 0
+; CHECK-LABEL: define i32 @test6
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    ret i32 0
+;
 entry:
   %v1 = load i32, ptr %p, !invariant.load !0
   call void @foo()
@@ -97,15 +135,17 @@ entry:
   ret i32 %res
 }
 
-declare noalias ptr @bar(...) 
+declare noalias ptr @bar(...)
 
 ; Same as previous, but a function with a noalias result (since they're handled
 ; 
diff erently in MDA)
 define i32 @test7(i1 %cnd, ptr %p) {
-; CHECK-LABEL: test7
-; CHECK-LABEL: entry:
-; CHECK-NEXT: @bar
-; CHECK-NEXT: ret i32 0
+; CHECK-LABEL: define i32 @test7
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TMP0:%.*]] = call ptr (...) @bar(ptr [[P]])
+; CHECK-NEXT:    ret i32 0
+;
 entry:
   %v1 = load i32, ptr %p, !invariant.load !0
   call ptr (...) @bar(ptr %p)
@@ -115,10 +155,21 @@ entry:
 }
 
 define i32 @test8(i1 %cnd, ptr %p) {
-; CHECK-LABEL: test8
-; CHECK: @bar
-; CHECK: load i32, ptr %p2, align 4, !invariant.load
-; CHECK: br label %merge
+; CHECK-LABEL: define i32 @test8
+; CHECK-SAME: (i1 [[CND:%.*]], ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[V1:%.*]] = load i32, ptr [[P]], align 4, !invariant.load !0
+; CHECK-NEXT:    br i1 [[CND]], label [[TAKEN:%.*]], label [[MERGE:%.*]]
+; CHECK:       taken:
+; CHECK-NEXT:    [[P2:%.*]] = call ptr (...) @bar(ptr [[P]])
+; CHECK-NEXT:    [[V2_PRE:%.*]] = load i32, ptr [[P2]], align 4, !invariant.load !0
+; CHECK-NEXT:    br label [[MERGE]]
+; CHECK:       merge:
+; CHECK-NEXT:    [[V2:%.*]] = phi i32 [ [[V1]], [[ENTRY:%.*]] ], [ [[V2_PRE]], [[TAKEN]] ]
+; CHECK-NEXT:    [[P3:%.*]] = phi ptr [ [[P]], [[ENTRY]] ], [ [[P2]], [[TAKEN]] ]
+; CHECK-NEXT:    [[RES:%.*]] = sub i32 [[V1]], [[V2]]
+; CHECK-NEXT:    ret i32 [[RES]]
+;
 entry:
   %v1 = load i32, ptr %p, !invariant.load !0
   br i1 %cnd, label %taken, label %merge
@@ -132,5 +183,20 @@ merge:
   ret i32 %res
 }
 
+define i32 @metadata_preservation(ptr nocapture %p, ptr nocapture %q) {
+; CHECK-LABEL: define i32 @metadata_preservation
+; CHECK-SAME: (ptr nocapture [[P:%.*]], ptr nocapture [[Q:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P]], align 4
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[X]], [[X]]
+; CHECK-NEXT:    ret i32 [[ADD]]
+;
+entry:
+  %x = load i32, ptr %p, align 4, !invariant.load !0
+  %y = load i32, ptr %p, align 4
+  %add = add i32 %x, %y
+  ret i32 %add
+}
+
 !0 = !{ }
 


        


More information about the llvm-commits mailing list