@@ -31,11 +31,11 @@ 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 (
34
+ define i1 @cmp_sext_dynamic_increment (i32 %a , i32 %b , i64 %c ){
35
+ ; CHECK-LABEL: define i1 @cmp_sext_dynamic_increment (
36
36
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i64 [[C:%.*]]) {
37
37
; CHECK-NEXT: entry:
38
- ; CHECK-NEXT: [[POS:%.*]] = icmp sgt i64 [[C]], 0
38
+ ; CHECK-NEXT: [[POS:%.*]] = icmp slt i64 [[C]], 2
39
39
; CHECK-NEXT: call void @llvm.assume(i1 [[POS]])
40
40
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
41
41
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
@@ -49,7 +49,7 @@ define i1 @cmp_sext_positive_increment(i32 %a, i32 %b, i64 %c){
49
49
; CHECK-NEXT: ret i1 false
50
50
;
51
51
entry:
52
- %pos = icmp sgt i64 %c , 0
52
+ %pos = icmp slt i64 %c , 2
53
53
call void @llvm.assume (i1 %pos )
54
54
%cmp = icmp slt i32 %a , %b
55
55
br i1 %cmp , label %then , label %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:%.*]]) {
71
- ; CHECK-NEXT: entry:
72
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
73
- ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
74
- ; CHECK: then:
75
- ; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A]] to i64
76
- ; 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: ret i1 [[CMP2]]
80
- ; CHECK: else:
81
- ; CHECK-NEXT: ret i1 false
82
- ;
83
- entry:
84
- %cmp = icmp slt i32 %a , %b
85
- br i1 %cmp , label %then , label %else
86
-
87
- then:
88
- %sa = sext i32 %a to i64
89
- %sb = sext i32 %b to i64
90
- %add = add nsw i64 %sa , 1
91
- %cmp2 = icmp sgt i64 %sb , %add
92
- ret i1 %cmp2
93
-
94
- else:
95
- ret i1 false
96
- }
97
-
98
68
define i1 @cmp_zext_nneg (i32 %a , i32 %b ){
99
69
; CHECK-LABEL: define i1 @cmp_zext_nneg(
100
70
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
@@ -216,3 +186,33 @@ then:
216
186
else:
217
187
ret i1 false
218
188
}
189
+
190
+ define i1 @cmp_sext_sgt (i32 %a , i32 %b ){
191
+ ; CHECK-LABEL: define i1 @cmp_sext_sgt(
192
+ ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
193
+ ; CHECK-NEXT: entry:
194
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
195
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
196
+ ; CHECK: then:
197
+ ; CHECK-NEXT: [[SA:%.*]] = sext i32 [[A]] to i64
198
+ ; CHECK-NEXT: [[SB:%.*]] = sext i32 [[B]] to i64
199
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[SA]], 1
200
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i64 [[SB]], [[ADD]]
201
+ ; CHECK-NEXT: ret i1 [[CMP2]]
202
+ ; CHECK: else:
203
+ ; CHECK-NEXT: ret i1 false
204
+ ;
205
+ entry:
206
+ %cmp = icmp slt i32 %a , %b
207
+ br i1 %cmp , label %then , label %else
208
+
209
+ then:
210
+ %sa = sext i32 %a to i64
211
+ %sb = sext i32 %b to i64
212
+ %add = add nsw i64 %sa , 1
213
+ %cmp2 = icmp sgt i64 %sb , %add
214
+ ret i1 %cmp2
215
+
216
+ else:
217
+ ret i1 false
218
+ }
0 commit comments