Skip to content

Commit b8c0e8a

Browse files
committed
[IPSCCP] Add extra tests for interprocedural arg attr handling (NFC)
1 parent fc39cc1 commit b8c0e8a

File tree

2 files changed

+77
-2
lines changed

2 files changed

+77
-2
lines changed

llvm/test/Transforms/SCCP/pointer-nonnull.ll

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2-
; RUN: opt -S -passes=sccp < %s | FileCheck %s
2+
; RUN: opt -S -passes=sccp < %s | FileCheck %s --check-prefixes=CHECK,SCCP
3+
; RUN: opt -S -passes=ipsccp < %s | FileCheck %s --check-prefixes=CHECK,IPSCCP
34

45
declare ptr @get()
56

@@ -201,6 +202,33 @@ join:
201202
%cmp = icmp ne ptr %phi, null
202203
ret i1 %cmp
203204
}
205+
206+
define internal i1 @ip_test_nonnull_callee(ptr nonnull %p) {
207+
; SCCP-LABEL: define internal i1 @ip_test_nonnull_callee(
208+
; SCCP-SAME: ptr nonnull [[P:%.*]]) {
209+
; SCCP-NEXT: ret i1 true
210+
;
211+
; IPSCCP-LABEL: define internal i1 @ip_test_nonnull_callee(
212+
; IPSCCP-SAME: ptr nonnull [[P:%.*]]) {
213+
; IPSCCP-NEXT: [[CMP:%.*]] = icmp ne ptr [[P]], null
214+
; IPSCCP-NEXT: ret i1 [[CMP]]
215+
;
216+
%cmp = icmp ne ptr %p, null
217+
ret i1 %cmp
218+
}
219+
220+
define i1 @ip_test_nonnull_caller(ptr %p) {
221+
; CHECK-LABEL: define i1 @ip_test_nonnull_caller(
222+
; CHECK-SAME: ptr [[P:%.*]]) {
223+
; CHECK-NEXT: [[RES:%.*]] = call i1 @ip_test_nonnull_callee(ptr [[P]])
224+
; CHECK-NEXT: ret i1 [[RES]]
225+
;
226+
%res = call i1 @ip_test_nonnull_callee(ptr %p)
227+
ret i1 %res
228+
}
229+
230+
;.
231+
; SCCP: [[META0]] = !{}
204232
;.
205-
; CHECK: [[META0]] = !{}
233+
; IPSCCP: [[META0]] = !{}
206234
;.

llvm/test/Transforms/SCCP/range-attribute.ll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,50 @@ define i1 @ip_range_attribute_constant() {
190190
%c = call i1 @ip_cmp_with_range_attribute(i32 5)
191191
ret i1 %c
192192
}
193+
194+
define internal i1 @ip_cmp_attribute_overdefined_callee(i32 range(i32 0, 10) %x) {
195+
; IPSCCP-LABEL: @ip_cmp_attribute_overdefined_callee(
196+
; IPSCCP-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], 10
197+
; IPSCCP-NEXT: ret i1 [[CMP]]
198+
;
199+
; SCCP-LABEL: @ip_cmp_attribute_overdefined_callee(
200+
; SCCP-NEXT: ret i1 true
201+
;
202+
%cmp = icmp ult i32 %x, 10
203+
ret i1 %cmp
204+
}
205+
206+
define i1 @ip_cmp_attribute_overdefined_caller(i32 %x) {
207+
; CHECK-LABEL: @ip_cmp_attribute_overdefined_caller(
208+
; CHECK-NEXT: [[RES:%.*]] = call i1 @ip_cmp_attribute_overdefined_callee(i32 [[X:%.*]])
209+
; CHECK-NEXT: ret i1 [[RES]]
210+
;
211+
%res = call i1 @ip_cmp_attribute_overdefined_callee(i32 %x)
212+
ret i1 %res
213+
}
214+
215+
define internal i1 @ip_cmp_attribute_intersect_callee(i32 range(i32 0, 10) %x) {
216+
; IPSCCP-LABEL: @ip_cmp_attribute_intersect_callee(
217+
; IPSCCP-NEXT: [[CMP1:%.*]] = icmp ult i32 [[X:%.*]], 10
218+
; IPSCCP-NEXT: [[AND:%.*]] = and i1 [[CMP1]], true
219+
; IPSCCP-NEXT: ret i1 [[AND]]
220+
;
221+
; SCCP-LABEL: @ip_cmp_attribute_intersect_callee(
222+
; SCCP-NEXT: [[CMP2:%.*]] = icmp uge i32 [[X:%.*]], 5
223+
; SCCP-NEXT: [[AND:%.*]] = and i1 true, [[CMP2]]
224+
; SCCP-NEXT: ret i1 [[AND]]
225+
;
226+
%cmp1 = icmp ult i32 %x, 10
227+
%cmp2 = icmp uge i32 %x, 5
228+
%and = and i1 %cmp1, %cmp2
229+
ret i1 %and
230+
}
231+
232+
define i1 @ip_cmp_attribute_intersect_caller(i32 range(i32 5, 15) %x) {
233+
; CHECK-LABEL: @ip_cmp_attribute_intersect_caller(
234+
; CHECK-NEXT: [[RES:%.*]] = call i1 @ip_cmp_attribute_intersect_callee(i32 [[X:%.*]])
235+
; CHECK-NEXT: ret i1 [[RES]]
236+
;
237+
%res = call i1 @ip_cmp_attribute_intersect_callee(i32 %x)
238+
ret i1 %res
239+
}

0 commit comments

Comments
 (0)