Skip to content

Commit c1df2e1

Browse files
committed
Allow usm_device and usm_host to opencl_global convertion
Signed-off-by: Dmitry Sidorov <[email protected]>
1 parent c3bbb1b commit c1df2e1

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

clang/include/clang/AST/Type.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,10 @@ class Qualifiers {
480480
// Otherwise in OpenCLC v2.0 s6.5.5: every address space except
481481
// for __constant can be used as __generic.
482482
(A == LangAS::opencl_generic && B != LangAS::opencl_constant) ||
483+
// For USM extension we define usm_device and usm_host addres spaces,
484+
// which are a subset of __global.
485+
(A == LangAS::opencl_global && (B == LangAS::opencl_usm_device ||
486+
B == LangAS::opencl_usm_host)) ||
483487
// Consider pointer size address spaces to be equivalent to default.
484488
((isPtrSizeAddressSpace(A) || A == LangAS::Default) &&
485489
(isPtrSizeAddressSpace(B) || B == LangAS::Default));

clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@ void bar2(int & Data) {}
55
// CHECK-DAG: define spir_func void @[[RAW_REF2:[a-zA-Z0-9_]+]](i32 addrspace(4)* dereferenceable(4) %
66
void bar(__attribute__((opencl_local)) int &Data) {}
77
// CHECK-DAG: define spir_func void [[LOC_REF:@[a-zA-Z0-9_]+]](i32 addrspace(3)* dereferenceable(4) %
8+
void bar3(__attribute__((opencl_global)) int &Data) {}
9+
// CHECK-DAG: define spir_func void @[[GLOB_REF:[a-zA-Z0-9_]+]](i32 addrspace(1)* dereferenceable(4) %
810
void foo(int * Data) {}
911
// CHECK-DAG: define spir_func void @[[RAW_PTR:[a-zA-Z0-9_]+]](i32 addrspace(4)* %
1012
void foo2(int * Data) {}
1113
// CHECK-DAG: define spir_func void @[[RAW_PTR2:[a-zA-Z0-9_]+]](i32 addrspace(4)* %
1214
void foo(__attribute__((opencl_local)) int *Data) {}
1315
// CHECK-DAG: define spir_func void [[LOC_PTR:@[a-zA-Z0-9_]+]](i32 addrspace(3)* %
16+
void foo3(__attribute__((opencl_global)) int *Data) {}
17+
// CHECK-DAG: define spir_func void @[[GLOB_PTR:[a-zA-Z0-9_]+]](i32 addrspace(1)* %
1418

1519
template<typename T>
1620
void tmpl(T t){}
@@ -47,6 +51,10 @@ void usages() {
4751
// CHECK-DAG: [[USMDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
4852
// CHECK-DAG: [[USMDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD2]] to i32 addrspace(4)*
4953
// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST2]])
54+
bar3(*USMDEV);
55+
// CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
56+
// CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(1)*
57+
// CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMDEV_CAST3]])
5058

5159
bar(*USMHOST);
5260
// CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
@@ -56,6 +64,10 @@ void usages() {
5664
// CHECK-DAG: [[USMHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
5765
// CHECK-DAG: [[USMHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD2]] to i32 addrspace(4)*
5866
// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST2]])
67+
bar3(*USMHOST);
68+
// CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
69+
// CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(1)*
70+
// CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMHOST_CAST3]])
5971

6072
bar(*LOC);
6173
// CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]]
@@ -81,21 +93,29 @@ void usages() {
8193
// CHECK-DAG: [[GLOB_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD4]] to i32 addrspace(4)*
8294
// CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOB_CAST4]])
8395
foo(USMDEV);
84-
// CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
85-
// CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(4)*
86-
// CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST3]])
87-
foo2(USMDEV);
8896
// CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
8997
// CHECK-DAG: [[USMDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD4]] to i32 addrspace(4)*
90-
// CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST4]])
98+
// CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST4]])
99+
foo2(USMDEV);
100+
// CHECK-DAG: [[USMDEV_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
101+
// CHECK-DAG: [[USMDEV_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD5]] to i32 addrspace(4)*
102+
// CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST5]])
103+
foo3(USMDEV);
104+
// CHECK-DAG: [[USMDEV_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]]
105+
// CHECK-DAG: [[USMDEV_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD6]] to i32 addrspace(1)*
106+
// CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMDEV_CAST6]])
91107
foo(USMHOST);
92-
// CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
93-
// CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(4)*
94-
// CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST3]])
95-
foo2(USMHOST);
96108
// CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
97109
// CHECK-DAG: [[USMHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD4]] to i32 addrspace(4)*
98-
// CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST4]])
110+
// CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST4]])
111+
foo2(USMHOST);
112+
// CHECK-DAG: [[USMHOST_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
113+
// CHECK-DAG: [[USMHOST_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD5]] to i32 addrspace(4)*
114+
// CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST5]])
115+
foo3(USMHOST);
116+
// CHECK-DAG: [[USMHOST_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]]
117+
// CHECK-DAG: [[USMHOST_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD6]] to i32 addrspace(1)*
118+
// CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMHOST_CAST6]])
99119
foo(LOC);
100120
// CHECK-DAG: [[LOC_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]]
101121
// CHECK-DAG: call spir_func void [[LOC_PTR]](i32 addrspace(3)* [[LOC_LOAD3]])

clang/test/SemaSYCL/address-space-parameter-conversions.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
void bar(int & Data) {}
44
void bar2(int & Data) {}
55
void bar(__attribute__((opencl_private)) int & Data) {}
6+
void bar3(__attribute__((opencl_global)) int & Data) {}
67
void foo(int * Data) {}
78
void foo2(int * Data) {}
89
void foo(__attribute__((opencl_private)) int * Data) {}
10+
void foo3(__attribute__((opencl_global)) int * Data) {}
911

1012
template<typename T>
1113
void tmpl(T *t){}
@@ -23,9 +25,11 @@ void usages() {
2325

2426
bar(*USMDEV);
2527
bar2(*USMDEV);
28+
bar3(*USMDEV);
2629

2730
bar(*USMHOST);
2831
bar2(*USMHOST);
32+
bar3(*USMHOST);
2933

3034
bar(*PRIV);
3135
bar2(*PRIV);
@@ -40,8 +44,10 @@ void usages() {
4044
foo2(GLOB);
4145
foo(USMDEV);
4246
foo2(USMDEV);
43-
foo(USMHOST);
47+
foo3(USMDEV);
48+
foo(USMDEV);
4449
foo2(USMHOST);
50+
foo3(USMHOST);
4551
foo(PRIV);
4652
foo2(PRIV);
4753
foo(NoAS);

0 commit comments

Comments
 (0)