Skip to content

Commit 19be41c

Browse files
committed
[InstCombine] Add tests for fold of icmp inttoptr, inttoptr. NFC
1 parent 3bbe0f9 commit 19be41c

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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_ptr(ptr)
5+
6+
define i1 @inttoptr(i64 %x, i64 %y) {
7+
; CHECK-LABEL: @inttoptr(
8+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
9+
; CHECK-NEXT: [[YPTR:%.*]] = inttoptr i64 [[Y:%.*]] to ptr
10+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[XPTR]], [[YPTR]]
11+
; CHECK-NEXT: ret i1 [[CMP]]
12+
;
13+
%xptr = inttoptr i64 %x to ptr
14+
%yptr = inttoptr i64 %y to ptr
15+
%cmp = icmp eq ptr %xptr, %yptr
16+
ret i1 %cmp
17+
}
18+
19+
define i1 @inttoptr_constant(i64 %x) {
20+
; CHECK-LABEL: @inttoptr_constant(
21+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
22+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[XPTR]], inttoptr (i64 42 to ptr)
23+
; CHECK-NEXT: ret i1 [[CMP]]
24+
;
25+
%xptr = inttoptr i64 %x to ptr
26+
%cmp = icmp eq ptr %xptr, inttoptr (i64 42 to ptr)
27+
ret i1 %cmp
28+
}
29+
30+
define <2 x i1> @inttoptr_vector(<2 x i64> %x, <2 x i64> %y) {
31+
; CHECK-LABEL: @inttoptr_vector(
32+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr <2 x i64> [[X:%.*]] to <2 x ptr>
33+
; CHECK-NEXT: [[YPTR:%.*]] = inttoptr <2 x i64> [[Y:%.*]] to <2 x ptr>
34+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x ptr> [[XPTR]], [[YPTR]]
35+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
36+
;
37+
%xptr = inttoptr <2 x i64> %x to <2 x ptr>
38+
%yptr = inttoptr <2 x i64> %y to <2 x ptr>
39+
%cmp = icmp eq <2 x ptr> %xptr, %yptr
40+
ret <2 x i1> %cmp
41+
}
42+
43+
define <2 x i1> @inttoptr_vector_constant(<2 x i64> %x) {
44+
; CHECK-LABEL: @inttoptr_vector_constant(
45+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr <2 x i64> [[X:%.*]] to <2 x ptr>
46+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x ptr> [[XPTR]], <ptr inttoptr (i64 42 to ptr), ptr inttoptr (i64 123 to ptr)>
47+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
48+
;
49+
%xptr = inttoptr <2 x i64> %x to <2 x ptr>
50+
%cmp = icmp eq <2 x ptr> %xptr, inttoptr (<2 x i64> <i64 42, i64 123> to <2 x ptr>)
51+
ret <2 x i1> %cmp
52+
}
53+
54+
define i1 @inttoptr_size_mismatch(i200 %x, i64 %y) {
55+
; CHECK-LABEL: @inttoptr_size_mismatch(
56+
; CHECK-NEXT: [[TMP1:%.*]] = trunc i200 [[X:%.*]] to i64
57+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr i64 [[TMP1]] to ptr
58+
; CHECK-NEXT: [[YPTR:%.*]] = inttoptr i64 [[Y:%.*]] to ptr
59+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[XPTR]], [[YPTR]]
60+
; CHECK-NEXT: ret i1 [[CMP]]
61+
;
62+
%xptr = inttoptr i200 %x to ptr
63+
%yptr = inttoptr i64 %y to ptr
64+
%cmp = icmp eq ptr %xptr, %yptr
65+
ret i1 %cmp
66+
}
67+
68+
define <2 x i1> @inttoptr_vector_constant_size_mismatch(<2 x i64> %x) {
69+
; CHECK-LABEL: @inttoptr_vector_constant_size_mismatch(
70+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr <2 x i64> [[X:%.*]] to <2 x ptr>
71+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x ptr> [[XPTR]], <ptr inttoptr (i9 42 to ptr), ptr inttoptr (i9 123 to ptr)>
72+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
73+
;
74+
%xptr = inttoptr <2 x i64> %x to <2 x ptr>
75+
%cmp = icmp eq <2 x ptr> %xptr, inttoptr (<2x i9> <i9 42, i9 123> to <2 x ptr>)
76+
ret <2 x i1> %cmp
77+
}
78+
79+
define i1 @inttoptr_oneside(i64 %x, ptr %y) {
80+
; CHECK-LABEL: @inttoptr_oneside(
81+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
82+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[XPTR]]
83+
; CHECK-NEXT: ret i1 [[CMP]]
84+
;
85+
%xptr = inttoptr i64 %x to ptr
86+
%cmp = icmp eq ptr %xptr, %y
87+
ret i1 %cmp
88+
}
89+
90+
define i1 @inttoptr_used(i64 %x, i64 %y) {
91+
; CHECK-LABEL: @inttoptr_used(
92+
; CHECK-NEXT: [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
93+
; CHECK-NEXT: [[YPTR:%.*]] = inttoptr i64 [[Y:%.*]] to ptr
94+
; CHECK-NEXT: call void @use_ptr(ptr [[XPTR]])
95+
; CHECK-NEXT: call void @use_ptr(ptr [[YPTR]])
96+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[XPTR]], [[YPTR]]
97+
; CHECK-NEXT: ret i1 [[CMP]]
98+
;
99+
%xptr = inttoptr i64 %x to ptr
100+
%yptr = inttoptr i64 %y to ptr
101+
call void @use_ptr(ptr %xptr)
102+
call void @use_ptr(ptr %yptr)
103+
%cmp = icmp ugt ptr %xptr, %yptr
104+
ret i1 %cmp
105+
}
106+

0 commit comments

Comments
 (0)