11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt -p instcombine -S %s | FileCheck %s
2+ ; RUN: opt -p instsimplify -S %s | FileCheck %s
33
44@glob = external global [314 x i64 ]
55
66define i1 @known_constexpr_add_eq () {
77; 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]]
8+ ; CHECK-NEXT: ret i1 false
109;
1110 %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 )
1211 ret i1 %cond
1312}
1413
1514define i1 @known_constexpr_add_eq_ops_swapped () {
1615; 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]]
16+ ; CHECK-NEXT: ret i1 false
1917;
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 )
18+ %cond = icmp eq ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64 ), i64 -80 ) to ptr ), getelementptr inbounds nuw ( i8 , ptr @glob , i64 80 )
2119 ret i1 %cond
2220}
2321
2422define i1 @known_constexpr_add_ne () {
2523; 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]]
24+ ; CHECK-NEXT: ret i1 true
2825;
2926 %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 )
3027 ret i1 %cond
@@ -41,8 +38,7 @@ define i1 @wrap_positive_to_negate() {
4138; 9223372036854775808 = 2^63
4239define i1 @wrap_positive_to_zero () {
4340; 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]]
41+ ; CHECK-NEXT: ret i1 true
4642;
4743 %cond = icmp eq ptr @glob , inttoptr (i64 add (i64 ptrtoint (ptr getelementptr nuw (i8 , ptr @glob , i64 9223372036854775808 )to i64 ), i64 9223372036854775808 ) to ptr )
4844 ret i1 %cond
@@ -99,3 +95,20 @@ define ptr @return_inttoptr() {
9995;
10096 ret ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64 ), i64 8 ) to ptr )
10197}
98+
99+ define i1 @known_constexpr_add_nested_1 () {
100+ ; CHECK-LABEL: define i1 @known_constexpr_add_nested_1() {
101+ ; CHECK-NEXT: ret i1 true
102+ ;
103+ %cond = icmp eq ptr @glob , inttoptr (i64 add (i64 ptrtoint (ptr getelementptr inbounds nuw (i8 , ptr @glob , i64 80 ) to i64 ), i64 -80 ) to ptr )
104+ ret i1 %cond
105+ }
106+
107+ define i1 @known_constexpr_add_nested_2 () {
108+ ; CHECK-LABEL: define i1 @known_constexpr_add_nested_2() {
109+ ; CHECK-NEXT: ret i1 true
110+ ;
111+ ;%cond = icmp eq ptr @glob, ptr getelementptr inbounds nuw (i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64), i64 -80) to ptr), i64 80)
112+ %cond = icmp eq ptr @glob , getelementptr inbounds nuw (i8 , ptr inttoptr (i64 add (i64 ptrtoint (ptr @glob to i64 ), i64 -80 ) to ptr ), i64 80 )
113+ ret i1 %cond
114+ }
0 commit comments