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