@@ -31,64 +31,68 @@ else:
31
31
ret i1 false
32
32
}
33
33
34
- define i1 @cmp_sext_positive_increment (i32 %a , i32 %b , i64 %c ){
35
- ; CHECK-LABEL: define i1 @cmp_sext_positive_increment (
36
- ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i64 [[C:%.*]] ) {
34
+ define i1 @cmp_sext_add (i32 %a , i32 %b ){
35
+ ; CHECK-LABEL: define i1 @cmp_sext_add (
36
+ ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
37
37
; CHECK-NEXT: entry:
38
- ; CHECK-NEXT: [[POS:%.*]] = icmp sgt i64 [[C]], 0
39
- ; CHECK-NEXT: call void @llvm.assume(i1 [[POS]])
40
38
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
41
39
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
42
40
; CHECK: then:
43
- ; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A]] to i64
44
- ; CHECK-NEXT: [[SB:%.*]] = sext i32 [[B]] to i64
45
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], [[C]]
41
+ ; CHECK-NEXT: [[A1:%.*]] = add nsw i32 [[A]], 1
42
+ ; CHECK-NEXT: [[B1:%.*]] = add nsw i32 [[B]], 1
43
+ ; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A1]] to i64
44
+ ; CHECK-NEXT: [[SB:%.*]] = sext i32 [[B1]] to i64
45
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], 1
46
46
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i64 [[SB]], [[ADD]]
47
47
; CHECK-NEXT: ret i1 [[CMP2]]
48
48
; CHECK: else:
49
49
; CHECK-NEXT: ret i1 false
50
50
;
51
51
entry:
52
- %pos = icmp sgt i64 %c , 0
53
- call void @llvm.assume (i1 %pos )
54
52
%cmp = icmp slt i32 %a , %b
55
53
br i1 %cmp , label %then , label %else
56
54
57
55
then:
58
- %sa = sext i32 %a to i64
59
- %sb = sext i32 %b to i64
60
- %add = add nsw i64 %sa , %c
56
+ %a1 = add nsw i32 %a , 1
57
+ %b1 = add nsw i32 %b , 1
58
+ %sa = sext i32 %a1 to i64
59
+ %sb = sext i32 %b1 to i64
60
+ %add = add nsw i64 %sa , 1
61
61
%cmp2 = icmp sge i64 %sb , %add
62
62
ret i1 %cmp2
63
63
64
64
else:
65
65
ret i1 false
66
66
}
67
67
68
- define i1 @cmp_sext_sgt (i32 %a , i32 %b ){
69
- ; CHECK-LABEL: define i1 @cmp_sext_sgt (
70
- ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
68
+ define i1 @cmp_sext_dynamic_increment (i32 %a , i32 %b , i64 %c ){
69
+ ; CHECK-LABEL: define i1 @cmp_sext_dynamic_increment (
70
+ ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i64 [[C:%.*]] ) {
71
71
; CHECK-NEXT: entry:
72
+ ; CHECK-NEXT: [[POS:%.*]] = icmp slt i64 [[C]], 2
73
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[POS]])
72
74
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
73
75
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
74
76
; CHECK: then:
75
77
; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A]] to i64
76
78
; CHECK-NEXT: [[SB:%.*]] = sext i32 [[B]] to i64
77
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], 1
78
- ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[SB]], [[ADD]]
79
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], [[C]]
80
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i64 [[SB]], [[ADD]]
79
81
; CHECK-NEXT: ret i1 [[CMP2]]
80
82
; CHECK: else:
81
83
; CHECK-NEXT: ret i1 false
82
84
;
83
85
entry:
86
+ %pos = icmp slt i64 %c , 2
87
+ call void @llvm.assume (i1 %pos )
84
88
%cmp = icmp slt i32 %a , %b
85
89
br i1 %cmp , label %then , label %else
86
90
87
91
then:
88
92
%sa = sext i32 %a to i64
89
93
%sb = sext i32 %b to i64
90
- %add = add nsw i64 %sa , 1
91
- %cmp2 = icmp sgt i64 %sb , %add
94
+ %add = add nsw i64 %sa , %c
95
+ %cmp2 = icmp sge i64 %sb , %add
92
96
ret i1 %cmp2
93
97
94
98
else:
@@ -216,3 +220,33 @@ then:
216
220
else:
217
221
ret i1 false
218
222
}
223
+
224
+ define i1 @cmp_sext_sgt (i32 %a , i32 %b ){
225
+ ; CHECK-LABEL: define i1 @cmp_sext_sgt(
226
+ ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
227
+ ; CHECK-NEXT: entry:
228
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
229
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
230
+ ; CHECK: then:
231
+ ; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A]] to i64
232
+ ; CHECK-NEXT: [[SB:%.*]] = sext i32 [[B]] to i64
233
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], 1
234
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[SB]], [[ADD]]
235
+ ; CHECK-NEXT: ret i1 [[CMP2]]
236
+ ; CHECK: else:
237
+ ; CHECK-NEXT: ret i1 false
238
+ ;
239
+ entry:
240
+ %cmp = icmp slt i32 %a , %b
241
+ br i1 %cmp , label %then , label %else
242
+
243
+ then:
244
+ %sa = sext i32 %a to i64
245
+ %sb = sext i32 %b to i64
246
+ %add = add nsw i64 %sa , 1
247
+ %cmp2 = icmp sgt i64 %sb , %add
248
+ ret i1 %cmp2
249
+
250
+ else:
251
+ ret i1 false
252
+ }
0 commit comments