22; RUN: opt < %s -passes=instcombine -S | FileCheck %s
33target datalayout = "p1:64:64:64:32"
44
5- define i64 @ptrtoaddr_inttoptr () {
6- ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr() {
7- ; CHECK-NEXT: ret i64 ptrtoaddr (ptr addrspace(1) inttoptr (i32 -1 to ptr addrspace(1)) to i64)
5+ define i32 @ptrtoaddr_inttoptr_arg (i32 %a ) {
6+ ; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_arg(
7+ ; CHECK-SAME: i32 [[A:%.*]]) {
8+ ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[A]] to i64
9+ ; CHECK-NEXT: [[TOPTR:%.*]] = inttoptr i64 [[TMP1]] to ptr addrspace(1)
10+ ; CHECK-NEXT: [[TOADDR:%.*]] = ptrtoaddr ptr addrspace(1) [[TOPTR]] to i32
11+ ; CHECK-NEXT: ret i32 [[TOADDR]]
812;
9- ret i64 ptr toaddr (ptr addrspace (1 ) inttoptr (i32 -1 to ptr addrspace (1 )) to i64 )
13+ %toptr = inttoptr i32 %a to ptr addrspace (1 )
14+ %toaddr = ptr toaddr ptr addrspace (1 ) %toptr to i32
15+ ret i32 %toaddr
16+ }
17+
18+ define i32 @ptrtoaddr_inttoptr () {
19+ ; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr() {
20+ ; CHECK-NEXT: ret i32 -1
21+ ;
22+ ret i32 ptr toaddr (ptr addrspace (1 ) inttoptr (i32 -1 to ptr addrspace (1 )) to i32 )
1023}
1124
1225define i32 @ptrtoaddr_inttoptr_diff_size1 () {
@@ -22,3 +35,31 @@ define i32 @ptrtoaddr_inttoptr_diff_size2() {
2235;
2336 ret i32 ptr toaddr (ptr addrspace (1 ) inttoptr (i16 -1 to ptr addrspace (1 )) to i32 )
2437}
38+
39+ define i64 @ptrtoaddr_inttoptr_noas1 () {
40+ ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas1() {
41+ ; CHECK-NEXT: ret i64 1
42+ ;
43+ ret i64 ptr toaddr (ptr getelementptr (i8 , ptr null , i64 1 ) to i64 )
44+ }
45+
46+ define i64 @ptr2addr2_inttoptr_noas2 () {
47+ ; CHECK-LABEL: define i64 @ptr2addr2_inttoptr_noas2() {
48+ ; CHECK-NEXT: ret i64 123
49+ ;
50+ ret i64 ptr toaddr (ptr inttoptr (i64 123 to ptr ) to i64 )
51+ }
52+
53+ define i64 @ptrtoaddr_inttoptr_noas_diff_size1 () {
54+ ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size1() {
55+ ; CHECK-NEXT: ret i64 ptrtoaddr (ptr inttoptr (i32 -1 to ptr) to i64)
56+ ;
57+ ret i64 ptr toaddr (ptr inttoptr (i32 -1 to ptr ) to i64 )
58+ }
59+
60+ define i64 @ptrtoaddr_inttoptr_noas_diff_size2 () {
61+ ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size2() {
62+ ; CHECK-NEXT: ret i64 ptrtoaddr (ptr inttoptr (i128 -1 to ptr) to i64)
63+ ;
64+ ret i64 ptr toaddr (ptr inttoptr (i128 -1 to ptr ) to i64 )
65+ }
0 commit comments