Skip to content

Commit fd691fc

Browse files
committed
[InstCombine] Add tests for icmp eq/ne ({su}div exact X, Y), C; NFC
Differential Revision: https://reviews.llvm.org/D150090
1 parent a01d183 commit fd691fc

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
declare void @use.i8(i8)
5+
define i1 @sdiv_exact_eq_0(i8 %x, i8 %y) {
6+
; CHECK-LABEL: @sdiv_exact_eq_0(
7+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
8+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 0
9+
; CHECK-NEXT: ret i1 [[R]]
10+
;
11+
%d = sdiv exact i8 %x, %y
12+
%r = icmp eq i8 %d, 0
13+
ret i1 %r
14+
}
15+
16+
define i1 @udiv_exact_ne_0(i8 %x, i8 %y) {
17+
; CHECK-LABEL: @udiv_exact_ne_0(
18+
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
19+
; CHECK-NEXT: ret i1 [[R]]
20+
;
21+
%d = udiv exact i8 %x, %y
22+
%r = icmp ne i8 %d, 0
23+
ret i1 %r
24+
}
25+
26+
define i1 @sdiv_exact_ne_1(i8 %x, i8 %y) {
27+
; CHECK-LABEL: @sdiv_exact_ne_1(
28+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
29+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 0
30+
; CHECK-NEXT: ret i1 [[R]]
31+
;
32+
%d = sdiv exact i8 %x, %y
33+
%r = icmp eq i8 %d, 0
34+
ret i1 %r
35+
}
36+
37+
define i1 @udiv_exact_eq_1(i8 %x, i8 %y) {
38+
; CHECK-LABEL: @udiv_exact_eq_1(
39+
; CHECK-NEXT: [[D:%.*]] = udiv exact i8 [[X:%.*]], [[Y:%.*]]
40+
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[D]], 1
41+
; CHECK-NEXT: ret i1 [[R]]
42+
;
43+
%d = udiv exact i8 %x, %y
44+
%r = icmp ne i8 %d, 1
45+
ret i1 %r
46+
}
47+
48+
define i1 @sdiv_exact_eq_9_no_of(i8 %x, i8 %y) {
49+
; CHECK-LABEL: @sdiv_exact_eq_9_no_of(
50+
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
51+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
52+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
53+
; CHECK-NEXT: ret i1 [[R]]
54+
;
55+
%yy = and i8 %y, 7
56+
%d = sdiv exact i8 %x, %yy
57+
%r = icmp eq i8 %d, 9
58+
ret i1 %r
59+
}
60+
61+
define i1 @sdiv_exact_eq_9_may_of(i8 %x, i8 %y) {
62+
; CHECK-LABEL: @sdiv_exact_eq_9_may_of(
63+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
64+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
65+
; CHECK-NEXT: ret i1 [[R]]
66+
;
67+
%d = sdiv exact i8 %x, %y
68+
%r = icmp eq i8 %d, 9
69+
ret i1 %r
70+
}
71+
72+
define i1 @sdiv_exact_eq_9_no_of_fail_multiuse(i8 %x, i8 %y) {
73+
; CHECK-LABEL: @sdiv_exact_eq_9_no_of_fail_multiuse(
74+
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
75+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
76+
; CHECK-NEXT: call void @use.i8(i8 [[D]])
77+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
78+
; CHECK-NEXT: ret i1 [[R]]
79+
;
80+
%yy = and i8 %y, 7
81+
%d = sdiv exact i8 %x, %yy
82+
call void @use.i8(i8 %d)
83+
%r = icmp eq i8 %d, 9
84+
ret i1 %r
85+
}
86+
87+
define i1 @sdiv_exact_eq_9_must_of_todo_is_false(i8 %x, i8 %y) {
88+
; CHECK-LABEL: @sdiv_exact_eq_9_must_of_todo_is_false(
89+
; CHECK-NEXT: [[YY:%.*]] = or i8 [[Y:%.*]], 55
90+
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
91+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
92+
; CHECK-NEXT: ret i1 [[R]]
93+
;
94+
%yy = or i8 %y, 55
95+
%d = sdiv exact i8 %x, %yy
96+
%r = icmp eq i8 %d, 9
97+
ret i1 %r
98+
}
99+
100+
define i1 @udiv_exact_ne_30_no_of(i8 %x, i8 %y) {
101+
; CHECK-LABEL: @udiv_exact_ne_30_no_of(
102+
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
103+
; CHECK-NEXT: [[D:%.*]] = udiv exact i8 [[X:%.*]], [[YY]]
104+
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[D]], 30
105+
; CHECK-NEXT: ret i1 [[R]]
106+
;
107+
%yy = and i8 %y, 7
108+
%d = udiv exact i8 %x, %yy
109+
%r = icmp ne i8 %d, 30
110+
ret i1 %r
111+
}

0 commit comments

Comments
 (0)