11// RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-extensions -emit-llvm -O2 < %s | FileCheck %s --check-prefixes=X64,ALL 
22// RUN: %clang_cc1 -triple i386-pc-win32 -fms-extensions -emit-llvm -O2 < %s | FileCheck %s --check-prefixes=X86,ALL 
3+ // RUN: %clang_cc1 -triple aarch64-windows-msvc -fms-extensions -emit-llvm -O2 < %s | FileCheck %s --check-prefixes=AARCH64,ALL 
34
45struct  Foo  {
56  int  *  __ptr32  p32 ;
@@ -9,41 +10,51 @@ void use_foo(struct Foo *f);
910void  test_sign_ext (struct  Foo  * f , int  *  __ptr32  __sptr i ) {
1011// X64-LABEL: define dso_local void @test_sign_ext({{.*}}ptr addrspace(270) noundef %i) 
1112// X86-LABEL: define dso_local void @test_sign_ext(ptr noundef %f, ptr noundef %i) 
13+ // AARCH64-LABEL: define dso_local void @test_sign_ext({{.*}}ptr addrspace(270) noundef %i) local_unnamed_addr #0 
1214// X64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr 
1315// X86: %{{.+}} = addrspacecast ptr %i to ptr addrspace(272) 
16+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr 
1417  f -> p64  =  i ;
1518  use_foo (f );
1619}
1720void  test_zero_ext (struct  Foo  * f , int  *  __ptr32  __uptr i ) {
1821// X64-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i) 
1922// X86-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i) 
23+ // AARCH64-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i) local_unnamed_addr #0 
2024// X64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr 
2125// X86: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr addrspace(272) 
26+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr 
2227  f -> p64  =  i ;
2328  use_foo (f );
2429}
2530void  test_trunc (struct  Foo  * f , int  *  __ptr64  i ) {
2631// X64-LABEL: define dso_local void @test_trunc(ptr noundef %f, ptr noundef %i) 
2732// X86-LABEL: define dso_local void @test_trunc({{.*}}ptr addrspace(272) noundef %i) 
33+ // AARCH64-LABEL: define dso_local void @test_trunc(ptr noundef %f, ptr noundef %i) local_unnamed_addr #0 
2834// X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270) 
2935// X86: %{{.+}} = addrspacecast ptr addrspace(272) %i to ptr 
36+ // AARCH64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270) 
3037  f -> p32  =  i ;
3138  use_foo (f );
3239}
3340void  test_noop (struct  Foo  * f , int  *  __ptr32  i ) {
3441// X64-LABEL: define dso_local void @test_noop({{.*}}ptr addrspace(270) noundef %i) 
3542// X86-LABEL: define dso_local void @test_noop({{.*}}ptr noundef %i) 
43+ // AARCH64-LABEL: define dso_local void @test_noop({{.*}}ptr addrspace(270) noundef %i) local_unnamed_addr #0 
3644// X64-NOT: addrspacecast 
3745// X86-NOT: addrspacecast 
46+ // AARCH64-NOT: addrspacecast 
3847  f -> p32  =  i ;
3948  use_foo (f );
4049}
4150
4251void  test_other (struct  Foo  * f , __attribute__((address_space (10 ))) int  * i ) {
4352// X64-LABEL: define dso_local void @test_other({{.*}}ptr addrspace(10) noundef %i) 
4453// X86-LABEL: define dso_local void @test_other({{.*}}ptr addrspace(10) noundef %i) 
54+ // AARCH64-LABEL: define dso_local void @test_other({{.*}}ptr addrspace(10) noundef %i) local_unnamed_addr #0 
4555// X64: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr addrspace(270) 
4656// X86: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr 
57+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr addrspace(270) 
4758  f -> p32  =  (int  *  __ptr32 )i ;
4859  use_foo (f );
4960}
@@ -54,6 +65,8 @@ int test_compare1(int *__ptr32 __uptr i, int *__ptr64 j) {
5465  // X64: %cmp = icmp eq ptr addrspace(271) %i, %{{.+}} 
5566  // X86: %{{.+}} = addrspacecast ptr addrspace(272) %j to ptr addrspace(271) 
5667  // X86: %cmp = icmp eq ptr addrspace(271) %i, %{{.+}} 
68+   // AARCH64: %{{.+}} = addrspacecast ptr %j to ptr addrspace(271) 
69+   // AARCH64: %cmp = icmp eq ptr addrspace(271) %i, %{{.+}} 
5770  return  (i  ==  j );
5871}
5972
@@ -63,6 +76,8 @@ int test_compare2(int *__ptr32 __sptr i, int *__ptr64 j) {
6376  // X64: %cmp = icmp eq ptr addrspace(270) %i, %{{.+}} 
6477  // X86: %{{.+}} = addrspacecast ptr addrspace(272) %j to ptr 
6578  // X86: %cmp = icmp eq ptr %i, %{{.+}} 
79+   // AARCH64: %{{.+}} = addrspacecast ptr %j to ptr addrspace(270) 
80+   // AARCH64: %cmp = icmp eq ptr addrspace(270) %i, %{{.+}} 
6681  return  (i  ==  j );
6782}
6883
@@ -72,6 +87,8 @@ int test_compare3(int *__ptr32 __uptr i, int *__ptr64 j) {
7287  // X64: %cmp = icmp eq ptr %j, %{{.+}} 
7388  // X86: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr addrspace(272) 
7489  // X86: %cmp = icmp eq ptr addrspace(272) %j, %{{.+}} 
90+   // AARCH64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr 
91+   // AARCH64: %cmp = icmp eq ptr %j, %{{.+}} 
7592  return  (j  ==  i );
7693}
7794
@@ -81,5 +98,7 @@ int test_compare4(int *__ptr32 __sptr i, int *__ptr64 j) {
8198  // X64: %cmp = icmp eq ptr %j, %{{.+}} 
8299  // X86: %{{.+}} = addrspacecast ptr %i to ptr addrspace(272) 
83100  // X86: %cmp = icmp eq ptr addrspace(272) %j, %{{.+}} 
101+   // AARCH64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr 
102+   // AARCH64: %cmp = icmp eq ptr %j, %{{.+}} 
84103  return  (j  ==  i );
85104}
0 commit comments