Skip to content

Commit 778230b

Browse files
committed
VT/test: add no-nsw-nuw variants of incr tests
1 parent fc6aa3d commit 778230b

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,22 @@ define i1 @incr_sle(i32 %i, i32 %len) {
1717
ret i1 %res
1818
}
1919

20+
define i1 @incr_sle_no_nsw_nuw(i32 %i, i32 %len) {
21+
; CHECK-LABEL: define i1 @incr_sle_no_nsw_nuw(
22+
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
23+
; CHECK-NEXT: [[I_INCR:%.*]] = add i32 [[I]], 1
24+
; CHECK-NEXT: [[I_GT_LEN:%.*]] = icmp samesign ugt i32 [[I]], [[LEN]]
25+
; CHECK-NEXT: [[I_INCR_SGT_LEN:%.*]] = icmp sgt i32 [[I_INCR]], [[LEN]]
26+
; CHECK-NEXT: [[RES:%.*]] = icmp sle i1 [[I_INCR_SGT_LEN]], [[I_GT_LEN]]
27+
; CHECK-NEXT: ret i1 [[RES]]
28+
;
29+
%i.incr = add i32 %i, 1
30+
%i.gt.len = icmp samesign ugt i32 %i, %len
31+
%i.incr.sgt.len = icmp sgt i32 %i.incr, %len
32+
%res = icmp sle i1 %i.incr.sgt.len, %i.gt.len
33+
ret i1 %res
34+
}
35+
2036
define i1 @incr_sge(i32 %i, i32 %len) {
2137
; CHECK-LABEL: define i1 @incr_sge(
2238
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
@@ -33,6 +49,22 @@ define i1 @incr_sge(i32 %i, i32 %len) {
3349
ret i1 %res
3450
}
3551

52+
define i1 @incr_sge_no_nsw_nuw(i32 %i, i32 %len) {
53+
; CHECK-LABEL: define i1 @incr_sge_no_nsw_nuw(
54+
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
55+
; CHECK-NEXT: [[I_INCR:%.*]] = add i32 [[I]], 1
56+
; CHECK-NEXT: [[I_LT_LEN:%.*]] = icmp samesign ult i32 [[I]], [[LEN]]
57+
; CHECK-NEXT: [[I_INCR_SLT_LEN:%.*]] = icmp slt i32 [[I_INCR]], [[LEN]]
58+
; CHECK-NEXT: [[RES:%.*]] = icmp sge i1 [[I_INCR_SLT_LEN]], [[I_LT_LEN]]
59+
; CHECK-NEXT: ret i1 [[RES]]
60+
;
61+
%i.incr = add i32 %i, 1
62+
%i.lt.len = icmp samesign ult i32 %i, %len
63+
%i.incr.slt.len = icmp slt i32 %i.incr, %len
64+
%res = icmp sge i1 %i.incr.slt.len, %i.lt.len
65+
ret i1 %res
66+
}
67+
3668
define i1 @incr_ule(i32 %i, i32 %len) {
3769
; CHECK-LABEL: define i1 @incr_ule(
3870
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
@@ -49,6 +81,22 @@ define i1 @incr_ule(i32 %i, i32 %len) {
4981
ret i1 %res
5082
}
5183

84+
define i1 @incr_ule_no_nsw_nuw(i32 %i, i32 %len) {
85+
; CHECK-LABEL: define i1 @incr_ule_no_nsw_nuw(
86+
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
87+
; CHECK-NEXT: [[I_INCR:%.*]] = add i32 [[I]], 1
88+
; CHECK-NEXT: [[I_GT_LEN:%.*]] = icmp samesign ugt i32 [[I]], [[LEN]]
89+
; CHECK-NEXT: [[I_INCR_SGT_LEN:%.*]] = icmp sgt i32 [[I_INCR]], [[LEN]]
90+
; CHECK-NEXT: [[RES:%.*]] = icmp ule i1 [[I_GT_LEN]], [[I_INCR_SGT_LEN]]
91+
; CHECK-NEXT: ret i1 [[RES]]
92+
;
93+
%i.incr = add i32 %i, 1
94+
%i.gt.len = icmp samesign ugt i32 %i, %len
95+
%i.incr.sgt.len = icmp sgt i32 %i.incr, %len
96+
%res = icmp ule i1 %i.gt.len, %i.incr.sgt.len
97+
ret i1 %res
98+
}
99+
52100
define i1 @incr_uge(i32 %i, i32 %len) {
53101
; CHECK-LABEL: define i1 @incr_uge(
54102
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
@@ -65,6 +113,22 @@ define i1 @incr_uge(i32 %i, i32 %len) {
65113
ret i1 %res
66114
}
67115

116+
define i1 @incr_uge_no_nsw_nuw(i32 %i, i32 %len) {
117+
; CHECK-LABEL: define i1 @incr_uge_no_nsw_nuw(
118+
; CHECK-SAME: i32 [[I:%.*]], i32 [[LEN:%.*]]) {
119+
; CHECK-NEXT: [[I_INCR:%.*]] = add i32 [[I]], 1
120+
; CHECK-NEXT: [[I_LT_LEN:%.*]] = icmp samesign ult i32 [[I]], [[LEN]]
121+
; CHECK-NEXT: [[I_INCR_SLT_LEN:%.*]] = icmp slt i32 [[I_INCR]], [[LEN]]
122+
; CHECK-NEXT: [[RES:%.*]] = icmp uge i1 [[I_LT_LEN]], [[I_INCR_SLT_LEN]]
123+
; CHECK-NEXT: ret i1 [[RES]]
124+
;
125+
%i.incr = add i32 %i, 1
126+
%i.lt.len = icmp samesign ult i32 %i, %len
127+
%i.incr.slt.len = icmp slt i32 %i.incr, %len
128+
%res = icmp uge i1 %i.lt.len, %i.incr.slt.len
129+
ret i1 %res
130+
}
131+
68132
define i1 @sgt_implies_ge_via_assume(i32 %i, i32 %j) {
69133
; CHECK-LABEL: define i1 @sgt_implies_ge_via_assume(
70134
; CHECK-SAME: i32 [[I:%.*]], i32 [[J:%.*]]) {

0 commit comments

Comments
 (0)