1
1
// RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-extensions -emit-llvm -O2 < %s | FileCheck %s --check-prefixes=X64,ALL
2
2
// 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
3
4
4
5
struct Foo {
5
6
int * __ptr32 p32 ;
@@ -9,41 +10,51 @@ void use_foo(struct Foo *f);
9
10
void test_sign_ext (struct Foo * f , int * __ptr32 __sptr i ) {
10
11
// X64-LABEL: define dso_local void @test_sign_ext({{.*}}ptr addrspace(270) noundef %i)
11
12
// 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
12
14
// X64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr
13
15
// X86: %{{.+}} = addrspacecast ptr %i to ptr addrspace(272)
16
+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr
14
17
f -> p64 = i ;
15
18
use_foo (f );
16
19
}
17
20
void test_zero_ext (struct Foo * f , int * __ptr32 __uptr i ) {
18
21
// X64-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i)
19
22
// 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
20
24
// X64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr
21
25
// X86: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr addrspace(272)
26
+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr
22
27
f -> p64 = i ;
23
28
use_foo (f );
24
29
}
25
30
void test_trunc (struct Foo * f , int * __ptr64 i ) {
26
31
// X64-LABEL: define dso_local void @test_trunc(ptr noundef %f, ptr noundef %i)
27
32
// 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
28
34
// X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270)
29
35
// X86: %{{.+}} = addrspacecast ptr addrspace(272) %i to ptr
36
+ // AARCH64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270)
30
37
f -> p32 = i ;
31
38
use_foo (f );
32
39
}
33
40
void test_noop (struct Foo * f , int * __ptr32 i ) {
34
41
// X64-LABEL: define dso_local void @test_noop({{.*}}ptr addrspace(270) noundef %i)
35
42
// 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
36
44
// X64-NOT: addrspacecast
37
45
// X86-NOT: addrspacecast
46
+ // AARCH64-NOT: addrspacecast
38
47
f -> p32 = i ;
39
48
use_foo (f );
40
49
}
41
50
42
51
void test_other (struct Foo * f , __attribute__((address_space (10 ))) int * i ) {
43
52
// X64-LABEL: define dso_local void @test_other({{.*}}ptr addrspace(10) noundef %i)
44
53
// 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
45
55
// X64: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr addrspace(270)
46
56
// X86: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr
57
+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(10) %i to ptr addrspace(270)
47
58
f -> p32 = (int * __ptr32 )i ;
48
59
use_foo (f );
49
60
}
@@ -54,6 +65,8 @@ int test_compare1(int *__ptr32 __uptr i, int *__ptr64 j) {
54
65
// X64: %cmp = icmp eq ptr addrspace(271) %i, %{{.+}}
55
66
// X86: %{{.+}} = addrspacecast ptr addrspace(272) %j to ptr addrspace(271)
56
67
// 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, %{{.+}}
57
70
return (i == j );
58
71
}
59
72
@@ -63,6 +76,8 @@ int test_compare2(int *__ptr32 __sptr i, int *__ptr64 j) {
63
76
// X64: %cmp = icmp eq ptr addrspace(270) %i, %{{.+}}
64
77
// X86: %{{.+}} = addrspacecast ptr addrspace(272) %j to ptr
65
78
// X86: %cmp = icmp eq ptr %i, %{{.+}}
79
+ // AARCH64: %{{.+}} = addrspacecast ptr %j to ptr addrspace(270)
80
+ // AARCH64: %cmp = icmp eq ptr addrspace(270) %i, %{{.+}}
66
81
return (i == j );
67
82
}
68
83
@@ -72,6 +87,8 @@ int test_compare3(int *__ptr32 __uptr i, int *__ptr64 j) {
72
87
// X64: %cmp = icmp eq ptr %j, %{{.+}}
73
88
// X86: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr addrspace(272)
74
89
// X86: %cmp = icmp eq ptr addrspace(272) %j, %{{.+}}
90
+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr
91
+ // AARCH64: %cmp = icmp eq ptr %j, %{{.+}}
75
92
return (j == i );
76
93
}
77
94
@@ -81,5 +98,7 @@ int test_compare4(int *__ptr32 __sptr i, int *__ptr64 j) {
81
98
// X64: %cmp = icmp eq ptr %j, %{{.+}}
82
99
// X86: %{{.+}} = addrspacecast ptr %i to ptr addrspace(272)
83
100
// X86: %cmp = icmp eq ptr addrspace(272) %j, %{{.+}}
101
+ // AARCH64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr
102
+ // AARCH64: %cmp = icmp eq ptr %j, %{{.+}}
84
103
return (j == i );
85
104
}
0 commit comments