[llvm] b8c0e8a - [IPSCCP] Add extra tests for interprocedural arg attr handling (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 28 06:55:25 PDT 2024


Author: Nikita Popov
Date: 2024-08-28T15:55:14+02:00
New Revision: b8c0e8ad10a8b585b47662003042054bcdc29e76

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

LOG: [IPSCCP] Add extra tests for interprocedural arg attr handling (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/SCCP/pointer-nonnull.ll
    llvm/test/Transforms/SCCP/range-attribute.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SCCP/pointer-nonnull.ll b/llvm/test/Transforms/SCCP/pointer-nonnull.ll
index cd04c1c2d39d9b..d035df399b77be 100644
--- a/llvm/test/Transforms/SCCP/pointer-nonnull.ll
+++ b/llvm/test/Transforms/SCCP/pointer-nonnull.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
-; RUN: opt -S -passes=sccp < %s | FileCheck %s
+; RUN: opt -S -passes=sccp < %s | FileCheck %s --check-prefixes=CHECK,SCCP
+; RUN: opt -S -passes=ipsccp < %s | FileCheck %s --check-prefixes=CHECK,IPSCCP
 
 declare ptr @get()
 
@@ -201,6 +202,33 @@ join:
   %cmp = icmp ne ptr %phi, null
   ret i1 %cmp
 }
+
+define internal i1 @ip_test_nonnull_callee(ptr nonnull %p) {
+; SCCP-LABEL: define internal i1 @ip_test_nonnull_callee(
+; SCCP-SAME: ptr nonnull [[P:%.*]]) {
+; SCCP-NEXT:    ret i1 true
+;
+; IPSCCP-LABEL: define internal i1 @ip_test_nonnull_callee(
+; IPSCCP-SAME: ptr nonnull [[P:%.*]]) {
+; IPSCCP-NEXT:    [[CMP:%.*]] = icmp ne ptr [[P]], null
+; IPSCCP-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = icmp ne ptr %p, null
+  ret i1 %cmp
+}
+
+define i1 @ip_test_nonnull_caller(ptr %p) {
+; CHECK-LABEL: define i1 @ip_test_nonnull_caller(
+; CHECK-SAME: ptr [[P:%.*]]) {
+; CHECK-NEXT:    [[RES:%.*]] = call i1 @ip_test_nonnull_callee(ptr [[P]])
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+  %res = call i1 @ip_test_nonnull_callee(ptr %p)
+  ret i1 %res
+}
+
+;.
+; SCCP: [[META0]] = !{}
 ;.
-; CHECK: [[META0]] = !{}
+; IPSCCP: [[META0]] = !{}
 ;.

diff  --git a/llvm/test/Transforms/SCCP/range-attribute.ll b/llvm/test/Transforms/SCCP/range-attribute.ll
index 8b156e6f483ed4..c55eb03a5c8158 100644
--- a/llvm/test/Transforms/SCCP/range-attribute.ll
+++ b/llvm/test/Transforms/SCCP/range-attribute.ll
@@ -190,3 +190,50 @@ define i1 @ip_range_attribute_constant() {
   %c = call i1 @ip_cmp_with_range_attribute(i32 5)
   ret i1 %c
 }
+
+define internal i1 @ip_cmp_attribute_overdefined_callee(i32 range(i32 0, 10) %x) {
+; IPSCCP-LABEL: @ip_cmp_attribute_overdefined_callee(
+; IPSCCP-NEXT:    [[CMP:%.*]] = icmp ult i32 [[X:%.*]], 10
+; IPSCCP-NEXT:    ret i1 [[CMP]]
+;
+; SCCP-LABEL: @ip_cmp_attribute_overdefined_callee(
+; SCCP-NEXT:    ret i1 true
+;
+  %cmp = icmp ult i32 %x, 10
+  ret i1 %cmp
+}
+
+define i1 @ip_cmp_attribute_overdefined_caller(i32 %x) {
+; CHECK-LABEL: @ip_cmp_attribute_overdefined_caller(
+; CHECK-NEXT:    [[RES:%.*]] = call i1 @ip_cmp_attribute_overdefined_callee(i32 [[X:%.*]])
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+  %res = call i1 @ip_cmp_attribute_overdefined_callee(i32 %x)
+  ret i1 %res
+}
+
+define internal i1 @ip_cmp_attribute_intersect_callee(i32 range(i32 0, 10) %x) {
+; IPSCCP-LABEL: @ip_cmp_attribute_intersect_callee(
+; IPSCCP-NEXT:    [[CMP1:%.*]] = icmp ult i32 [[X:%.*]], 10
+; IPSCCP-NEXT:    [[AND:%.*]] = and i1 [[CMP1]], true
+; IPSCCP-NEXT:    ret i1 [[AND]]
+;
+; SCCP-LABEL: @ip_cmp_attribute_intersect_callee(
+; SCCP-NEXT:    [[CMP2:%.*]] = icmp uge i32 [[X:%.*]], 5
+; SCCP-NEXT:    [[AND:%.*]] = and i1 true, [[CMP2]]
+; SCCP-NEXT:    ret i1 [[AND]]
+;
+  %cmp1 = icmp ult i32 %x, 10
+  %cmp2 = icmp uge i32 %x, 5
+  %and = and i1 %cmp1, %cmp2
+  ret i1 %and
+}
+
+define i1 @ip_cmp_attribute_intersect_caller(i32 range(i32 5, 15) %x) {
+; CHECK-LABEL: @ip_cmp_attribute_intersect_caller(
+; CHECK-NEXT:    [[RES:%.*]] = call i1 @ip_cmp_attribute_intersect_callee(i32 [[X:%.*]])
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+  %res = call i1 @ip_cmp_attribute_intersect_callee(i32 %x)
+  ret i1 %res
+}


        


More information about the llvm-commits mailing list