Skip to content

Commit 56ad542

Browse files
committed
[InstSimplify] Add tests with inttoptr (add ..) ConstExprs.
Precommit tests for #124981.
1 parent 355d0b1 commit 56ad542

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -p instcombine -S %s | FileCheck %s
3+
4+
@glob = external global [314 x i64]
5+
6+
define i1 @known_constexpr_add_eq() {
7+
; CHECK-LABEL: define i1 @known_constexpr_add_eq() {
8+
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
9+
; CHECK-NEXT: ret i1 [[COND]]
10+
;
11+
%cond = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
12+
ret i1 %cond
13+
}
14+
15+
define i1 @known_constexpr_add_eq_ops_swapped() {
16+
; CHECK-LABEL: define i1 @known_constexpr_add_eq_ops_swapped() {
17+
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
18+
; CHECK-NEXT: ret i1 [[COND]]
19+
;
20+
%cond = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
21+
ret i1 %cond
22+
}
23+
24+
define i1 @known_constexpr_add_ne() {
25+
; CHECK-LABEL: define i1 @known_constexpr_add_ne() {
26+
; CHECK-NEXT: [[COND:%.*]] = icmp ne ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
27+
; CHECK-NEXT: ret i1 [[COND]]
28+
;
29+
%cond = icmp ne ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
30+
ret i1 %cond
31+
}
32+
33+
define i1 @wrap_positive_to_negate() {
34+
; CHECK-LABEL: define i1 @wrap_positive_to_negate() {
35+
; CHECK-NEXT: ret i1 false
36+
;
37+
%cond = icmp eq ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8, ptr @glob, i64 1)to i64), i64 9223372036854775808) to ptr)
38+
ret i1 %cond
39+
}
40+
41+
; 9223372036854775808 = 2^63
42+
define i1 @wrap_positive_to_zero() {
43+
; CHECK-LABEL: define i1 @wrap_positive_to_zero() {
44+
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8, ptr @glob, i64 -9223372036854775808) to i64), i64 -9223372036854775808) to ptr)
45+
; CHECK-NEXT: ret i1 [[COND]]
46+
;
47+
%cond = icmp eq ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8, ptr @glob, i64 9223372036854775808)to i64), i64 9223372036854775808) to ptr)
48+
ret i1 %cond
49+
}
50+
51+
define i1 @not_known_constexpr_add_sle() {
52+
; CHECK-LABEL: define i1 @not_known_constexpr_add_sle() {
53+
; CHECK-NEXT: [[COND:%.*]] = icmp sle ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
54+
; CHECK-NEXT: ret i1 [[COND]]
55+
;
56+
%cond = icmp sle ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
57+
ret i1 %cond
58+
}
59+
60+
define i1 @not_known_constexpr_add_ule() {
61+
; CHECK-LABEL: define i1 @not_known_constexpr_add_ule() {
62+
; CHECK-NEXT: [[COND:%.*]] = icmp ule ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
63+
; CHECK-NEXT: ret i1 [[COND]]
64+
;
65+
%cond = icmp ule ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
66+
ret i1 %cond
67+
}
68+
69+
define i1 @not_known_constexpr_add_sge() {
70+
; CHECK-LABEL: define i1 @not_known_constexpr_add_sge() {
71+
; CHECK-NEXT: [[COND:%.*]] = icmp sge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
72+
; CHECK-NEXT: ret i1 [[COND]]
73+
;
74+
%cond = icmp sge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
75+
ret i1 %cond
76+
}
77+
78+
define i1 @not_known_constexpr_add_uge() {
79+
; CHECK-LABEL: define i1 @not_known_constexpr_add_uge() {
80+
; CHECK-NEXT: [[COND:%.*]] = icmp uge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
81+
; CHECK-NEXT: ret i1 [[COND]]
82+
;
83+
%cond = icmp uge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
84+
ret i1 %cond
85+
}
86+
87+
define i1 @not_known_integer_width_does_not_match_pointer_index_width() {
88+
; CHECK-LABEL: define i1 @not_known_integer_width_does_not_match_pointer_index_width() {
89+
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i32 add (i32 ptrtoint (ptr @glob to i32), i32 -80) to ptr)
90+
; CHECK-NEXT: ret i1 [[COND]]
91+
;
92+
%cond = icmp eq ptr getelementptr inbounds nuw (i8, ptr @glob, i64 80), inttoptr (i32 add (i32 ptrtoint (ptr @glob to i32), i32 -80) to ptr)
93+
ret i1 %cond
94+
}
95+
96+
define ptr @return_inttoptr() {
97+
; CHECK-LABEL: define ptr @return_inttoptr() {
98+
; CHECK-NEXT: ret ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 8) to ptr)
99+
;
100+
ret ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 8) to ptr)
101+
}

0 commit comments

Comments
 (0)