Skip to content

Commit 681315d

Browse files
[ConstraintElimination] Introduce tests for PR66173
Introduce test cases for extending unsigned-to-signed transfer logic.
1 parent 782f1a0 commit 681315d

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

llvm/test/Transforms/ConstraintElimination/transfer-unsigned-facts-to-signed.ll

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,108 @@ then:
228228
else:
229229
ret i1 0
230230
}
231+
232+
define i1 @ule_signed_pos_constant_1(i8 %a, i8 %b) {
233+
; CHECK-LABEL: @ule_signed_pos_constant_1(
234+
; CHECK-NEXT: [[B_NON_NEG:%.*]] = icmp sge i8 [[B:%.*]], 0
235+
; CHECK-NEXT: call void @llvm.assume(i1 [[B_NON_NEG]])
236+
; CHECK-NEXT: [[A_ULE_B:%.*]] = icmp ule i8 [[A:%.*]], [[B]]
237+
; CHECK-NEXT: call void @llvm.assume(i1 [[A_ULE_B]])
238+
; CHECK-NEXT: [[SLE_TEST:%.*]] = icmp sle i8 [[A]], [[B]]
239+
; CHECK-NEXT: [[SLT_TEST:%.*]] = icmp slt i8 [[A]], [[B]]
240+
; CHECK-NEXT: [[RESULT_XOR:%.*]] = xor i1 [[SLE_TEST]], [[SLT_TEST]]
241+
; CHECK-NEXT: ret i1 [[RESULT_XOR]]
242+
;
243+
%b_non_neg = icmp sge i8 %b, 0
244+
call void @llvm.assume(i1 %b_non_neg)
245+
%a_ule_b = icmp ule i8 %a, %b
246+
call void @llvm.assume(i1 %a_ule_b)
247+
248+
%sle_test = icmp sle i8 %a, %b
249+
%slt_test = icmp slt i8 %a, %b
250+
%result_xor = xor i1 %sle_test, %slt_test
251+
252+
ret i1 %result_xor
253+
}
254+
255+
define i1 @ule_signed_pos_constant_2(i8 %a) {
256+
; CHECK-LABEL: @ule_signed_pos_constant_2(
257+
; CHECK-NEXT: [[A_ULT_4:%.*]] = icmp ule i8 [[A:%.*]], 4
258+
; CHECK-NEXT: br i1 [[A_ULT_4]], label [[THEN:%.*]], label [[ELSE:%.*]]
259+
; CHECK: then:
260+
; CHECK-NEXT: [[T_0:%.*]] = icmp sge i8 [[A]], 0
261+
; CHECK-NEXT: [[T_1:%.*]] = icmp sle i8 [[A]], 4
262+
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_0]], [[T_1]]
263+
; CHECK-NEXT: [[C_0:%.*]] = icmp sle i8 [[A]], 5
264+
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_0]]
265+
; CHECK-NEXT: ret i1 [[RES_2]]
266+
; CHECK: else:
267+
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[A]], 0
268+
; CHECK-NEXT: [[C_3:%.*]] = icmp sle i8 [[A]], 4
269+
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[C_2]], [[C_3]]
270+
; CHECK-NEXT: [[C_4:%.*]] = icmp sle i8 [[A]], 5
271+
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], [[C_4]]
272+
; CHECK-NEXT: ret i1 [[RES_4]]
273+
;
274+
%a.ult.4 = icmp ule i8 %a, 4
275+
br i1 %a.ult.4, label %then, label %else
276+
277+
then:
278+
%t.0 = icmp sge i8 %a, 0
279+
%t.1 = icmp sle i8 %a, 4
280+
%res.1 = xor i1 %t.0, %t.1
281+
282+
%c.0 = icmp sle i8 %a, 5
283+
%res.2 = xor i1 %res.1, %c.0
284+
ret i1 %res.2
285+
286+
else:
287+
%c.2 = icmp sge i8 %a, 0
288+
%c.3 = icmp sle i8 %a, 4
289+
%res.3 = xor i1 %c.2, %c.3
290+
291+
%c.4 = icmp sle i8 %a, 5
292+
%res.4 = xor i1 %res.3, %c.4
293+
294+
ret i1 %res.4
295+
}
296+
297+
define i1 @uge_assumed_positive_values(i8 %a, i8 %b) {
298+
; CHECK-LABEL: @uge_assumed_positive_values(
299+
; CHECK-NEXT: [[A_NON_NEG:%.*]] = icmp sge i8 [[A:%.*]], 0
300+
; CHECK-NEXT: call void @llvm.assume(i1 [[A_NON_NEG]])
301+
; CHECK-NEXT: [[A_UGT_B:%.*]] = icmp uge i8 [[A]], [[B:%.*]]
302+
; CHECK-NEXT: call void @llvm.assume(i1 [[A_UGT_B]])
303+
; CHECK-NEXT: [[RESULT:%.*]] = icmp sge i8 [[A]], [[B]]
304+
; CHECK-NEXT: ret i1 [[RESULT]]
305+
;
306+
%a_non_neg = icmp sge i8 %a, 0
307+
call void @llvm.assume(i1 %a_non_neg)
308+
%a_ugt_b = icmp uge i8 %a, %b
309+
call void @llvm.assume(i1 %a_ugt_b)
310+
311+
%result = icmp sge i8 %a, %b
312+
313+
ret i1 %result
314+
}
315+
316+
define i1 @ugt_assumed_positive_values(i8 %a, i8 %b) {
317+
; CHECK-LABEL: @ugt_assumed_positive_values(
318+
; CHECK-NEXT: [[A_NON_NEG:%.*]] = icmp sge i8 [[A:%.*]], 0
319+
; CHECK-NEXT: call void @llvm.assume(i1 [[A_NON_NEG]])
320+
; CHECK-NEXT: [[A_UGT_B:%.*]] = icmp ugt i8 [[A]], [[B:%.*]]
321+
; CHECK-NEXT: call void @llvm.assume(i1 [[A_UGT_B]])
322+
; CHECK-NEXT: [[RESULT:%.*]] = icmp sgt i8 [[A]], [[B]]
323+
; CHECK-NEXT: ret i1 [[RESULT]]
324+
;
325+
%a_non_neg = icmp sge i8 %a, 0
326+
call void @llvm.assume(i1 %a_non_neg)
327+
%a_ugt_b = icmp ugt i8 %a, %b
328+
call void @llvm.assume(i1 %a_ugt_b)
329+
330+
%result = icmp sgt i8 %a, %b
331+
332+
ret i1 %result
333+
}
334+
335+
declare void @llvm.assume(i1)

0 commit comments

Comments
 (0)