11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2- ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
2+ ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
33
44; The ptrtoaddr folds are also valid for pointers that have external state.
55target datalayout = "pe1:64:64:64:32"
@@ -34,77 +34,95 @@ define i32 @ptrtoaddr_inttoptr() {
3434; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr() {
3535; CHECK-NEXT: ret i32 -1
3636;
37- ret i32 ptr toaddr (ptr addrspace (1 ) inttoptr (i32 -1 to ptr addrspace (1 )) to i32 )
37+ %toptr = inttoptr i32 -1 to ptr addrspace (1 )
38+ %toaddr = ptr toaddr ptr addrspace (1 ) %toptr to i32
39+ ret i32 %toaddr
3840}
3941
4042define i32 @ptrtoaddr_inttoptr_diff_size1 () {
4143; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size1() {
4244; CHECK-NEXT: ret i32 -1
4345;
44- ret i32 ptr toaddr (ptr addrspace (1 ) inttoptr (i64 -1 to ptr addrspace (1 )) to i32 )
46+ %toptr = inttoptr i64 -1 to ptr addrspace (1 )
47+ %toaddr = ptr toaddr ptr addrspace (1 ) %toptr to i32
48+ ret i32 %toaddr
4549}
4650
4751define i32 @ptrtoaddr_inttoptr_diff_size2 () {
4852; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size2() {
4953; CHECK-NEXT: ret i32 65535
5054;
51- ret i32 ptr toaddr (ptr addrspace (1 ) inttoptr (i16 -1 to ptr addrspace (1 )) to i32 )
55+ %toptr = inttoptr i16 -1 to ptr addrspace (1 )
56+ %toaddr = ptr toaddr ptr addrspace (1 ) %toptr to i32
57+ ret i32 %toaddr
5258}
5359
5460define i64 @ptrtoaddr_inttoptr_noas1 () {
5561; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas1() {
5662; CHECK-NEXT: ret i64 1
5763;
58- ret i64 ptr toaddr (ptr getelementptr (i8 , ptr null , i64 1 ) to i64 )
64+ %toptr = getelementptr i8 , ptr null , i64 1
65+ %toaddr = ptr toaddr ptr %toptr to i64
66+ ret i64 %toaddr
5967}
6068
6169define i64 @ptr2addr2_inttoptr_noas2 () {
6270; CHECK-LABEL: define i64 @ptr2addr2_inttoptr_noas2() {
6371; CHECK-NEXT: ret i64 123
6472;
65- ret i64 ptr toaddr (ptr inttoptr (i64 123 to ptr ) to i64 )
73+ %toptr = inttoptr i64 123 to ptr
74+ %toaddr = ptr toaddr ptr %toptr to i64
75+ ret i64 %toaddr
6676}
6777
6878define i64 @ptrtoaddr_inttoptr_noas_diff_size1 () {
6979; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size1() {
7080; CHECK-NEXT: ret i64 4294967295
7181;
72- ret i64 ptr toaddr (ptr inttoptr (i32 -1 to ptr ) to i64 )
82+ %toptr = inttoptr i32 -1 to ptr
83+ %toaddr = ptr toaddr ptr %toptr to i64
84+ ret i64 %toaddr
7385}
7486
7587define i64 @ptrtoaddr_inttoptr_noas_diff_size2 () {
7688; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size2() {
7789; CHECK-NEXT: ret i64 -1
7890;
79- ret i64 ptr toaddr (ptr inttoptr (i128 -1 to ptr ) to i64 )
91+ %toptr = inttoptr i128 -1 to ptr
92+ %toaddr = ptr toaddr ptr %toptr to i64
93+ ret i64 %toaddr
8094}
8195
8296define i64 @ptrtoaddr_gep_null () {
8397; CHECK-LABEL: define i64 @ptrtoaddr_gep_null() {
8498; CHECK-NEXT: ret i64 42
8599;
86- ret i64 ptr toaddr (ptr getelementptr (i8 , ptr null , i64 42 ) to i64 )
100+ %toaddr = ptr toaddr ptr getelementptr (i8 , ptr null , i64 42 ) to i64
101+ ret i64 %toaddr
87102}
88103
89104define i32 @ptrtoaddr_gep_null_addrsize () {
90105; CHECK-LABEL: define i32 @ptrtoaddr_gep_null_addrsize() {
91106; CHECK-NEXT: ret i32 42
92107;
93- ret i32 ptr toaddr (ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) null , i32 42 ) to i32 )
108+ %toaddr = ptr toaddr ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) null , i32 42 ) to i32
109+ ret i32 %toaddr
94110}
95111
96112define i64 @ptrtoaddr_gep_sub () {
97113; CHECK-LABEL: define i64 @ptrtoaddr_gep_sub() {
98114; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
99115;
100- ret i64 ptr toaddr (ptr getelementptr (i8 , ptr @g , i64 sub (i64 0 , i64 ptr toaddr (ptr @g2 to i64 ))) to i64 )
116+ %toaddr = ptr toaddr ptr getelementptr (i8 , ptr @g , i64 sub (i64 0 , i64 ptr toaddr (ptr @g2 to i64 ))) to i64
117+ ret i64 %toaddr
101118}
102119
103120define i32 @ptrtoaddr_gep_sub_addrsize () {
104121; CHECK-LABEL: define i32 @ptrtoaddr_gep_sub_addrsize() {
105122; CHECK-NEXT: ret i32 sub (i32 ptrtoaddr (ptr addrspace(1) @g.as1 to i32), i32 ptrtoaddr (ptr addrspace(1) @g2.as1 to i32))
106123;
107- ret i32 ptr toaddr (ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) @g.as1 , i32 sub (i32 0 , i32 ptr toaddr (ptr addrspace (1 ) @g2.as1 to i32 ))) to i32 )
124+ %toaddr = ptr toaddr ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) @g.as1 , i32 sub (i32 0 , i32 ptr toaddr (ptr addrspace (1 ) @g2.as1 to i32 ))) to i32
125+ ret i32 %toaddr
108126}
109127
110128; Don't fold inttoptr of ptrtoaddr away. inttoptr will pick a previously
@@ -114,28 +132,32 @@ define ptr @inttoptr_of_ptrtoaddr() {
114132; CHECK-LABEL: define ptr @inttoptr_of_ptrtoaddr() {
115133; CHECK-NEXT: ret ptr inttoptr (i64 ptrtoaddr (ptr @g to i64) to ptr)
116134;
117- ret ptr inttoptr (i64 ptr toaddr (ptr @g to i64 ) to ptr )
135+ %toptr = inttoptr i64 ptr toaddr (ptr @g to i64 ) to ptr
136+ ret ptr %toptr
118137}
119138
120139define i64 @ptrtoaddr_sub_consts_unrelated () {
121140; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_unrelated() {
122141; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
123142;
124- ret i64 sub (i64 ptr toaddr (ptr @g to i64 ), i64 ptr toaddr (ptr @g2 to i64 ))
143+ %sub = sub i64 ptr toaddr (ptr @g to i64 ), ptr toaddr (ptr @g2 to i64 )
144+ ret i64 %sub
125145}
126146
127147define i64 @ptrtoaddr_sub_consts_offset () {
128148; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_offset() {
129149; CHECK-NEXT: ret i64 42
130150;
131- ret i64 sub (i64 ptr toaddr (ptr getelementptr (i8 , ptr @g , i64 42 ) to i64 ), i64 ptr toaddr (ptr @g to i64 ))
151+ %sub = sub i64 ptr toaddr (ptr getelementptr (i8 , ptr @g , i64 42 ) to i64 ), ptr toaddr (ptr @g to i64 )
152+ ret i64 %sub
132153}
133154
134155define i32 @ptrtoaddr_sub_consts_offset_addrsize () {
135156; CHECK-LABEL: define i32 @ptrtoaddr_sub_consts_offset_addrsize() {
136157; CHECK-NEXT: ret i32 42
137158;
138- ret i32 sub (i32 ptr toaddr (ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) @g.as1 , i32 42 ) to i32 ), i32 ptr toaddr (ptr addrspace (1 ) @g.as1 to i32 ))
159+ %sub = sub i32 ptr toaddr (ptr addrspace (1 ) getelementptr (i8 , ptr addrspace (1 ) @g.as1 , i32 42 ) to i32 ), ptr toaddr (ptr addrspace (1 ) @g.as1 to i32 )
160+ ret i32 %sub
139161}
140162
141163define i64 @ptrtoaddr_sub_known_offset (ptr %p ) {
0 commit comments