[Tests] Added InlineCost test when arg is known as dereferenceable
authorDávid Bolvanský <david.bolvansky@gmail.com>
Wed, 5 Apr 2023 21:58:06 +0000 (23:58 +0200)
committerDávid Bolvanský <david.bolvansky@gmail.com>
Wed, 5 Apr 2023 21:58:37 +0000 (23:58 +0200)
llvm/test/Transforms/Inline/nonnull.ll

index 64c4e4d..324afbb 100644 (file)
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
 ; RUN: opt -S -passes=inline %s | FileCheck %s
 ; RUN: opt -S -passes='cgscc(inline)' %s | FileCheck %s
 ; RUN: opt -S -passes='module-inline' %s | FileCheck %s
@@ -6,6 +7,26 @@ declare void @foo()
 declare void @bar()
 
 define void @callee(ptr %arg) {
+; CHECK-LABEL: define void @callee
+; CHECK-SAME: (ptr [[ARG:%.*]]) {
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[ARG]], null
+; CHECK-NEXT:    br i1 [[CMP]], label [[EXPENSIVE:%.*]], label [[DONE:%.*]]
+; CHECK:       expensive:
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    ret void
+; CHECK:       done:
+; CHECK-NEXT:    call void @bar()
+; CHECK-NEXT:    ret void
+;
   %cmp = icmp eq ptr %arg, null
   br i1 %cmp, label %expensive, label %done
 
@@ -31,17 +52,43 @@ done:
 
 ; Positive test - arg is known non null
 define void @caller(ptr nonnull %arg) {
-; CHECK-LABEL: @caller
-; CHECK: call void @bar()
+; CHECK-LABEL: define void @caller
+; CHECK-SAME: (ptr nonnull [[ARG:%.*]]) {
+; CHECK-NEXT:    call void @bar()
+; CHECK-NEXT:    ret void
+;
   call void @callee(ptr nonnull %arg)
   ret void
 }
 
 ; Negative test - arg is not known to be non null
 define void @caller2(ptr %arg) {
-; CHECK-LABEL: @caller2
-; CHECK: call void @callee(
+; CHECK-LABEL: define void @caller2
+; CHECK-SAME: (ptr [[ARG:%.*]]) {
+; CHECK-NEXT:    call void @callee(ptr [[ARG]])
+; CHECK-NEXT:    ret void
+;
   call void @callee(ptr %arg)
   ret void
 }
 
+define void @caller3(ptr dereferenceable(8) %arg) {
+; CHECK-LABEL: define void @caller3
+; CHECK-SAME: (ptr dereferenceable(8) [[ARG:%.*]]) {
+; CHECK-NEXT:    call void @callee(ptr [[ARG]])
+; CHECK-NEXT:    ret void
+;
+  call void @callee(ptr %arg)
+  ret void
+}
+
+define void @caller4(ptr %arg) {
+; CHECK-LABEL: define void @caller4
+; CHECK-SAME: (ptr [[ARG:%.*]]) {
+; CHECK-NEXT:    call void @callee(ptr dereferenceable(8) [[ARG]])
+; CHECK-NEXT:    ret void
+;
+  call void @callee(ptr dereferenceable(8) %arg)
+  ret void
+}
+