[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