Skip to content

Commit 4359360

Browse files
committed
[Value ] Add tests with cmps with inttoptr (add ..) ConstExpr.
1 parent d3161de commit 4359360

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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+
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
5+
6+
@glob = external global [314 x i64]
7+
8+
define i1 @known_constexpr_add_eq() {
9+
; CHECK-LABEL: define i1 @known_constexpr_add_eq() {
10+
; 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)
11+
; CHECK-NEXT: ret i1 [[COND]]
12+
;
13+
%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)
14+
ret i1 %cond
15+
}
16+
17+
define i1 @known_constexpr_add_ne() {
18+
; CHECK-LABEL: define i1 @known_constexpr_add_ne() {
19+
; 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)
20+
; CHECK-NEXT: ret i1 [[COND]]
21+
;
22+
%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)
23+
ret i1 %cond
24+
}
25+
26+
define i1 @wrap_positive_to_negate() {
27+
; CHECK-LABEL: define i1 @wrap_positive_to_negate() {
28+
; CHECK-NEXT: ret i1 false
29+
;
30+
%cond = icmp eq ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8, ptr @glob, i64 1)to i64), i64 9223372036854775808) to ptr)
31+
ret i1 %cond
32+
}
33+
34+
; 9223372036854775808 = 2^63
35+
define i1 @wrap_positive_to_zero() {
36+
; CHECK-LABEL: define i1 @wrap_positive_to_zero() {
37+
; 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)
38+
; CHECK-NEXT: ret i1 [[COND]]
39+
;
40+
%cond = icmp eq ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8, ptr @glob, i64 9223372036854775808)to i64), i64 9223372036854775808) to ptr)
41+
ret i1 %cond
42+
}
43+
44+
define i1 @not_known_constexpr_add_sle() {
45+
; CHECK-LABEL: define i1 @not_known_constexpr_add_sle() {
46+
; CHECK-NEXT: [[COND:%.*]] = icmp sle ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
47+
; CHECK-NEXT: ret i1 [[COND]]
48+
;
49+
%cond = icmp sle ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
50+
ret i1 %cond
51+
}
52+
53+
define i1 @not_known_constexpr_add_ule() {
54+
; CHECK-LABEL: define i1 @not_known_constexpr_add_ule() {
55+
; CHECK-NEXT: [[COND:%.*]] = icmp ule ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
56+
; CHECK-NEXT: ret i1 [[COND]]
57+
;
58+
%cond = icmp ule ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
59+
ret i1 %cond
60+
}
61+
62+
define i1 @not_known_constexpr_add_sge() {
63+
; CHECK-LABEL: define i1 @not_known_constexpr_add_sge() {
64+
; CHECK-NEXT: [[COND:%.*]] = icmp sge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
65+
; CHECK-NEXT: ret i1 [[COND]]
66+
;
67+
%cond = icmp sge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
68+
ret i1 %cond
69+
}
70+
71+
define i1 @not_known_constexpr_add_uge() {
72+
; CHECK-LABEL: define i1 @not_known_constexpr_add_uge() {
73+
; CHECK-NEXT: [[COND:%.*]] = icmp uge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
74+
; CHECK-NEXT: ret i1 [[COND]]
75+
;
76+
%cond = icmp uge ptr @glob, inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr)
77+
ret i1 %cond
78+
}
79+
80+
define i1 @not_known_integer_width_does_not_match_pointer_index_width() {
81+
; CHECK-LABEL: define i1 @not_known_integer_width_does_not_match_pointer_index_width() {
82+
; 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)
83+
; CHECK-NEXT: ret i1 [[COND]]
84+
;
85+
%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)
86+
ret i1 %cond
87+
}

0 commit comments

Comments
 (0)