xref: /llvm-project/llvm/test/Transforms/InstSimplify/cmp_ext.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
1359345d6SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3359345d6SNikita Popov
4359345d6SNikita Popovdefine i1 @zext_uge_sext(i32 %x) {
5359345d6SNikita Popov; CHECK-LABEL: @zext_uge_sext(
6359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
7359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
8359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i64 [[ZEXT]], [[SEXT]]
9359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
10359345d6SNikita Popov;
11359345d6SNikita Popov  %sext = sext i32 %x to i64
12359345d6SNikita Popov  %zext = zext i32 %x to i64
13359345d6SNikita Popov  %cmp = icmp uge i64 %zext, %sext
14359345d6SNikita Popov  ret i1 %cmp
15359345d6SNikita Popov}
16359345d6SNikita Popov
17359345d6SNikita Popovdefine i1 @zext_ugt_sext(i32 %x) {
18359345d6SNikita Popov; CHECK-LABEL: @zext_ugt_sext(
193b671022SNikita Popov; CHECK-NEXT:    ret i1 false
20359345d6SNikita Popov;
21359345d6SNikita Popov  %sext = sext i32 %x to i64
22359345d6SNikita Popov  %zext = zext i32 %x to i64
23359345d6SNikita Popov  %cmp = icmp ugt i64 %zext, %sext
24359345d6SNikita Popov  ret i1 %cmp
25359345d6SNikita Popov}
26359345d6SNikita Popov
27359345d6SNikita Popovdefine i1 @zext_ult_sext(i32 %x) {
28359345d6SNikita Popov; CHECK-LABEL: @zext_ult_sext(
29359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
30359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
31359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[ZEXT]], [[SEXT]]
32359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
33359345d6SNikita Popov;
34359345d6SNikita Popov  %sext = sext i32 %x to i64
35359345d6SNikita Popov  %zext = zext i32 %x to i64
36359345d6SNikita Popov  %cmp = icmp ult i64 %zext, %sext
37359345d6SNikita Popov  ret i1 %cmp
38359345d6SNikita Popov}
39359345d6SNikita Popov
40359345d6SNikita Popovdefine i1 @zext_ule_sext(i32 %x) {
41359345d6SNikita Popov; CHECK-LABEL: @zext_ule_sext(
423b671022SNikita Popov; CHECK-NEXT:    ret i1 true
43359345d6SNikita Popov;
44359345d6SNikita Popov  %sext = sext i32 %x to i64
45359345d6SNikita Popov  %zext = zext i32 %x to i64
46359345d6SNikita Popov  %cmp = icmp ule i64 %zext, %sext
47359345d6SNikita Popov  ret i1 %cmp
48359345d6SNikita Popov}
49359345d6SNikita Popov
50359345d6SNikita Popovdefine i1 @zext_sge_sext(i32 %x) {
51359345d6SNikita Popov; CHECK-LABEL: @zext_sge_sext(
523b671022SNikita Popov; CHECK-NEXT:    ret i1 true
53359345d6SNikita Popov;
54359345d6SNikita Popov  %sext = sext i32 %x to i64
55359345d6SNikita Popov  %zext = zext i32 %x to i64
56359345d6SNikita Popov  %cmp = icmp sge i64 %zext, %sext
57359345d6SNikita Popov  ret i1 %cmp
58359345d6SNikita Popov}
59359345d6SNikita Popov
60359345d6SNikita Popovdefine i1 @zext_sgt_sext(i32 %x) {
61359345d6SNikita Popov; CHECK-LABEL: @zext_sgt_sext(
62359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
63359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
64359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i64 [[ZEXT]], [[SEXT]]
65359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
66359345d6SNikita Popov;
67359345d6SNikita Popov  %sext = sext i32 %x to i64
68359345d6SNikita Popov  %zext = zext i32 %x to i64
69359345d6SNikita Popov  %cmp = icmp sgt i64 %zext, %sext
70359345d6SNikita Popov  ret i1 %cmp
71359345d6SNikita Popov}
72359345d6SNikita Popov
73359345d6SNikita Popovdefine i1 @zext_slt_sext(i32 %x) {
74359345d6SNikita Popov; CHECK-LABEL: @zext_slt_sext(
753b671022SNikita Popov; CHECK-NEXT:    ret i1 false
76359345d6SNikita Popov;
77359345d6SNikita Popov  %sext = sext i32 %x to i64
78359345d6SNikita Popov  %zext = zext i32 %x to i64
79359345d6SNikita Popov  %cmp = icmp slt i64 %zext, %sext
80359345d6SNikita Popov  ret i1 %cmp
81359345d6SNikita Popov}
82359345d6SNikita Popov
83359345d6SNikita Popovdefine i1 @zext_sle_sext(i32 %x) {
84359345d6SNikita Popov; CHECK-LABEL: @zext_sle_sext(
85359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
86359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
87359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i64 [[ZEXT]], [[SEXT]]
88359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
89359345d6SNikita Popov;
90359345d6SNikita Popov  %sext = sext i32 %x to i64
91359345d6SNikita Popov  %zext = zext i32 %x to i64
92359345d6SNikita Popov  %cmp = icmp sle i64 %zext, %sext
93359345d6SNikita Popov  ret i1 %cmp
94359345d6SNikita Popov}
95359345d6SNikita Popov
96359345d6SNikita Popovdefine i1 @sext_uge_zext(i32 %x) {
97359345d6SNikita Popov; CHECK-LABEL: @sext_uge_zext(
983b671022SNikita Popov; CHECK-NEXT:    ret i1 true
99359345d6SNikita Popov;
100359345d6SNikita Popov  %sext = sext i32 %x to i64
101359345d6SNikita Popov  %zext = zext i32 %x to i64
102359345d6SNikita Popov  %cmp = icmp uge i64 %sext, %zext
103359345d6SNikita Popov  ret i1 %cmp
104359345d6SNikita Popov}
105359345d6SNikita Popov
106359345d6SNikita Popovdefine i1 @sext_ugt_zext(i32 %x) {
107359345d6SNikita Popov; CHECK-LABEL: @sext_ugt_zext(
108359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
109359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
110359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[SEXT]], [[ZEXT]]
111359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
112359345d6SNikita Popov;
113359345d6SNikita Popov  %sext = sext i32 %x to i64
114359345d6SNikita Popov  %zext = zext i32 %x to i64
115359345d6SNikita Popov  %cmp = icmp ugt i64 %sext, %zext
116359345d6SNikita Popov  ret i1 %cmp
117359345d6SNikita Popov}
118359345d6SNikita Popov
119359345d6SNikita Popovdefine i1 @sext_ult_zext(i32 %x) {
120359345d6SNikita Popov; CHECK-LABEL: @sext_ult_zext(
1213b671022SNikita Popov; CHECK-NEXT:    ret i1 false
122359345d6SNikita Popov;
123359345d6SNikita Popov  %sext = sext i32 %x to i64
124359345d6SNikita Popov  %zext = zext i32 %x to i64
125359345d6SNikita Popov  %cmp = icmp ult i64 %sext, %zext
126359345d6SNikita Popov  ret i1 %cmp
127359345d6SNikita Popov}
128359345d6SNikita Popov
129359345d6SNikita Popovdefine i1 @sext_ule_zext(i32 %x) {
130359345d6SNikita Popov; CHECK-LABEL: @sext_ule_zext(
131359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
132359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
133359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i64 [[SEXT]], [[ZEXT]]
134359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
135359345d6SNikita Popov;
136359345d6SNikita Popov  %sext = sext i32 %x to i64
137359345d6SNikita Popov  %zext = zext i32 %x to i64
138359345d6SNikita Popov  %cmp = icmp ule i64 %sext, %zext
139359345d6SNikita Popov  ret i1 %cmp
140359345d6SNikita Popov}
141359345d6SNikita Popov
142359345d6SNikita Popovdefine i1 @sext_sge_zext(i32 %x) {
143359345d6SNikita Popov; CHECK-LABEL: @sext_sge_zext(
144359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
145359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
146359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i64 [[SEXT]], [[ZEXT]]
147359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
148359345d6SNikita Popov;
149359345d6SNikita Popov  %sext = sext i32 %x to i64
150359345d6SNikita Popov  %zext = zext i32 %x to i64
151359345d6SNikita Popov  %cmp = icmp sge i64 %sext, %zext
152359345d6SNikita Popov  ret i1 %cmp
153359345d6SNikita Popov}
154359345d6SNikita Popov
155359345d6SNikita Popovdefine i1 @sext_sgt_zext(i32 %x) {
156359345d6SNikita Popov; CHECK-LABEL: @sext_sgt_zext(
1573b671022SNikita Popov; CHECK-NEXT:    ret i1 false
158359345d6SNikita Popov;
159359345d6SNikita Popov  %sext = sext i32 %x to i64
160359345d6SNikita Popov  %zext = zext i32 %x to i64
161359345d6SNikita Popov  %cmp = icmp sgt i64 %sext, %zext
162359345d6SNikita Popov  ret i1 %cmp
163359345d6SNikita Popov}
164359345d6SNikita Popov
165359345d6SNikita Popovdefine i1 @sext_slt_zext(i32 %x) {
166359345d6SNikita Popov; CHECK-LABEL: @sext_slt_zext(
167359345d6SNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
168359345d6SNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[X]] to i64
169359345d6SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i64 [[SEXT]], [[ZEXT]]
170359345d6SNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
171359345d6SNikita Popov;
172359345d6SNikita Popov  %sext = sext i32 %x to i64
173359345d6SNikita Popov  %zext = zext i32 %x to i64
174359345d6SNikita Popov  %cmp = icmp slt i64 %sext, %zext
175359345d6SNikita Popov  ret i1 %cmp
176359345d6SNikita Popov}
177359345d6SNikita Popov
178359345d6SNikita Popovdefine i1 @sext_sle_zext(i32 %x) {
179359345d6SNikita Popov; CHECK-LABEL: @sext_sle_zext(
1803b671022SNikita Popov; CHECK-NEXT:    ret i1 true
181359345d6SNikita Popov;
182359345d6SNikita Popov  %sext = sext i32 %x to i64
183359345d6SNikita Popov  %zext = zext i32 %x to i64
184359345d6SNikita Popov  %cmp = icmp sle i64 %sext, %zext
185359345d6SNikita Popov  ret i1 %cmp
186359345d6SNikita Popov}
18793ccb8ebSNikita Popov
18893ccb8ebSNikita Popovdefine <4 x i1> @zext_ugt_sext_vec(<4 x i32> %x) {
18993ccb8ebSNikita Popov; CHECK-LABEL: @zext_ugt_sext_vec(
1903b671022SNikita Popov; CHECK-NEXT:    ret <4 x i1> zeroinitializer
19193ccb8ebSNikita Popov;
19293ccb8ebSNikita Popov  %sext = sext <4 x i32> %x to <4 x i64>
19393ccb8ebSNikita Popov  %zext = zext <4 x i32> %x to <4 x i64>
19493ccb8ebSNikita Popov  %cmp = icmp ugt <4 x i64> %zext, %sext
19593ccb8ebSNikita Popov  ret <4 x i1> %cmp
19693ccb8ebSNikita Popov}
19793ccb8ebSNikita Popov
19893ccb8ebSNikita Popovdefine <4 x i1> @sext_ult_zext_vec(<4 x i32> %x) {
19993ccb8ebSNikita Popov; CHECK-LABEL: @sext_ult_zext_vec(
2003b671022SNikita Popov; CHECK-NEXT:    ret <4 x i1> zeroinitializer
20193ccb8ebSNikita Popov;
20293ccb8ebSNikita Popov  %sext = sext <4 x i32> %x to <4 x i64>
20393ccb8ebSNikita Popov  %zext = zext <4 x i32> %x to <4 x i64>
20493ccb8ebSNikita Popov  %cmp = icmp ult <4 x i64> %sext, %zext
20593ccb8ebSNikita Popov  ret <4 x i1> %cmp
20693ccb8ebSNikita Popov}
20793ccb8ebSNikita Popov
20893ccb8ebSNikita Popovdefine i1 @zext_ugt_sext_different_operand(i32 %x, i32 %y) {
20993ccb8ebSNikita Popov; CHECK-LABEL: @zext_ugt_sext_different_operand(
21093ccb8ebSNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
21193ccb8ebSNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[Y:%.*]] to i64
21293ccb8ebSNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[ZEXT]], [[SEXT]]
21393ccb8ebSNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
21493ccb8ebSNikita Popov;
21593ccb8ebSNikita Popov  %sext = sext i32 %x to i64
21693ccb8ebSNikita Popov  %zext = zext i32 %y to i64
21793ccb8ebSNikita Popov  %cmp = icmp ugt i64 %zext, %sext
21893ccb8ebSNikita Popov  ret i1 %cmp
21993ccb8ebSNikita Popov}
22093ccb8ebSNikita Popov
22193ccb8ebSNikita Popovdefine i1 @sext_ult_zext_different_operand(i32 %x, i32 %y) {
22293ccb8ebSNikita Popov; CHECK-LABEL: @sext_ult_zext_different_operand(
22393ccb8ebSNikita Popov; CHECK-NEXT:    [[SEXT:%.*]] = sext i32 [[X:%.*]] to i64
22493ccb8ebSNikita Popov; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[Y:%.*]] to i64
22593ccb8ebSNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[SEXT]], [[ZEXT]]
22693ccb8ebSNikita Popov; CHECK-NEXT:    ret i1 [[CMP]]
22793ccb8ebSNikita Popov;
22893ccb8ebSNikita Popov  %sext = sext i32 %x to i64
22993ccb8ebSNikita Popov  %zext = zext i32 %y to i64
23093ccb8ebSNikita Popov  %cmp = icmp ult i64 %sext, %zext
23193ccb8ebSNikita Popov  ret i1 %cmp
23293ccb8ebSNikita Popov}
233