From 48d6010def49d0b4b7eae4d085c65d919092d545 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Mon, 11 May 2020 20:06:38 +0300 Subject: [PATCH 01/11] [SYCL] Add usm_device and usm_host address spaces This patch introduces 2 new address spaces in OpenCL: usm_device and usm_host which are a subset of a global address space. We want to give the user a way to tell the compiler the allocation type of a USM pointer for optimization purposes. While it is usually easy for our compiler to distinguish loads or stores that access local memory from those that access global memory, distinguishing USM pointers that access host memory from those that access device memory or even distinguishing USM pointers that access host memory from accessors that access global memory is currently impossible. This is because all host code has been stripped out before we reach the backend and both accessors and USM pointers are presenting in LLVM IR as pointers in the global address space in the kernel's arguments. Being able to distinguish between these types of pointers at compile time is valuable because it allows us to instantiate simpler load-store units to perform memory transactions. Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 4 +- clang/include/clang/Basic/AddressSpaces.h | 2 + clang/include/clang/Basic/Attr.td | 10 ++++ clang/include/clang/Basic/AttrDocs.td | 24 ++++++++ clang/include/clang/Sema/ParsedAttr.h | 4 ++ clang/lib/AST/ASTContext.cpp | 2 + clang/lib/AST/ItaniumMangle.cpp | 21 ++++--- clang/lib/AST/MicrosoftMangle.cpp | 6 ++ clang/lib/AST/TypePrinter.cpp | 6 ++ clang/lib/Basic/Targets/AMDGPU.cpp | 4 ++ clang/lib/Basic/Targets/NVPTX.h | 2 + clang/lib/Basic/Targets/SPIR.h | 4 ++ clang/lib/Basic/Targets/TCE.h | 2 + clang/lib/Basic/Targets/X86.h | 2 + clang/lib/CodeGen/CodeGenModule.cpp | 12 ++-- clang/lib/Sema/SemaType.cpp | 4 ++ .../AST/language_address_space_attribute.cpp | 12 ++++ .../test/CodeGenCXX/mangle-address-space.cpp | 11 ++++ .../address-space-parameter-conversions.cpp | 60 ++++++++++++++++++- .../address-space-parameter-conversions.cpp | 18 ++++++ .../SemaTemplate/address_space-dependent.cpp | 2 +- 21 files changed, 196 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index d473daef4cf1a..458e5363575b9 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -493,7 +493,9 @@ class Qualifiers { (!hasAddressSpace() && (other.getAddressSpace() == LangAS::opencl_private || other.getAddressSpace() == LangAS::opencl_local || - other.getAddressSpace() == LangAS::opencl_global)); + other.getAddressSpace() == LangAS::opencl_global || + other.getAddressSpace() == LangAS::opencl_global_device || + other.getAddressSpace() == LangAS::opencl_global_host)); } /// Determines if these qualifiers compatibly include another set. diff --git a/clang/include/clang/Basic/AddressSpaces.h b/clang/include/clang/Basic/AddressSpaces.h index faf7f303aa2d6..a9db52dfcc9c8 100644 --- a/clang/include/clang/Basic/AddressSpaces.h +++ b/clang/include/clang/Basic/AddressSpaces.h @@ -36,6 +36,8 @@ enum class LangAS : unsigned { opencl_constant, opencl_private, opencl_generic, + opencl_global_device, + opencl_global_host, // CUDA specific address spaces. cuda_device, diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index ddad16d90a98b..487b1451096e9 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1294,6 +1294,16 @@ def OpenCLGlobalAddressSpace : TypeAttr { let Documentation = [OpenCLAddressSpaceGlobalDocs]; } +def OpenCLGlobalDeviceAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_global_device">]; + let Documentation = [OpenCLAddressSpaceGlobalDeviceDocs]; +} + +def OpenCLGlobalHostAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_global_host">]; + let Documentation = [OpenCLAddressSpaceGlobalHostDocs]; +} + def OpenCLLocalAddressSpace : TypeAttr { let Spellings = [Keyword<"__local">, Keyword<"local">, Clang<"opencl_local">]; let Documentation = [OpenCLAddressSpaceLocalDocs]; diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 32cae7cd5670b..792b441613f86 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3545,6 +3545,30 @@ scope) variables and static local variable as well. }]; } +def OpenCLAddressSpaceGlobalDeviceDocs : Documentation { + let Category = DocOpenCLAddressSpaces; + let Heading = "[[clang::opencl_global_device]]"; + let Content = [{ +The global_device address space attribute specifies that an object is allocated +in global memory on device. It is supposed to be used only in SYCL headers and +not in the actual OpenCL/SYCL user code. It helps distinguishing USM pointers +that access device memory and accessors that access global memory from those +that access host memory. + }]; +} + +def OpenCLAddressSpaceGlobalHostDocs : Documentation { + let Category = DocOpenCLAddressSpaces; + let Heading = "[[clang::opencl_global_host]]"; + let Content = [{ +The global_host address space attribute specifies that an object is allocated in +global memory on host. It is supposed to be used only in SYCL headers and not in +the actual OpenCL/SYCL user code. It helps distinguishing USM pointers that +access host memory from those that access device memory and from accessors that +access global memory. + }]; +} + def OpenCLAddressSpaceLocalDocs : Documentation { let Category = DocOpenCLAddressSpaces; let Heading = "__local, local, [[clang::opencl_local]]"; diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h index 21e030fe51346..8946b12ee03fc 100644 --- a/clang/include/clang/Sema/ParsedAttr.h +++ b/clang/include/clang/Sema/ParsedAttr.h @@ -606,6 +606,10 @@ class ParsedAttr final return LangAS::opencl_constant; case ParsedAttr::AT_OpenCLGlobalAddressSpace: return LangAS::opencl_global; + case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: + return LangAS::opencl_global_device; + case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: + return LangAS::opencl_global_host; case ParsedAttr::AT_OpenCLLocalAddressSpace: return LangAS::opencl_local; case ParsedAttr::AT_OpenCLPrivateAddressSpace: diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 28f7ec7f47481..df01b67a4e295 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -925,6 +925,8 @@ static const LangASMap *getAddressSpaceMap(const TargetInfo &T, 2, // opencl_constant 0, // opencl_private 4, // opencl_generic + 11,// opencl_global_device + 12,// opencl_global_host 5, // cuda_device 6, // cuda_constant 7, // cuda_shared diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 74e1b362738dd..0d4a4ed76dd1c 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2387,16 +2387,19 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals, const DependentAddressSp switch (AS) { default: llvm_unreachable("Not a language specific address space"); // ::= "CL" [ "global" | "local" | "constant" | - // "private"| "generic" ] - case LangAS::opencl_global: ASString = "CLglobal"; break; - case LangAS::opencl_local: ASString = "CLlocal"; break; - case LangAS::opencl_constant: ASString = "CLconstant"; break; - case LangAS::opencl_private: ASString = "CLprivate"; break; - case LangAS::opencl_generic: ASString = "CLgeneric"; break; + // "private"| "generic" | "global_device" | + // "global_host" ] + case LangAS::opencl_global: ASString = "CLglobal"; break; + case LangAS::opencl_global_device: ASString = "CLglobalDevice"; break; + case LangAS::opencl_global_host: ASString = "CLglobalHost"; break; + case LangAS::opencl_local: ASString = "CLlocal"; break; + case LangAS::opencl_constant: ASString = "CLconstant"; break; + case LangAS::opencl_private: ASString = "CLprivate"; break; + case LangAS::opencl_generic: ASString = "CLgeneric"; break; // ::= "CU" [ "device" | "constant" | "shared" ] - case LangAS::cuda_device: ASString = "CUdevice"; break; - case LangAS::cuda_constant: ASString = "CUconstant"; break; - case LangAS::cuda_shared: ASString = "CUshared"; break; + case LangAS::cuda_device: ASString = "CUdevice"; break; + case LangAS::cuda_constant: ASString = "CUconstant"; break; + case LangAS::cuda_shared: ASString = "CUshared"; break; // ::= [ "ptr32_sptr" | "ptr32_uptr" | "ptr64" ] case LangAS::ptr32_sptr: ASString = "ptr32_sptr"; diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index e3796accb26e4..90f1f13ffeb3c 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1823,6 +1823,12 @@ void MicrosoftCXXNameMangler::mangleAddressSpaceType(QualType T, case LangAS::opencl_global: Extra.mangleSourceName("_ASCLglobal"); break; + case LangAS::opencl_global_device: + Extra.mangleSourceName("_ASCLglobalDevice"); + break; + case LangAS::opencl_global_host: + Extra.mangleSourceName("_ASCLglobalHost"); + break; case LangAS::opencl_local: Extra.mangleSourceName("_ASCLlocal"); break; diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index 87b273234ad96..0505d53d6f99d 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -1577,6 +1577,8 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case attr::OpenCLPrivateAddressSpace: case attr::OpenCLGlobalAddressSpace: + case attr::OpenCLGlobalDeviceAddressSpace: + case attr::OpenCLGlobalHostAddressSpace: case attr::OpenCLLocalAddressSpace: case attr::OpenCLConstantAddressSpace: case attr::OpenCLGenericAddressSpace: @@ -1880,6 +1882,10 @@ std::string Qualifiers::getAddrSpaceAsString(LangAS AS) { return "__constant"; case LangAS::opencl_generic: return "__generic"; + case LangAS::opencl_global_device: + return "__global_device"; + case LangAS::opencl_global_host: + return "__global_host"; case LangAS::cuda_device: return "__device__"; case LangAS::cuda_constant: diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp index da7bd34c95325..d5af8c3965356 100644 --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -45,6 +45,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic + Global, // opencl_global_device + Global, // opencl_global_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared @@ -60,6 +62,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic + Global, // opencl_global_device + Global, // opencl_global_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index fc8c832641ad8..d200a41d3279b 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -30,6 +30,8 @@ static const unsigned NVPTXAddrSpaceMap[] = { 0, // opencl_private // FIXME: generic has to be added to the target 0, // opencl_generic + 11,// opencl_global_device + 12,// opencl_global_host 1, // cuda_device 4, // cuda_constant 3, // cuda_shared diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index dcaabec665367..8cd18fbb4ef87 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -30,6 +30,8 @@ static const unsigned SPIRAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic + 11,// opencl_global_device + 12,// opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared @@ -45,6 +47,8 @@ static const unsigned SYCLAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic + 11,// opencl_global_device + 12,// opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index 9cbf2a3688a2e..d21984855fb53 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -35,6 +35,8 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = { 4, // opencl_local 5, // opencl_constant 0, // opencl_private + 11, // opencl_global_device + 12, // opencl_global_host // FIXME: generic has to be added to the target 0, // opencl_generic 0, // cuda_device diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 39ccac96a49d8..2b2462f97af82 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -29,6 +29,8 @@ static const unsigned X86AddrSpaceMap[] = { 0, // opencl_constant 0, // opencl_private 0, // opencl_generic + 0, // opencl_global_device + 0, // opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index d0a1c1e073cdc..c498fef00c8bd 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1360,10 +1360,12 @@ static void removeImageAccessQualifier(std::string& TyName) { // (basically all single AS CPUs). static unsigned ArgInfoAddressSpace(LangAS AS) { switch (AS) { - case LangAS::opencl_global: return 1; - case LangAS::opencl_constant: return 2; - case LangAS::opencl_local: return 3; - case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. + case LangAS::opencl_global: return 1; + case LangAS::opencl_constant: return 2; + case LangAS::opencl_local: return 3; + case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. + case LangAS::opencl_global_device: return 11; + case LangAS::opencl_global_host: return 12; default: return 0; // Assume private. } @@ -3858,6 +3860,8 @@ LangAS CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D) { if (LangOpts.OpenCL) { AddrSpace = D ? D->getType().getAddressSpace() : LangAS::opencl_global; assert(AddrSpace == LangAS::opencl_global || + AddrSpace == LangAS::opencl_global_device || + AddrSpace == LangAS::opencl_global_host || AddrSpace == LangAS::opencl_constant || AddrSpace == LangAS::opencl_local || AddrSpace >= LangAS::FirstTargetAddressSpace); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 0908218e98b8f..b4f1a7bfb01b9 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -7967,6 +7967,8 @@ static bool isAddressSpaceKind(const ParsedAttr &attr) { return attrKind == ParsedAttr::AT_AddressSpace || attrKind == ParsedAttr::AT_OpenCLPrivateAddressSpace || attrKind == ParsedAttr::AT_OpenCLGlobalAddressSpace || + attrKind == ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace || + attrKind == ParsedAttr::AT_OpenCLGlobalHostAddressSpace || attrKind == ParsedAttr::AT_OpenCLLocalAddressSpace || attrKind == ParsedAttr::AT_OpenCLConstantAddressSpace || attrKind == ParsedAttr::AT_OpenCLGenericAddressSpace; @@ -8048,6 +8050,8 @@ static void processTypeAttrs(TypeProcessingState &state, QualType &type, break; case ParsedAttr::AT_OpenCLPrivateAddressSpace: case ParsedAttr::AT_OpenCLGlobalAddressSpace: + case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: + case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: case ParsedAttr::AT_OpenCLLocalAddressSpace: case ParsedAttr::AT_OpenCLConstantAddressSpace: case ParsedAttr::AT_OpenCLGenericAddressSpace: diff --git a/clang/test/AST/language_address_space_attribute.cpp b/clang/test/AST/language_address_space_attribute.cpp index f9ab4612320b1..c6977212e60f5 100644 --- a/clang/test/AST/language_address_space_attribute.cpp +++ b/clang/test/AST/language_address_space_attribute.cpp @@ -10,6 +10,18 @@ void langas() { // CHECK: VarDecl {{.*}} z_global '__global int *' [[clang::opencl_global]] int *z_global; + // CHECK: VarDecl {{.*}} x_global_device '__global_device int *' + __attribute__((opencl_global_device)) int *x_global_device; + + // CHECK: VarDecl {{.*}} z_global_device '__global_device int *' + [[clang::opencl_global_device]] int *z_global_device; + + // CHECK: VarDecl {{.*}} x_global_host '__global_host int *' + __attribute__((opencl_global_host)) int *x_global_host; + + // CHECK: VarDecl {{.*}} z_global_host '__global_host int *' + [[clang::opencl_global_host]] int *z_global_host; + // CHECK: VarDecl {{.*}} x_local '__local int *' __attribute__((opencl_local)) int *x_local; diff --git a/clang/test/CodeGenCXX/mangle-address-space.cpp b/clang/test/CodeGenCXX/mangle-address-space.cpp index 2c5cdfc3dadbe..8719412798a01 100644 --- a/clang/test/CodeGenCXX/mangle-address-space.cpp +++ b/clang/test/CodeGenCXX/mangle-address-space.cpp @@ -43,6 +43,9 @@ void ocl_f0(char __private *p) { } struct ocl_OpaqueType; typedef ocl_OpaqueType __global * ocl_OpaqueTypePtr; +typedef ocl_OpaqueType __attribute__((opencl_global_host)) * ocl_OpaqueTypePtrH; +typedef ocl_OpaqueType +__attribute__((opencl_global_device)) * ocl_OpaqueTypePtrD; // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f0PU8CLglobal14ocl_OpaqueType // WINOCL-LABEL: define {{.*}}void @"?ocl_f0@@YAXPEAU?$_ASCLglobal@$$CAUocl_OpaqueType@@@__clang@@@Z" @@ -61,4 +64,12 @@ __constant float *ocl_f1(char __generic const *p) { return 0;} // CHECKOCL-LABEL: define {{.*}}float* @_Z6ocl_f2PU9CLgenericKc // WINOCL-LABEL: define {{.*}}float* @"?ocl_f2@@YAPEAU?$_ASCLgeneric@$$CAM@__clang@@QEAU?$_ASCLgeneric@$$CBD@2@@Z" __generic float *ocl_f2(__generic char const * const p) { return 0;} + +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU12CLglobalHost14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLglobalHost@$$CAUocl_OpaqueType@@@__clang@@@Z" +void ocl_f3(ocl_OpaqueTypePtrH) { } + +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU14CLglobalDevice14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLglobalDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" +void ocl_f4(ocl_OpaqueTypePtrD) { } #endif diff --git a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp index ed68cc853acc6..0c888cd0ead81 100644 --- a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp @@ -19,6 +19,10 @@ void tmpl(T t){} void usages() { // CHECK-DAG: [[GLOB:%[a-zA-Z0-9]+]] = alloca i32 addrspace(1)* __attribute__((opencl_global)) int *GLOB; + // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_global_device)) int *GLOBDEV; + // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9]+]] = alloca i32 addrspace(12)* + __attribute__((opencl_global_host)) int *GLOBHOST; // CHECK-DAG: [[LOC:%[a-zA-Z0-9]+]] = alloca i32 addrspace(3)* __attribute__((opencl_local)) int *LOC; // CHECK-DAG: [[NoAS:%[a-zA-Z0-9]+]] = alloca i32 addrspace(4)* @@ -35,6 +39,24 @@ void usages() { // CHECK-DAG: [[GLOB_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST2]]) +bar(*GLOBDEV); +// CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] +// CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* +// CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) +bar2(*GLOBDEV); +// CHECK-DAG: [[GLOBDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] +// CHECK-DAG: [[GLOBDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD2]] to i32 addrspace(4)* +// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST2]]) + +bar(*GLOBHOST); +// CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] +// CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* +// CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) +bar2(*GLOBHOST); +// CHECK-DAG: [[GLOBHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] +// CHECK-DAG: [[GLOBHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD2]] to i32 addrspace(4)* +// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST2]]) + bar(*LOC); // CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_REF]](i32 addrspace(3)* dereferenceable(4) [[LOC_LOAD]]) @@ -58,6 +80,22 @@ void usages() { // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD4]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOB_CAST4]]) + foo(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD3]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBDEV_CAST3]]) + foo2(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBDEV_CAST4]]) + foo(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD3]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBHOST_CAST3]]) + foo2(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBHOST_CAST4]]) foo(LOC); // CHECK-DAG: [[LOC_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_PTR]](i32 addrspace(3)* [[LOC_LOAD3]]) @@ -72,10 +110,16 @@ void usages() { // CHECK-DAG: [[NoAS_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(4)*, i32 addrspace(4)** [[NoAS]] // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[NoAS_LOAD4]]) - // Ensure that we still get 3 different template instantiations. + // Ensure that we still get 5 different template instantiations. tmpl(GLOB); // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: call spir_func void [[GLOB_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(1)* [[GLOB_LOAD4]]) + tmpl(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: call spir_func void [[GLOBDEV_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(11)* [[GLOBDEV_LOAD4]]) + tmpl(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: call spir_func void [[GLOBHOST_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(12)* [[GLOBHOST_LOAD4]]) tmpl(LOC); // CHECK-DAG: [[LOC_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(3)* [[LOC_LOAD5]]) @@ -88,6 +132,8 @@ void usages() { } // CHECK-DAG: define linkonce_odr spir_func void [[GLOB_TMPL]](i32 addrspace(1)* % +// CHECK-DAG: define linkonce_odr spir_func void [[GLOBDEV_TMPL]](i32 addrspace(11)* % +// CHECK-DAG: define linkonce_odr spir_func void [[GLOBHOST_TMPL]](i32 addrspace(12)* % // CHECK-DAG: define linkonce_odr spir_func void [[LOC_TMPL]](i32 addrspace(3)* % // CHECK-DAG: define linkonce_odr spir_func void [[PRIV_TMPL]](i32* % // CHECK-DAG: define linkonce_odr spir_func void [[GEN_TMPL]](i32 addrspace(4)* % @@ -97,6 +143,10 @@ void usages2() { // CHECK-DAG: [[PRIV:%[a-zA-Z0-9_]+]] = alloca i32* __attribute__((opencl_global)) int *GLOB; // CHECK-DAG: [[GLOB:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(1)* + __attribute__((opencl_global_device)) int *GLOBDEV; + // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_global_host)) int *GLOBHOST; + // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(12)* __attribute__((opencl_constant)) int *CONST; // CHECK-DAG: [[CONST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(2)* __attribute__((opencl_local)) int *LOCAL; @@ -110,6 +160,14 @@ void usages2() { // CHECK-DAG: [[GLOB_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST]]) + bar(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) + bar(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) bar2(*LOCAL); // CHECK-DAG: [[LOCAL_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOCAL]] // CHECK-DAG: [[LOCAL_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(3)* [[LOCAL_LOAD]] to i32 addrspace(4)* diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index 3f2be32d76fcd..13e5bdb03dac6 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -12,6 +12,8 @@ void tmpl(T *t){} void usages() { __attribute__((opencl_global)) int *GLOB; + __attribute__((opencl_global_device)) int *GLOB_DEV; + __attribute__((opencl_global_host)) int *GLOB_HOST; __attribute__((opencl_private)) int *PRIV; __attribute__((opencl_local)) int *LOC; int *NoAS; @@ -19,6 +21,12 @@ void usages() { bar(*GLOB); bar2(*GLOB); + bar(*GLOB_DEV); + bar2(*GLOB_DEV); + + bar(*GLOB_HOST); + bar2(*GLOB_HOST); + bar(*PRIV); bar2(*PRIV); @@ -30,6 +38,10 @@ void usages() { foo(GLOB); foo2(GLOB); + foo(GLOB_DEV); + foo2(GLOB_DEV); + foo(GLOB_HOST); + foo2(GLOB_HOST); foo(PRIV); foo2(PRIV); foo(NoAS); @@ -38,12 +50,18 @@ void usages() { foo2(LOC); tmpl(GLOB); + tmpl(GLOB_DEV); + tmpl(GLOB_HOST); tmpl(PRIV); tmpl(NoAS); tmpl(LOC); (void)static_cast(GLOB); (void)static_cast(GLOB); + (void)static_cast(GLOB_DEV); + (void)static_cast(GLOB_DEV); + (void)static_cast(GLOB_HOST); + (void)static_cast(GLOB_HOST); // FIXME: determine if we can warn on the below conversions. int *i = GLOB; void *v = GLOB; diff --git a/clang/test/SemaTemplate/address_space-dependent.cpp b/clang/test/SemaTemplate/address_space-dependent.cpp index 76cd338769eaa..fa6cc68bba419 100644 --- a/clang/test/SemaTemplate/address_space-dependent.cpp +++ b/clang/test/SemaTemplate/address_space-dependent.cpp @@ -43,7 +43,7 @@ void neg() { template void tooBig() { - __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388595)}} + __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388593)}} } template From 2de9d9abe17ac122806e8bbce23b8416bae67e56 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 11:07:24 +0300 Subject: [PATCH 02/11] Apply clang-format Signed-off-by: Dmitry Sidorov --- clang/lib/AST/ASTContext.cpp | 28 +++++----- clang/lib/AST/ItaniumMangle.cpp | 40 +++++++++---- clang/lib/Basic/Targets/NVPTX.h | 18 +++--- clang/lib/Basic/Targets/SPIR.h | 56 +++++++++---------- clang/lib/Basic/Targets/TCE.h | 10 ++-- clang/lib/CodeGen/CodeGenModule.cpp | 18 ++++-- .../test/CodeGenCXX/mangle-address-space.cpp | 7 ++- .../address-space-parameter-conversions.cpp | 32 +++++------ .../address-space-parameter-conversions.cpp | 8 +-- 9 files changed, 122 insertions(+), 95 deletions(-) diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index df01b67a4e295..85e0ec2e87c6e 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -919,20 +919,20 @@ static const LangASMap *getAddressSpaceMap(const TargetInfo &T, // The fake address space map must have a distinct entry for each // language-specific address space. static const unsigned FakeAddrSpaceMap[] = { - 0, // Default - 1, // opencl_global - 3, // opencl_local - 2, // opencl_constant - 0, // opencl_private - 4, // opencl_generic - 11,// opencl_global_device - 12,// opencl_global_host - 5, // cuda_device - 6, // cuda_constant - 7, // cuda_shared - 8, // ptr32_sptr - 9, // ptr32_uptr - 10 // ptr64 + 0, // Default + 1, // opencl_global + 3, // opencl_local + 2, // opencl_constant + 0, // opencl_private + 4, // opencl_generic + 11, // opencl_global_device + 12, // opencl_global_host + 5, // cuda_device + 6, // cuda_constant + 7, // cuda_shared + 8, // ptr32_sptr + 9, // ptr32_uptr + 10 // ptr64 }; return &FakeAddrSpaceMap; } else { diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 0d4a4ed76dd1c..6fb4c8893315f 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2389,17 +2389,37 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals, const DependentAddressSp // ::= "CL" [ "global" | "local" | "constant" | // "private"| "generic" | "global_device" | // "global_host" ] - case LangAS::opencl_global: ASString = "CLglobal"; break; - case LangAS::opencl_global_device: ASString = "CLglobalDevice"; break; - case LangAS::opencl_global_host: ASString = "CLglobalHost"; break; - case LangAS::opencl_local: ASString = "CLlocal"; break; - case LangAS::opencl_constant: ASString = "CLconstant"; break; - case LangAS::opencl_private: ASString = "CLprivate"; break; - case LangAS::opencl_generic: ASString = "CLgeneric"; break; + case LangAS::opencl_global: + ASString = "CLglobal"; + break; + case LangAS::opencl_global_device: + ASString = "CLglobalDevice"; + break; + case LangAS::opencl_global_host: + ASString = "CLglobalHost"; + break; + case LangAS::opencl_local: + ASString = "CLlocal"; + break; + case LangAS::opencl_constant: + ASString = "CLconstant"; + break; + case LangAS::opencl_private: + ASString = "CLprivate"; + break; + case LangAS::opencl_generic: + ASString = "CLgeneric"; + break; // ::= "CU" [ "device" | "constant" | "shared" ] - case LangAS::cuda_device: ASString = "CUdevice"; break; - case LangAS::cuda_constant: ASString = "CUconstant"; break; - case LangAS::cuda_shared: ASString = "CUshared"; break; + case LangAS::cuda_device: + ASString = "CUdevice"; + break; + case LangAS::cuda_constant: + ASString = "CUconstant"; + break; + case LangAS::cuda_shared: + ASString = "CUshared"; + break; // ::= [ "ptr32_sptr" | "ptr32_uptr" | "ptr64" ] case LangAS::ptr32_sptr: ASString = "ptr32_sptr"; diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index d200a41d3279b..ee9f8f1355cec 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -29,15 +29,15 @@ static const unsigned NVPTXAddrSpaceMap[] = { 4, // opencl_constant 0, // opencl_private // FIXME: generic has to be added to the target - 0, // opencl_generic - 11,// opencl_global_device - 12,// opencl_global_host - 1, // cuda_device - 4, // cuda_constant - 3, // cuda_shared - 0, // ptr32_sptr - 0, // ptr32_uptr - 0 // ptr64 + 0, // opencl_generic + 11, // opencl_global_device + 12, // opencl_global_host + 1, // cuda_device + 4, // cuda_constant + 3, // cuda_shared + 0, // ptr32_sptr + 0, // ptr32_uptr + 0 // ptr64 }; /// The DWARF address class. Taken from diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 8cd18fbb4ef87..9a3b2b960fef8 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -24,37 +24,37 @@ namespace clang { namespace targets { static const unsigned SPIRAddrSpaceMap[] = { - 0, // Default - 1, // opencl_global - 3, // opencl_local - 2, // opencl_constant - 0, // opencl_private - 4, // opencl_generic - 11,// opencl_global_device - 12,// opencl_global_host - 0, // cuda_device - 0, // cuda_constant - 0, // cuda_shared - 0, // ptr32_sptr - 0, // ptr32_uptr - 0 // ptr64 + 0, // Default + 1, // opencl_global + 3, // opencl_local + 2, // opencl_constant + 0, // opencl_private + 4, // opencl_generic + 11, // opencl_global_device + 12, // opencl_global_host + 0, // cuda_device + 0, // cuda_constant + 0, // cuda_shared + 0, // ptr32_sptr + 0, // ptr32_uptr + 0 // ptr64 }; static const unsigned SYCLAddrSpaceMap[] = { - 4, // Default - 1, // opencl_global - 3, // opencl_local - 2, // opencl_constant - 0, // opencl_private - 4, // opencl_generic - 11,// opencl_global_device - 12,// opencl_global_host - 0, // cuda_device - 0, // cuda_constant - 0, // cuda_shared - 0, // ptr32_sptr - 0, // ptr32_uptr - 0 // ptr64 + 4, // Default + 1, // opencl_global + 3, // opencl_local + 2, // opencl_constant + 0, // opencl_private + 4, // opencl_generic + 11, // opencl_global_device + 12, // opencl_global_host + 0, // cuda_device + 0, // cuda_constant + 0, // cuda_shared + 0, // ptr32_sptr + 0, // ptr32_uptr + 0 // ptr64 }; class LLVM_LIBRARY_VISIBILITY SPIRTargetInfo : public TargetInfo { diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index d21984855fb53..f8a597889af8c 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -30,11 +30,11 @@ namespace targets { // publicly available in http://tce.cs.tut.fi static const unsigned TCEOpenCLAddrSpaceMap[] = { - 0, // Default - 3, // opencl_global - 4, // opencl_local - 5, // opencl_constant - 0, // opencl_private + 0, // Default + 3, // opencl_global + 4, // opencl_local + 5, // opencl_constant + 0, // opencl_private 11, // opencl_global_device 12, // opencl_global_host // FIXME: generic has to be added to the target diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index c498fef00c8bd..0824e62d3254e 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1360,12 +1360,18 @@ static void removeImageAccessQualifier(std::string& TyName) { // (basically all single AS CPUs). static unsigned ArgInfoAddressSpace(LangAS AS) { switch (AS) { - case LangAS::opencl_global: return 1; - case LangAS::opencl_constant: return 2; - case LangAS::opencl_local: return 3; - case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. - case LangAS::opencl_global_device: return 11; - case LangAS::opencl_global_host: return 12; + case LangAS::opencl_global: + return 1; + case LangAS::opencl_constant: + return 2; + case LangAS::opencl_local: + return 3; + case LangAS::opencl_generic: + return 4; // Not in SPIR 2.0 specs. + case LangAS::opencl_global_device: + return 11; + case LangAS::opencl_global_host: + return 12; default: return 0; // Assume private. } diff --git a/clang/test/CodeGenCXX/mangle-address-space.cpp b/clang/test/CodeGenCXX/mangle-address-space.cpp index 8719412798a01..840ac493c9501 100644 --- a/clang/test/CodeGenCXX/mangle-address-space.cpp +++ b/clang/test/CodeGenCXX/mangle-address-space.cpp @@ -45,7 +45,8 @@ struct ocl_OpaqueType; typedef ocl_OpaqueType __global * ocl_OpaqueTypePtr; typedef ocl_OpaqueType __attribute__((opencl_global_host)) * ocl_OpaqueTypePtrH; typedef ocl_OpaqueType -__attribute__((opencl_global_device)) * ocl_OpaqueTypePtrD; + __attribute__((opencl_global_device)) * + ocl_OpaqueTypePtrD; // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f0PU8CLglobal14ocl_OpaqueType // WINOCL-LABEL: define {{.*}}void @"?ocl_f0@@YAXPEAU?$_ASCLglobal@$$CAUocl_OpaqueType@@@__clang@@@Z" @@ -67,9 +68,9 @@ __generic float *ocl_f2(__generic char const * const p) { return 0;} // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU12CLglobalHost14ocl_OpaqueType // WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLglobalHost@$$CAUocl_OpaqueType@@@__clang@@@Z" -void ocl_f3(ocl_OpaqueTypePtrH) { } +void ocl_f3(ocl_OpaqueTypePtrH) {} // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU14CLglobalDevice14ocl_OpaqueType // WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLglobalDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" -void ocl_f4(ocl_OpaqueTypePtrD) { } +void ocl_f4(ocl_OpaqueTypePtrD) {} #endif diff --git a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp index 0c888cd0ead81..25b8ef3ad427e 100644 --- a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp @@ -39,23 +39,23 @@ void usages() { // CHECK-DAG: [[GLOB_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST2]]) -bar(*GLOBDEV); -// CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] -// CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* -// CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) -bar2(*GLOBDEV); -// CHECK-DAG: [[GLOBDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] -// CHECK-DAG: [[GLOBDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD2]] to i32 addrspace(4)* -// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST2]]) + bar(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) + bar2(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST2]]) -bar(*GLOBHOST); -// CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] -// CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* -// CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) -bar2(*GLOBHOST); -// CHECK-DAG: [[GLOBHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] -// CHECK-DAG: [[GLOBHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD2]] to i32 addrspace(4)* -// CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST2]]) + bar(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) + bar2(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST2]]) bar(*LOC); // CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index 13e5bdb03dac6..e641c62af9007 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -58,10 +58,10 @@ void usages() { (void)static_cast(GLOB); (void)static_cast(GLOB); - (void)static_cast(GLOB_DEV); - (void)static_cast(GLOB_DEV); - (void)static_cast(GLOB_HOST); - (void)static_cast(GLOB_HOST); + (void)static_cast(GLOB_DEV); + (void)static_cast(GLOB_DEV); + (void)static_cast(GLOB_HOST); + (void)static_cast(GLOB_HOST); // FIXME: determine if we can warn on the below conversions. int *i = GLOB; void *v = GLOB; From f7be3d09ad49f491747816352e4ff3b6cc956499 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 12:06:07 +0300 Subject: [PATCH 03/11] Rename AS to usm_ Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 4 +- clang/include/clang/Basic/AddressSpaces.h | 4 +- clang/include/clang/Basic/Attr.td | 8 +- clang/include/clang/Basic/AttrDocs.td | 8 +- clang/include/clang/Sema/ParsedAttr.h | 8 +- clang/lib/AST/ASTContext.cpp | 4 +- clang/lib/AST/ItaniumMangle.cpp | 12 +- clang/lib/AST/MicrosoftMangle.cpp | 8 +- clang/lib/AST/TypePrinter.cpp | 12 +- clang/lib/Basic/Targets/AMDGPU.cpp | 8 +- clang/lib/Basic/Targets/NVPTX.h | 4 +- clang/lib/Basic/Targets/SPIR.h | 8 +- clang/lib/Basic/Targets/TCE.h | 4 +- clang/lib/Basic/Targets/X86.h | 4 +- clang/lib/CodeGen/CodeGenModule.cpp | 8 +- clang/lib/Sema/SemaType.cpp | 8 +- .../AST/language_address_space_attribute.cpp | 16 +-- .../test/CodeGenCXX/mangle-address-space.cpp | 12 +- .../address-space-parameter-conversions.cpp | 112 +++++++++--------- .../address-space-parameter-conversions.cpp | 32 ++--- 20 files changed, 142 insertions(+), 142 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 458e5363575b9..3b7e15bb0b476 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -494,8 +494,8 @@ class Qualifiers { (other.getAddressSpace() == LangAS::opencl_private || other.getAddressSpace() == LangAS::opencl_local || other.getAddressSpace() == LangAS::opencl_global || - other.getAddressSpace() == LangAS::opencl_global_device || - other.getAddressSpace() == LangAS::opencl_global_host)); + other.getAddressSpace() == LangAS::opencl_usm_device || + other.getAddressSpace() == LangAS::opencl_usm_host)); } /// Determines if these qualifiers compatibly include another set. diff --git a/clang/include/clang/Basic/AddressSpaces.h b/clang/include/clang/Basic/AddressSpaces.h index a9db52dfcc9c8..3fb080ea6d7bf 100644 --- a/clang/include/clang/Basic/AddressSpaces.h +++ b/clang/include/clang/Basic/AddressSpaces.h @@ -36,8 +36,8 @@ enum class LangAS : unsigned { opencl_constant, opencl_private, opencl_generic, - opencl_global_device, - opencl_global_host, + opencl_usm_device, + opencl_usm_host, // CUDA specific address spaces. cuda_device, diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 487b1451096e9..9bdfdcaa53888 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1294,13 +1294,13 @@ def OpenCLGlobalAddressSpace : TypeAttr { let Documentation = [OpenCLAddressSpaceGlobalDocs]; } -def OpenCLGlobalDeviceAddressSpace : TypeAttr { - let Spellings = [Clang<"opencl_global_device">]; +def OpenCLUSMDeviceAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_usm_device">]; let Documentation = [OpenCLAddressSpaceGlobalDeviceDocs]; } -def OpenCLGlobalHostAddressSpace : TypeAttr { - let Spellings = [Clang<"opencl_global_host">]; +def OpenCLUSMHostAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_usm_host">]; let Documentation = [OpenCLAddressSpaceGlobalHostDocs]; } diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 792b441613f86..d6dd9da2af0ad 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3547,9 +3547,9 @@ scope) variables and static local variable as well. def OpenCLAddressSpaceGlobalDeviceDocs : Documentation { let Category = DocOpenCLAddressSpaces; - let Heading = "[[clang::opencl_global_device]]"; + let Heading = "[[clang::opencl_usm_device]]"; let Content = [{ -The global_device address space attribute specifies that an object is allocated +The usm_device address space attribute specifies that an object is allocated in global memory on device. It is supposed to be used only in SYCL headers and not in the actual OpenCL/SYCL user code. It helps distinguishing USM pointers that access device memory and accessors that access global memory from those @@ -3559,9 +3559,9 @@ that access host memory. def OpenCLAddressSpaceGlobalHostDocs : Documentation { let Category = DocOpenCLAddressSpaces; - let Heading = "[[clang::opencl_global_host]]"; + let Heading = "[[clang::opencl_usm_host]]"; let Content = [{ -The global_host address space attribute specifies that an object is allocated in +The usm_host address space attribute specifies that an object is allocated in global memory on host. It is supposed to be used only in SYCL headers and not in the actual OpenCL/SYCL user code. It helps distinguishing USM pointers that access host memory from those that access device memory and from accessors that diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h index 8946b12ee03fc..5672fec1cb4da 100644 --- a/clang/include/clang/Sema/ParsedAttr.h +++ b/clang/include/clang/Sema/ParsedAttr.h @@ -606,10 +606,10 @@ class ParsedAttr final return LangAS::opencl_constant; case ParsedAttr::AT_OpenCLGlobalAddressSpace: return LangAS::opencl_global; - case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: - return LangAS::opencl_global_device; - case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: - return LangAS::opencl_global_host; + case ParsedAttr::AT_OpenCLUSMDeviceAddressSpace: + return LangAS::opencl_usm_device; + case ParsedAttr::AT_OpenCLUSMHostAddressSpace: + return LangAS::opencl_usm_host; case ParsedAttr::AT_OpenCLLocalAddressSpace: return LangAS::opencl_local; case ParsedAttr::AT_OpenCLPrivateAddressSpace: diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 85e0ec2e87c6e..81ab881357066 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -925,8 +925,8 @@ static const LangASMap *getAddressSpaceMap(const TargetInfo &T, 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_global_device - 12, // opencl_global_host + 11, // opencl_usm_device + 12, // opencl_usm_host 5, // cuda_device 6, // cuda_constant 7, // cuda_shared diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 6fb4c8893315f..39fd5b409d630 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2387,16 +2387,16 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals, const DependentAddressSp switch (AS) { default: llvm_unreachable("Not a language specific address space"); // ::= "CL" [ "global" | "local" | "constant" | - // "private"| "generic" | "global_device" | - // "global_host" ] + // "private"| "generic" | "usm_device" | + // "usm_host" ] case LangAS::opencl_global: ASString = "CLglobal"; break; - case LangAS::opencl_global_device: - ASString = "CLglobalDevice"; + case LangAS::opencl_usm_device: + ASString = "CLUSMDevice"; break; - case LangAS::opencl_global_host: - ASString = "CLglobalHost"; + case LangAS::opencl_usm_host: + ASString = "CLUSMHost"; break; case LangAS::opencl_local: ASString = "CLlocal"; diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 90f1f13ffeb3c..7d5decf0b4f14 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1823,11 +1823,11 @@ void MicrosoftCXXNameMangler::mangleAddressSpaceType(QualType T, case LangAS::opencl_global: Extra.mangleSourceName("_ASCLglobal"); break; - case LangAS::opencl_global_device: - Extra.mangleSourceName("_ASCLglobalDevice"); + case LangAS::opencl_usm_device: + Extra.mangleSourceName("_ASCLUSMDevice"); break; - case LangAS::opencl_global_host: - Extra.mangleSourceName("_ASCLglobalHost"); + case LangAS::opencl_usm_host: + Extra.mangleSourceName("_ASCLUSMHost"); break; case LangAS::opencl_local: Extra.mangleSourceName("_ASCLlocal"); diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index 0505d53d6f99d..b8dd2203d75cf 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -1577,8 +1577,8 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case attr::OpenCLPrivateAddressSpace: case attr::OpenCLGlobalAddressSpace: - case attr::OpenCLGlobalDeviceAddressSpace: - case attr::OpenCLGlobalHostAddressSpace: + case attr::OpenCLUSMDeviceAddressSpace: + case attr::OpenCLUSMHostAddressSpace: case attr::OpenCLLocalAddressSpace: case attr::OpenCLConstantAddressSpace: case attr::OpenCLGenericAddressSpace: @@ -1882,10 +1882,10 @@ std::string Qualifiers::getAddrSpaceAsString(LangAS AS) { return "__constant"; case LangAS::opencl_generic: return "__generic"; - case LangAS::opencl_global_device: - return "__global_device"; - case LangAS::opencl_global_host: - return "__global_host"; + case LangAS::opencl_usm_device: + return "__usm_device"; + case LangAS::opencl_usm_host: + return "__usm_host"; case LangAS::cuda_device: return "__device__"; case LangAS::cuda_constant: diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp index d5af8c3965356..7c5940e4a75c1 100644 --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -45,8 +45,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic - Global, // opencl_global_device - Global, // opencl_global_host + Global, // opencl_usm_device + Global, // opencl_usm_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared @@ -62,8 +62,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic - Global, // opencl_global_device - Global, // opencl_global_host + Global, // opencl_usm_device + Global, // opencl_usm_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index ee9f8f1355cec..528226f596e19 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -30,8 +30,8 @@ static const unsigned NVPTXAddrSpaceMap[] = { 0, // opencl_private // FIXME: generic has to be added to the target 0, // opencl_generic - 11, // opencl_global_device - 12, // opencl_global_host + 11, // opencl_usm_device + 12, // opencl_usm_host 1, // cuda_device 4, // cuda_constant 3, // cuda_shared diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 9a3b2b960fef8..f4a163c316a6c 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -30,8 +30,8 @@ static const unsigned SPIRAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_global_device - 12, // opencl_global_host + 11, // opencl_usm_device + 12, // opencl_usm_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared @@ -47,8 +47,8 @@ static const unsigned SYCLAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_global_device - 12, // opencl_global_host + 11, // opencl_usm_device + 12, // opencl_usm_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index f8a597889af8c..4890fbfa13f32 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -35,8 +35,8 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = { 4, // opencl_local 5, // opencl_constant 0, // opencl_private - 11, // opencl_global_device - 12, // opencl_global_host + 11, // opencl_usm_device + 12, // opencl_usm_host // FIXME: generic has to be added to the target 0, // opencl_generic 0, // cuda_device diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 2b2462f97af82..02393dae15b9f 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -29,8 +29,8 @@ static const unsigned X86AddrSpaceMap[] = { 0, // opencl_constant 0, // opencl_private 0, // opencl_generic - 0, // opencl_global_device - 0, // opencl_global_host + 0, // opencl_usm_device + 0, // opencl_usm_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 0824e62d3254e..09b9e4f547c58 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1368,9 +1368,9 @@ static unsigned ArgInfoAddressSpace(LangAS AS) { return 3; case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. - case LangAS::opencl_global_device: + case LangAS::opencl_usm_device: return 11; - case LangAS::opencl_global_host: + case LangAS::opencl_usm_host: return 12; default: return 0; // Assume private. @@ -3866,8 +3866,8 @@ LangAS CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D) { if (LangOpts.OpenCL) { AddrSpace = D ? D->getType().getAddressSpace() : LangAS::opencl_global; assert(AddrSpace == LangAS::opencl_global || - AddrSpace == LangAS::opencl_global_device || - AddrSpace == LangAS::opencl_global_host || + AddrSpace == LangAS::opencl_usm_device || + AddrSpace == LangAS::opencl_usm_host || AddrSpace == LangAS::opencl_constant || AddrSpace == LangAS::opencl_local || AddrSpace >= LangAS::FirstTargetAddressSpace); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index b4f1a7bfb01b9..76a2dfaf9bdc9 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -7967,8 +7967,8 @@ static bool isAddressSpaceKind(const ParsedAttr &attr) { return attrKind == ParsedAttr::AT_AddressSpace || attrKind == ParsedAttr::AT_OpenCLPrivateAddressSpace || attrKind == ParsedAttr::AT_OpenCLGlobalAddressSpace || - attrKind == ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace || - attrKind == ParsedAttr::AT_OpenCLGlobalHostAddressSpace || + attrKind == ParsedAttr::AT_OpenCLUSMDeviceAddressSpace || + attrKind == ParsedAttr::AT_OpenCLUSMHostAddressSpace || attrKind == ParsedAttr::AT_OpenCLLocalAddressSpace || attrKind == ParsedAttr::AT_OpenCLConstantAddressSpace || attrKind == ParsedAttr::AT_OpenCLGenericAddressSpace; @@ -8050,8 +8050,8 @@ static void processTypeAttrs(TypeProcessingState &state, QualType &type, break; case ParsedAttr::AT_OpenCLPrivateAddressSpace: case ParsedAttr::AT_OpenCLGlobalAddressSpace: - case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: - case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: + case ParsedAttr::AT_OpenCLUSMDeviceAddressSpace: + case ParsedAttr::AT_OpenCLUSMHostAddressSpace: case ParsedAttr::AT_OpenCLLocalAddressSpace: case ParsedAttr::AT_OpenCLConstantAddressSpace: case ParsedAttr::AT_OpenCLGenericAddressSpace: diff --git a/clang/test/AST/language_address_space_attribute.cpp b/clang/test/AST/language_address_space_attribute.cpp index c6977212e60f5..d2b5de0e1939f 100644 --- a/clang/test/AST/language_address_space_attribute.cpp +++ b/clang/test/AST/language_address_space_attribute.cpp @@ -10,17 +10,17 @@ void langas() { // CHECK: VarDecl {{.*}} z_global '__global int *' [[clang::opencl_global]] int *z_global; - // CHECK: VarDecl {{.*}} x_global_device '__global_device int *' - __attribute__((opencl_global_device)) int *x_global_device; + // CHECK: VarDecl {{.*}} x_usm_device '__usm_device int *' + __attribute__((opencl_usm_device)) int *x_usm_device; - // CHECK: VarDecl {{.*}} z_global_device '__global_device int *' - [[clang::opencl_global_device]] int *z_global_device; + // CHECK: VarDecl {{.*}} z_usm_device '__usm_device int *' + [[clang::opencl_usm_device]] int *z_usm_device; - // CHECK: VarDecl {{.*}} x_global_host '__global_host int *' - __attribute__((opencl_global_host)) int *x_global_host; + // CHECK: VarDecl {{.*}} x_usm_host '__usm_host int *' + __attribute__((opencl_usm_host)) int *x_usm_host; - // CHECK: VarDecl {{.*}} z_global_host '__global_host int *' - [[clang::opencl_global_host]] int *z_global_host; + // CHECK: VarDecl {{.*}} z_usm_host '__usm_host int *' + [[clang::opencl_usm_host]] int *z_usm_host; // CHECK: VarDecl {{.*}} x_local '__local int *' __attribute__((opencl_local)) int *x_local; diff --git a/clang/test/CodeGenCXX/mangle-address-space.cpp b/clang/test/CodeGenCXX/mangle-address-space.cpp index 840ac493c9501..1193d040cff06 100644 --- a/clang/test/CodeGenCXX/mangle-address-space.cpp +++ b/clang/test/CodeGenCXX/mangle-address-space.cpp @@ -43,9 +43,9 @@ void ocl_f0(char __private *p) { } struct ocl_OpaqueType; typedef ocl_OpaqueType __global * ocl_OpaqueTypePtr; -typedef ocl_OpaqueType __attribute__((opencl_global_host)) * ocl_OpaqueTypePtrH; +typedef ocl_OpaqueType __attribute__((opencl_usm_host)) * ocl_OpaqueTypePtrH; typedef ocl_OpaqueType - __attribute__((opencl_global_device)) * + __attribute__((opencl_usm_device)) * ocl_OpaqueTypePtrD; // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f0PU8CLglobal14ocl_OpaqueType @@ -66,11 +66,11 @@ __constant float *ocl_f1(char __generic const *p) { return 0;} // WINOCL-LABEL: define {{.*}}float* @"?ocl_f2@@YAPEAU?$_ASCLgeneric@$$CAM@__clang@@QEAU?$_ASCLgeneric@$$CBD@2@@Z" __generic float *ocl_f2(__generic char const * const p) { return 0;} -// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU12CLglobalHost14ocl_OpaqueType -// WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLglobalHost@$$CAUocl_OpaqueType@@@__clang@@@Z" +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU9CLUSMHost14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLUSMHost@$$CAUocl_OpaqueType@@@__clang@@@Z" void ocl_f3(ocl_OpaqueTypePtrH) {} -// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU14CLglobalDevice14ocl_OpaqueType -// WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLglobalDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU11CLUSMDevice14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLUSMDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" void ocl_f4(ocl_OpaqueTypePtrD) {} #endif diff --git a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp index 25b8ef3ad427e..79ba3f7318b50 100644 --- a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp @@ -19,10 +19,10 @@ void tmpl(T t){} void usages() { // CHECK-DAG: [[GLOB:%[a-zA-Z0-9]+]] = alloca i32 addrspace(1)* __attribute__((opencl_global)) int *GLOB; - // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9]+]] = alloca i32 addrspace(11)* - __attribute__((opencl_global_device)) int *GLOBDEV; - // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9]+]] = alloca i32 addrspace(12)* - __attribute__((opencl_global_host)) int *GLOBHOST; + // CHECK-DAG: [[USMDEV:%[a-zA-Z0-9]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_usm_device)) int *USMDEV; + // CHECK-DAG: [[USMHOST:%[a-zA-Z0-9]+]] = alloca i32 addrspace(12)* + __attribute__((opencl_usm_host)) int *USMHOST; // CHECK-DAG: [[LOC:%[a-zA-Z0-9]+]] = alloca i32 addrspace(3)* __attribute__((opencl_local)) int *LOC; // CHECK-DAG: [[NoAS:%[a-zA-Z0-9]+]] = alloca i32 addrspace(4)* @@ -39,23 +39,23 @@ void usages() { // CHECK-DAG: [[GLOB_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST2]]) - bar(*GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) - bar2(*GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: [[GLOBDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD2]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST2]]) + bar(*USMDEV); + // CHECK-DAG: [[USMDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST]]) + bar2(*USMDEV); + // CHECK-DAG: [[USMDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST2]]) - bar(*GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) - bar2(*GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: [[GLOBHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD2]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST2]]) + bar(*USMHOST); + // CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST]]) + bar2(*USMHOST); + // CHECK-DAG: [[USMHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST2]]) bar(*LOC); // CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] @@ -80,22 +80,22 @@ void usages() { // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD4]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOB_CAST4]]) - foo(GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: [[GLOBDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD3]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBDEV_CAST3]]) - foo2(GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: [[GLOBDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBDEV_CAST4]]) - foo(GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: [[GLOBHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD3]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBHOST_CAST3]]) - foo2(GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: [[GLOBHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBHOST_CAST4]]) + foo(USMDEV); + // CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST3]]) + foo2(USMDEV); + // CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST4]]) + foo(USMHOST); + // CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST3]]) + foo2(USMHOST); + // CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST4]]) foo(LOC); // CHECK-DAG: [[LOC_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_PTR]](i32 addrspace(3)* [[LOC_LOAD3]]) @@ -114,12 +114,12 @@ void usages() { tmpl(GLOB); // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: call spir_func void [[GLOB_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(1)* [[GLOB_LOAD4]]) - tmpl(GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: call spir_func void [[GLOBDEV_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(11)* [[GLOBDEV_LOAD4]]) - tmpl(GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: call spir_func void [[GLOBHOST_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(12)* [[GLOBHOST_LOAD4]]) + tmpl(USMDEV); + // CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: call spir_func void [[USMDEV_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(11)* [[USMDEV_LOAD4]]) + tmpl(USMHOST); + // CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: call spir_func void [[USMHOST_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(12)* [[USMHOST_LOAD4]]) tmpl(LOC); // CHECK-DAG: [[LOC_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(3)* [[LOC_LOAD5]]) @@ -132,8 +132,8 @@ void usages() { } // CHECK-DAG: define linkonce_odr spir_func void [[GLOB_TMPL]](i32 addrspace(1)* % -// CHECK-DAG: define linkonce_odr spir_func void [[GLOBDEV_TMPL]](i32 addrspace(11)* % -// CHECK-DAG: define linkonce_odr spir_func void [[GLOBHOST_TMPL]](i32 addrspace(12)* % +// CHECK-DAG: define linkonce_odr spir_func void [[USMDEV_TMPL]](i32 addrspace(11)* % +// CHECK-DAG: define linkonce_odr spir_func void [[USMHOST_TMPL]](i32 addrspace(12)* % // CHECK-DAG: define linkonce_odr spir_func void [[LOC_TMPL]](i32 addrspace(3)* % // CHECK-DAG: define linkonce_odr spir_func void [[PRIV_TMPL]](i32* % // CHECK-DAG: define linkonce_odr spir_func void [[GEN_TMPL]](i32 addrspace(4)* % @@ -143,10 +143,10 @@ void usages2() { // CHECK-DAG: [[PRIV:%[a-zA-Z0-9_]+]] = alloca i32* __attribute__((opencl_global)) int *GLOB; // CHECK-DAG: [[GLOB:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(1)* - __attribute__((opencl_global_device)) int *GLOBDEV; - // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(11)* - __attribute__((opencl_global_host)) int *GLOBHOST; - // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(12)* + __attribute__((opencl_usm_device)) int *USMDEV; + // CHECK-DAG: [[USMDEV:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_usm_host)) int *USMHOST; + // CHECK-DAG: [[USMHOST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(12)* __attribute__((opencl_constant)) int *CONST; // CHECK-DAG: [[CONST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(2)* __attribute__((opencl_local)) int *LOCAL; @@ -160,14 +160,14 @@ void usages2() { // CHECK-DAG: [[GLOB_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST]]) - bar(*GLOBDEV); - // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] - // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) - bar(*GLOBHOST); - // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] - // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) + bar(*USMDEV); + // CHECK-DAG: [[USMDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST]]) + bar(*USMHOST); + // CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST]]) bar2(*LOCAL); // CHECK-DAG: [[LOCAL_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOCAL]] // CHECK-DAG: [[LOCAL_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(3)* [[LOCAL_LOAD]] to i32 addrspace(4)* diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index e641c62af9007..8cbf0e6664865 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -12,8 +12,8 @@ void tmpl(T *t){} void usages() { __attribute__((opencl_global)) int *GLOB; - __attribute__((opencl_global_device)) int *GLOB_DEV; - __attribute__((opencl_global_host)) int *GLOB_HOST; + __attribute__((opencl_usm_device)) int *USMDEV; + __attribute__((opencl_usm_host)) int *USMHOST; __attribute__((opencl_private)) int *PRIV; __attribute__((opencl_local)) int *LOC; int *NoAS; @@ -21,11 +21,11 @@ void usages() { bar(*GLOB); bar2(*GLOB); - bar(*GLOB_DEV); - bar2(*GLOB_DEV); + bar(*USMDEV); + bar2(*USMDEV); - bar(*GLOB_HOST); - bar2(*GLOB_HOST); + bar(*USMHOST); + bar2(*USMHOST); bar(*PRIV); bar2(*PRIV); @@ -38,10 +38,10 @@ void usages() { foo(GLOB); foo2(GLOB); - foo(GLOB_DEV); - foo2(GLOB_DEV); - foo(GLOB_HOST); - foo2(GLOB_HOST); + foo(USMDEV); + foo2(USMDEV); + foo(USMHOST); + foo2(USMHOST); foo(PRIV); foo2(PRIV); foo(NoAS); @@ -50,18 +50,18 @@ void usages() { foo2(LOC); tmpl(GLOB); - tmpl(GLOB_DEV); - tmpl(GLOB_HOST); + tmpl(USMDEV); + tmpl(USMHOST); tmpl(PRIV); tmpl(NoAS); tmpl(LOC); (void)static_cast(GLOB); (void)static_cast(GLOB); - (void)static_cast(GLOB_DEV); - (void)static_cast(GLOB_DEV); - (void)static_cast(GLOB_HOST); - (void)static_cast(GLOB_HOST); + (void)static_cast(USMDEV); + (void)static_cast(USMDEV); + (void)static_cast(USMHOST); + (void)static_cast(USMHOST); // FIXME: determine if we can warn on the below conversions. int *i = GLOB; void *v = GLOB; From 5580c23901983965a8344d5285b916d11eedf46c Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 12:20:03 +0300 Subject: [PATCH 04/11] Align mapping for NVPTX and TCE targets with reality Signed-off-by: Dmitry Sidorov --- clang/lib/Basic/Targets/NVPTX.h | 4 ++-- clang/lib/Basic/Targets/TCE.h | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 528226f596e19..fc796741ea0d8 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -30,8 +30,8 @@ static const unsigned NVPTXAddrSpaceMap[] = { 0, // opencl_private // FIXME: generic has to be added to the target 0, // opencl_generic - 11, // opencl_usm_device - 12, // opencl_usm_host + 1, // opencl_usm_device + 1, // opencl_usm_host 1, // cuda_device 4, // cuda_constant 3, // cuda_shared diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index 4890fbfa13f32..93126760d1ea9 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -30,13 +30,13 @@ namespace targets { // publicly available in http://tce.cs.tut.fi static const unsigned TCEOpenCLAddrSpaceMap[] = { - 0, // Default - 3, // opencl_global - 4, // opencl_local - 5, // opencl_constant - 0, // opencl_private - 11, // opencl_usm_device - 12, // opencl_usm_host + 0, // Default + 3, // opencl_global + 4, // opencl_local + 5, // opencl_constant + 0, // opencl_private + 1, // opencl_usm_device + 1, // opencl_usm_host // FIXME: generic has to be added to the target 0, // opencl_generic 0, // cuda_device From c3bbb1baca9f99fa141fd2d83f2fb88caf749b43 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 13:09:46 +0300 Subject: [PATCH 05/11] Apply suggestions in doc Signed-off-by: Dmitry Sidorov --- clang/include/clang/Basic/Attr.td | 4 ++-- clang/include/clang/Basic/AttrDocs.td | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 9bdfdcaa53888..6c0030eab0991 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1296,12 +1296,12 @@ def OpenCLGlobalAddressSpace : TypeAttr { def OpenCLUSMDeviceAddressSpace : TypeAttr { let Spellings = [Clang<"opencl_usm_device">]; - let Documentation = [OpenCLAddressSpaceGlobalDeviceDocs]; + let Documentation = [OpenCLUSMAddressSpacesDocs]; } def OpenCLUSMHostAddressSpace : TypeAttr { let Spellings = [Clang<"opencl_usm_host">]; - let Documentation = [OpenCLAddressSpaceGlobalHostDocs]; + let Documentation = [OpenCLUSMAddressSpacesDocs]; } def OpenCLLocalAddressSpace : TypeAttr { diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index d6dd9da2af0ad..9303e9ce8bb88 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3545,15 +3545,14 @@ scope) variables and static local variable as well. }]; } -def OpenCLAddressSpaceGlobalDeviceDocs : Documentation { +def OpenCLUSMAddressSpacesDocs : Documentation { let Category = DocOpenCLAddressSpaces; - let Heading = "[[clang::opencl_usm_device]]"; + let Heading = "[[clang::opencl_usm_device]], [[clang::opencl_usm_host]]"; let Content = [{ -The usm_device address space attribute specifies that an object is allocated -in global memory on device. It is supposed to be used only in SYCL headers and -not in the actual OpenCL/SYCL user code. It helps distinguishing USM pointers -that access device memory and accessors that access global memory from those -that access host memory. +The (usm_device) and (usm_host) address space attributes specify that an object +is allocated in global memory on the device/host. It helps distinguishing USM +pointers that access device memory and accessors that access global memory from +those that access host memory. }]; } From c1df2e1d410e35193c5b8910700370254757ed28 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 16:44:25 +0300 Subject: [PATCH 06/11] Allow usm_device and usm_host to opencl_global convertion Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 4 ++ .../address-space-parameter-conversions.cpp | 40 ++++++++++++++----- .../address-space-parameter-conversions.cpp | 8 +++- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 3b7e15bb0b476..6cbc3889d5b03 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -480,6 +480,10 @@ class Qualifiers { // Otherwise in OpenCLC v2.0 s6.5.5: every address space except // for __constant can be used as __generic. (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || + // For USM extension we define usm_device and usm_host addres spaces, + // which are a subset of __global. + (A == LangAS::opencl_global && (B == LangAS::opencl_usm_device || + B == LangAS::opencl_usm_host)) || // Consider pointer size address spaces to be equivalent to default. ((isPtrSizeAddressSpace(A) || A == LangAS::Default) && (isPtrSizeAddressSpace(B) || B == LangAS::Default)); diff --git a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp index 79ba3f7318b50..7979764242da4 100644 --- a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp @@ -5,12 +5,16 @@ void bar2(int & Data) {} // CHECK-DAG: define spir_func void @[[RAW_REF2:[a-zA-Z0-9_]+]](i32 addrspace(4)* dereferenceable(4) % void bar(__attribute__((opencl_local)) int &Data) {} // CHECK-DAG: define spir_func void [[LOC_REF:@[a-zA-Z0-9_]+]](i32 addrspace(3)* dereferenceable(4) % +void bar3(__attribute__((opencl_global)) int &Data) {} +// CHECK-DAG: define spir_func void @[[GLOB_REF:[a-zA-Z0-9_]+]](i32 addrspace(1)* dereferenceable(4) % void foo(int * Data) {} // CHECK-DAG: define spir_func void @[[RAW_PTR:[a-zA-Z0-9_]+]](i32 addrspace(4)* % void foo2(int * Data) {} // CHECK-DAG: define spir_func void @[[RAW_PTR2:[a-zA-Z0-9_]+]](i32 addrspace(4)* % void foo(__attribute__((opencl_local)) int *Data) {} // CHECK-DAG: define spir_func void [[LOC_PTR:@[a-zA-Z0-9_]+]](i32 addrspace(3)* % +void foo3(__attribute__((opencl_global)) int *Data) {} +// CHECK-DAG: define spir_func void @[[GLOB_PTR:[a-zA-Z0-9_]+]](i32 addrspace(1)* % template void tmpl(T t){} @@ -47,6 +51,10 @@ void usages() { // CHECK-DAG: [[USMDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] // CHECK-DAG: [[USMDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST2]]) + bar3(*USMDEV); + // CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMDEV_CAST3]]) bar(*USMHOST); // CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] @@ -56,6 +64,10 @@ void usages() { // CHECK-DAG: [[USMHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] // CHECK-DAG: [[USMHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST2]]) + bar3(*USMHOST); + // CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMHOST_CAST3]]) bar(*LOC); // CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] @@ -81,21 +93,29 @@ void usages() { // CHECK-DAG: [[GLOB_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD4]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOB_CAST4]]) foo(USMDEV); - // CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST3]]) - foo2(USMDEV); // CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] // CHECK-DAG: [[USMDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST4]]) + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST4]]) + foo2(USMDEV); + // CHECK-DAG: [[USMDEV_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD5]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST5]]) + foo3(USMDEV); + // CHECK-DAG: [[USMDEV_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] + // CHECK-DAG: [[USMDEV_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD6]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMDEV_CAST6]]) foo(USMHOST); - // CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST3]]) - foo2(USMHOST); // CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] // CHECK-DAG: [[USMHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST4]]) + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST4]]) + foo2(USMHOST); + // CHECK-DAG: [[USMHOST_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD5]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST5]]) + foo3(USMHOST); + // CHECK-DAG: [[USMHOST_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] + // CHECK-DAG: [[USMHOST_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD6]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMHOST_CAST6]]) foo(LOC); // CHECK-DAG: [[LOC_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_PTR]](i32 addrspace(3)* [[LOC_LOAD3]]) diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index 8cbf0e6664865..c8b4d342cf8eb 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -3,9 +3,11 @@ void bar(int & Data) {} void bar2(int & Data) {} void bar(__attribute__((opencl_private)) int & Data) {} +void bar3(__attribute__((opencl_global)) int & Data) {} void foo(int * Data) {} void foo2(int * Data) {} void foo(__attribute__((opencl_private)) int * Data) {} +void foo3(__attribute__((opencl_global)) int * Data) {} template void tmpl(T *t){} @@ -23,9 +25,11 @@ void usages() { bar(*USMDEV); bar2(*USMDEV); + bar3(*USMDEV); bar(*USMHOST); bar2(*USMHOST); + bar3(*USMHOST); bar(*PRIV); bar2(*PRIV); @@ -40,8 +44,10 @@ void usages() { foo2(GLOB); foo(USMDEV); foo2(USMDEV); - foo(USMHOST); + foo3(USMDEV); + foo(USMDEV); foo2(USMHOST); + foo3(USMHOST); foo(PRIV); foo2(PRIV); foo(NoAS); From 3d26c97faa99a2c9bb53d0025930e50fbd561832 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 18:29:29 +0300 Subject: [PATCH 07/11] Fixed missing stuff Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 4 ++-- clang/include/clang/Basic/AttrDocs.td | 12 ------------ clang/lib/Basic/Targets/NVPTX.h | 18 +++++++++--------- .../address-space-parameter-conversions.cpp | 4 ++-- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 6cbc3889d5b03..895889f619847 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -482,8 +482,8 @@ class Qualifiers { (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || // For USM extension we define usm_device and usm_host addres spaces, // which are a subset of __global. - (A == LangAS::opencl_global && (B == LangAS::opencl_usm_device || - B == LangAS::opencl_usm_host)) || + (A == LangAS::opencl_global && + (B == LangAS::opencl_usm_device || B == LangAS::opencl_usm_host)) || // Consider pointer size address spaces to be equivalent to default. ((isPtrSizeAddressSpace(A) || A == LangAS::Default) && (isPtrSizeAddressSpace(B) || B == LangAS::Default)); diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 9303e9ce8bb88..ae6f183298c11 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3556,18 +3556,6 @@ those that access host memory. }]; } -def OpenCLAddressSpaceGlobalHostDocs : Documentation { - let Category = DocOpenCLAddressSpaces; - let Heading = "[[clang::opencl_usm_host]]"; - let Content = [{ -The usm_host address space attribute specifies that an object is allocated in -global memory on host. It is supposed to be used only in SYCL headers and not in -the actual OpenCL/SYCL user code. It helps distinguishing USM pointers that -access host memory from those that access device memory and from accessors that -access global memory. - }]; -} - def OpenCLAddressSpaceLocalDocs : Documentation { let Category = DocOpenCLAddressSpaces; let Heading = "__local, local, [[clang::opencl_local]]"; diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index fc796741ea0d8..71216e790a62e 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -29,15 +29,15 @@ static const unsigned NVPTXAddrSpaceMap[] = { 4, // opencl_constant 0, // opencl_private // FIXME: generic has to be added to the target - 0, // opencl_generic - 1, // opencl_usm_device - 1, // opencl_usm_host - 1, // cuda_device - 4, // cuda_constant - 3, // cuda_shared - 0, // ptr32_sptr - 0, // ptr32_uptr - 0 // ptr64 + 0, // opencl_generic + 1, // opencl_usm_device + 1, // opencl_usm_host + 1, // cuda_device + 4, // cuda_constant + 3, // cuda_shared + 0, // ptr32_sptr + 0, // ptr32_uptr + 0 // ptr64 }; /// The DWARF address class. Taken from diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index c8b4d342cf8eb..c6db01ecb5940 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -3,11 +3,11 @@ void bar(int & Data) {} void bar2(int & Data) {} void bar(__attribute__((opencl_private)) int & Data) {} -void bar3(__attribute__((opencl_global)) int & Data) {} +void bar3(__attribute__((opencl_global)) int &Data) {} void foo(int * Data) {} void foo2(int * Data) {} void foo(__attribute__((opencl_private)) int * Data) {} -void foo3(__attribute__((opencl_global)) int * Data) {} +void foo3(__attribute__((opencl_global)) int *Data) {} template void tmpl(T *t){} From fab3c1bf29954d2105f821da21d521ba12d4c1dd Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Tue, 19 May 2020 20:23:52 +0300 Subject: [PATCH 08/11] Fix typo Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 895889f619847..1716872901b0d 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -480,8 +480,8 @@ class Qualifiers { // Otherwise in OpenCLC v2.0 s6.5.5: every address space except // for __constant can be used as __generic. (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || - // For USM extension we define usm_device and usm_host addres spaces, - // which are a subset of __global. + // For USM extension we define usm_device and usm_host address + // spaces, which are a subset of __global. (A == LangAS::opencl_global && (B == LangAS::opencl_usm_device || B == LangAS::opencl_usm_host)) || // Consider pointer size address spaces to be equivalent to default. From 08a6e915eca3f8a8d93b641d086314c1db1a2d36 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Mon, 1 Jun 2020 21:06:12 +0300 Subject: [PATCH 09/11] Rename the pointers back Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 10 +- clang/include/clang/Basic/AddressSpaces.h | 4 +- clang/include/clang/Basic/Attr.td | 8 +- clang/include/clang/Basic/AttrDocs.td | 10 +- clang/include/clang/Sema/ParsedAttr.h | 8 +- clang/lib/AST/ASTContext.cpp | 4 +- clang/lib/AST/ItaniumMangle.cpp | 8 +- clang/lib/AST/MicrosoftMangle.cpp | 4 +- clang/lib/AST/TypePrinter.cpp | 12 +- clang/lib/Basic/Targets/AMDGPU.cpp | 8 +- clang/lib/Basic/Targets/NVPTX.h | 4 +- clang/lib/Basic/Targets/SPIR.h | 8 +- clang/lib/Basic/Targets/TCE.h | 4 +- clang/lib/Basic/Targets/X86.h | 4 +- clang/lib/CodeGen/CodeGenModule.cpp | 8 +- clang/lib/Sema/SemaType.cpp | 8 +- .../AST/language_address_space_attribute.cpp | 16 +- .../test/CodeGenCXX/mangle-address-space.cpp | 4 +- .../address-space-parameter-conversions.cpp | 144 +++++++++--------- .../address-space-parameter-conversions.cpp | 40 ++--- 20 files changed, 158 insertions(+), 158 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 1716872901b0d..a41bf08bcfd49 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -480,10 +480,10 @@ class Qualifiers { // Otherwise in OpenCLC v2.0 s6.5.5: every address space except // for __constant can be used as __generic. (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || - // For USM extension we define usm_device and usm_host address + // For USM extension we define global_device and global_host address // spaces, which are a subset of __global. - (A == LangAS::opencl_global && - (B == LangAS::opencl_usm_device || B == LangAS::opencl_usm_host)) || + (A == LangAS::opencl_global && (B == LangAS::opencl_global_device || + B == LangAS::opencl_global_host)) || // Consider pointer size address spaces to be equivalent to default. ((isPtrSizeAddressSpace(A) || A == LangAS::Default) && (isPtrSizeAddressSpace(B) || B == LangAS::Default)); @@ -498,8 +498,8 @@ class Qualifiers { (other.getAddressSpace() == LangAS::opencl_private || other.getAddressSpace() == LangAS::opencl_local || other.getAddressSpace() == LangAS::opencl_global || - other.getAddressSpace() == LangAS::opencl_usm_device || - other.getAddressSpace() == LangAS::opencl_usm_host)); + other.getAddressSpace() == LangAS::opencl_global_device || + other.getAddressSpace() == LangAS::opencl_global_host)); } /// Determines if these qualifiers compatibly include another set. diff --git a/clang/include/clang/Basic/AddressSpaces.h b/clang/include/clang/Basic/AddressSpaces.h index 3fb080ea6d7bf..a9db52dfcc9c8 100644 --- a/clang/include/clang/Basic/AddressSpaces.h +++ b/clang/include/clang/Basic/AddressSpaces.h @@ -36,8 +36,8 @@ enum class LangAS : unsigned { opencl_constant, opencl_private, opencl_generic, - opencl_usm_device, - opencl_usm_host, + opencl_global_device, + opencl_global_host, // CUDA specific address spaces. cuda_device, diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 6c0030eab0991..7d94d9fa64459 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1294,13 +1294,13 @@ def OpenCLGlobalAddressSpace : TypeAttr { let Documentation = [OpenCLAddressSpaceGlobalDocs]; } -def OpenCLUSMDeviceAddressSpace : TypeAttr { - let Spellings = [Clang<"opencl_usm_device">]; +def OpenCLGlobalDeviceAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_global_device">]; let Documentation = [OpenCLUSMAddressSpacesDocs]; } -def OpenCLUSMHostAddressSpace : TypeAttr { - let Spellings = [Clang<"opencl_usm_host">]; +def OpenCLGlobalHostAddressSpace : TypeAttr { + let Spellings = [Clang<"opencl_global_host">]; let Documentation = [OpenCLUSMAddressSpacesDocs]; } diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index ae6f183298c11..4180518342244 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3547,12 +3547,12 @@ scope) variables and static local variable as well. def OpenCLUSMAddressSpacesDocs : Documentation { let Category = DocOpenCLAddressSpaces; - let Heading = "[[clang::opencl_usm_device]], [[clang::opencl_usm_host]]"; + let Heading = "[[clang::opencl_global_device]], [[clang::opencl_global_host]]"; let Content = [{ -The (usm_device) and (usm_host) address space attributes specify that an object -is allocated in global memory on the device/host. It helps distinguishing USM -pointers that access device memory and accessors that access global memory from -those that access host memory. +The (global_device) and (global_host) address space attributes specify that an +object is allocated in global memory on the device/host. It helps distinguishing +USM pointers that access device memory and accessors that access global memory +from those that access host memory. }]; } diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h index 5672fec1cb4da..8946b12ee03fc 100644 --- a/clang/include/clang/Sema/ParsedAttr.h +++ b/clang/include/clang/Sema/ParsedAttr.h @@ -606,10 +606,10 @@ class ParsedAttr final return LangAS::opencl_constant; case ParsedAttr::AT_OpenCLGlobalAddressSpace: return LangAS::opencl_global; - case ParsedAttr::AT_OpenCLUSMDeviceAddressSpace: - return LangAS::opencl_usm_device; - case ParsedAttr::AT_OpenCLUSMHostAddressSpace: - return LangAS::opencl_usm_host; + case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: + return LangAS::opencl_global_device; + case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: + return LangAS::opencl_global_host; case ParsedAttr::AT_OpenCLLocalAddressSpace: return LangAS::opencl_local; case ParsedAttr::AT_OpenCLPrivateAddressSpace: diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 81ab881357066..85e0ec2e87c6e 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -925,8 +925,8 @@ static const LangASMap *getAddressSpaceMap(const TargetInfo &T, 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_usm_device - 12, // opencl_usm_host + 11, // opencl_global_device + 12, // opencl_global_host 5, // cuda_device 6, // cuda_constant 7, // cuda_shared diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 39fd5b409d630..e4575d0437e73 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2387,15 +2387,15 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals, const DependentAddressSp switch (AS) { default: llvm_unreachable("Not a language specific address space"); // ::= "CL" [ "global" | "local" | "constant" | - // "private"| "generic" | "usm_device" | - // "usm_host" ] + // "private"| "generic" | "global_device" | + // "global_host" ] case LangAS::opencl_global: ASString = "CLglobal"; break; - case LangAS::opencl_usm_device: + case LangAS::opencl_global_device: ASString = "CLUSMDevice"; break; - case LangAS::opencl_usm_host: + case LangAS::opencl_global_host: ASString = "CLUSMHost"; break; case LangAS::opencl_local: diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 7d5decf0b4f14..65a7a723aaa6d 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1823,10 +1823,10 @@ void MicrosoftCXXNameMangler::mangleAddressSpaceType(QualType T, case LangAS::opencl_global: Extra.mangleSourceName("_ASCLglobal"); break; - case LangAS::opencl_usm_device: + case LangAS::opencl_global_device: Extra.mangleSourceName("_ASCLUSMDevice"); break; - case LangAS::opencl_usm_host: + case LangAS::opencl_global_host: Extra.mangleSourceName("_ASCLUSMHost"); break; case LangAS::opencl_local: diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index b8dd2203d75cf..0505d53d6f99d 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -1577,8 +1577,8 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case attr::OpenCLPrivateAddressSpace: case attr::OpenCLGlobalAddressSpace: - case attr::OpenCLUSMDeviceAddressSpace: - case attr::OpenCLUSMHostAddressSpace: + case attr::OpenCLGlobalDeviceAddressSpace: + case attr::OpenCLGlobalHostAddressSpace: case attr::OpenCLLocalAddressSpace: case attr::OpenCLConstantAddressSpace: case attr::OpenCLGenericAddressSpace: @@ -1882,10 +1882,10 @@ std::string Qualifiers::getAddrSpaceAsString(LangAS AS) { return "__constant"; case LangAS::opencl_generic: return "__generic"; - case LangAS::opencl_usm_device: - return "__usm_device"; - case LangAS::opencl_usm_host: - return "__usm_host"; + case LangAS::opencl_global_device: + return "__global_device"; + case LangAS::opencl_global_host: + return "__global_host"; case LangAS::cuda_device: return "__device__"; case LangAS::cuda_constant: diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp index 7c5940e4a75c1..d5af8c3965356 100644 --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -45,8 +45,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic - Global, // opencl_usm_device - Global, // opencl_usm_host + Global, // opencl_global_device + Global, // opencl_global_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared @@ -62,8 +62,8 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = { Constant, // opencl_constant Private, // opencl_private Generic, // opencl_generic - Global, // opencl_usm_device - Global, // opencl_usm_host + Global, // opencl_global_device + Global, // opencl_global_host Global, // cuda_device Constant, // cuda_constant Local, // cuda_shared diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 71216e790a62e..194baa411d623 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -30,8 +30,8 @@ static const unsigned NVPTXAddrSpaceMap[] = { 0, // opencl_private // FIXME: generic has to be added to the target 0, // opencl_generic - 1, // opencl_usm_device - 1, // opencl_usm_host + 1, // opencl_global_device + 1, // opencl_global_host 1, // cuda_device 4, // cuda_constant 3, // cuda_shared diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index f4a163c316a6c..9a3b2b960fef8 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -30,8 +30,8 @@ static const unsigned SPIRAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_usm_device - 12, // opencl_usm_host + 11, // opencl_global_device + 12, // opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared @@ -47,8 +47,8 @@ static const unsigned SYCLAddrSpaceMap[] = { 2, // opencl_constant 0, // opencl_private 4, // opencl_generic - 11, // opencl_usm_device - 12, // opencl_usm_host + 11, // opencl_global_device + 12, // opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h index 93126760d1ea9..445fe4fe72936 100644 --- a/clang/lib/Basic/Targets/TCE.h +++ b/clang/lib/Basic/Targets/TCE.h @@ -35,8 +35,8 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = { 4, // opencl_local 5, // opencl_constant 0, // opencl_private - 1, // opencl_usm_device - 1, // opencl_usm_host + 1, // opencl_global_device + 1, // opencl_global_host // FIXME: generic has to be added to the target 0, // opencl_generic 0, // cuda_device diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 02393dae15b9f..2b2462f97af82 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -29,8 +29,8 @@ static const unsigned X86AddrSpaceMap[] = { 0, // opencl_constant 0, // opencl_private 0, // opencl_generic - 0, // opencl_usm_device - 0, // opencl_usm_host + 0, // opencl_global_device + 0, // opencl_global_host 0, // cuda_device 0, // cuda_constant 0, // cuda_shared diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 09b9e4f547c58..0824e62d3254e 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1368,9 +1368,9 @@ static unsigned ArgInfoAddressSpace(LangAS AS) { return 3; case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. - case LangAS::opencl_usm_device: + case LangAS::opencl_global_device: return 11; - case LangAS::opencl_usm_host: + case LangAS::opencl_global_host: return 12; default: return 0; // Assume private. @@ -3866,8 +3866,8 @@ LangAS CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D) { if (LangOpts.OpenCL) { AddrSpace = D ? D->getType().getAddressSpace() : LangAS::opencl_global; assert(AddrSpace == LangAS::opencl_global || - AddrSpace == LangAS::opencl_usm_device || - AddrSpace == LangAS::opencl_usm_host || + AddrSpace == LangAS::opencl_global_device || + AddrSpace == LangAS::opencl_global_host || AddrSpace == LangAS::opencl_constant || AddrSpace == LangAS::opencl_local || AddrSpace >= LangAS::FirstTargetAddressSpace); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 76a2dfaf9bdc9..b4f1a7bfb01b9 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -7967,8 +7967,8 @@ static bool isAddressSpaceKind(const ParsedAttr &attr) { return attrKind == ParsedAttr::AT_AddressSpace || attrKind == ParsedAttr::AT_OpenCLPrivateAddressSpace || attrKind == ParsedAttr::AT_OpenCLGlobalAddressSpace || - attrKind == ParsedAttr::AT_OpenCLUSMDeviceAddressSpace || - attrKind == ParsedAttr::AT_OpenCLUSMHostAddressSpace || + attrKind == ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace || + attrKind == ParsedAttr::AT_OpenCLGlobalHostAddressSpace || attrKind == ParsedAttr::AT_OpenCLLocalAddressSpace || attrKind == ParsedAttr::AT_OpenCLConstantAddressSpace || attrKind == ParsedAttr::AT_OpenCLGenericAddressSpace; @@ -8050,8 +8050,8 @@ static void processTypeAttrs(TypeProcessingState &state, QualType &type, break; case ParsedAttr::AT_OpenCLPrivateAddressSpace: case ParsedAttr::AT_OpenCLGlobalAddressSpace: - case ParsedAttr::AT_OpenCLUSMDeviceAddressSpace: - case ParsedAttr::AT_OpenCLUSMHostAddressSpace: + case ParsedAttr::AT_OpenCLGlobalDeviceAddressSpace: + case ParsedAttr::AT_OpenCLGlobalHostAddressSpace: case ParsedAttr::AT_OpenCLLocalAddressSpace: case ParsedAttr::AT_OpenCLConstantAddressSpace: case ParsedAttr::AT_OpenCLGenericAddressSpace: diff --git a/clang/test/AST/language_address_space_attribute.cpp b/clang/test/AST/language_address_space_attribute.cpp index d2b5de0e1939f..c6977212e60f5 100644 --- a/clang/test/AST/language_address_space_attribute.cpp +++ b/clang/test/AST/language_address_space_attribute.cpp @@ -10,17 +10,17 @@ void langas() { // CHECK: VarDecl {{.*}} z_global '__global int *' [[clang::opencl_global]] int *z_global; - // CHECK: VarDecl {{.*}} x_usm_device '__usm_device int *' - __attribute__((opencl_usm_device)) int *x_usm_device; + // CHECK: VarDecl {{.*}} x_global_device '__global_device int *' + __attribute__((opencl_global_device)) int *x_global_device; - // CHECK: VarDecl {{.*}} z_usm_device '__usm_device int *' - [[clang::opencl_usm_device]] int *z_usm_device; + // CHECK: VarDecl {{.*}} z_global_device '__global_device int *' + [[clang::opencl_global_device]] int *z_global_device; - // CHECK: VarDecl {{.*}} x_usm_host '__usm_host int *' - __attribute__((opencl_usm_host)) int *x_usm_host; + // CHECK: VarDecl {{.*}} x_global_host '__global_host int *' + __attribute__((opencl_global_host)) int *x_global_host; - // CHECK: VarDecl {{.*}} z_usm_host '__usm_host int *' - [[clang::opencl_usm_host]] int *z_usm_host; + // CHECK: VarDecl {{.*}} z_global_host '__global_host int *' + [[clang::opencl_global_host]] int *z_global_host; // CHECK: VarDecl {{.*}} x_local '__local int *' __attribute__((opencl_local)) int *x_local; diff --git a/clang/test/CodeGenCXX/mangle-address-space.cpp b/clang/test/CodeGenCXX/mangle-address-space.cpp index 1193d040cff06..cf1afc4564556 100644 --- a/clang/test/CodeGenCXX/mangle-address-space.cpp +++ b/clang/test/CodeGenCXX/mangle-address-space.cpp @@ -43,9 +43,9 @@ void ocl_f0(char __private *p) { } struct ocl_OpaqueType; typedef ocl_OpaqueType __global * ocl_OpaqueTypePtr; -typedef ocl_OpaqueType __attribute__((opencl_usm_host)) * ocl_OpaqueTypePtrH; +typedef ocl_OpaqueType __attribute__((opencl_global_host)) * ocl_OpaqueTypePtrH; typedef ocl_OpaqueType - __attribute__((opencl_usm_device)) * + __attribute__((opencl_global_device)) * ocl_OpaqueTypePtrD; // CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f0PU8CLglobal14ocl_OpaqueType diff --git a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp index 7979764242da4..b3f2a6a968961 100644 --- a/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/CodeGenSYCL/address-space-parameter-conversions.cpp @@ -23,10 +23,10 @@ void tmpl(T t){} void usages() { // CHECK-DAG: [[GLOB:%[a-zA-Z0-9]+]] = alloca i32 addrspace(1)* __attribute__((opencl_global)) int *GLOB; - // CHECK-DAG: [[USMDEV:%[a-zA-Z0-9]+]] = alloca i32 addrspace(11)* - __attribute__((opencl_usm_device)) int *USMDEV; - // CHECK-DAG: [[USMHOST:%[a-zA-Z0-9]+]] = alloca i32 addrspace(12)* - __attribute__((opencl_usm_host)) int *USMHOST; + // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_global_device)) int *GLOBDEV; + // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9]+]] = alloca i32 addrspace(12)* + __attribute__((opencl_global_host)) int *GLOBHOST; // CHECK-DAG: [[LOC:%[a-zA-Z0-9]+]] = alloca i32 addrspace(3)* __attribute__((opencl_local)) int *LOC; // CHECK-DAG: [[NoAS:%[a-zA-Z0-9]+]] = alloca i32 addrspace(4)* @@ -43,31 +43,31 @@ void usages() { // CHECK-DAG: [[GLOB_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD2]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST2]]) - bar(*USMDEV); - // CHECK-DAG: [[USMDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST]]) - bar2(*USMDEV); - // CHECK-DAG: [[USMDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD2]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST2]]) - bar3(*USMDEV); - // CHECK-DAG: [[USMDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD3]] to i32 addrspace(1)* - // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMDEV_CAST3]]) + bar(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) + bar2(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST2]]) + bar3(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD3]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[GLOBDEV_CAST3]]) - bar(*USMHOST); - // CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST]]) - bar2(*USMHOST); - // CHECK-DAG: [[USMHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD2]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST2]]) - bar3(*USMHOST); - // CHECK-DAG: [[USMHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD3]] to i32 addrspace(1)* - // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[USMHOST_CAST3]]) + bar(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) + bar2(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD2:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST2:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD2]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF2]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST2]]) + bar3(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST3:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD3]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_REF]](i32 addrspace(1)* dereferenceable(4) [[GLOBHOST_CAST3]]) bar(*LOC); // CHECK-DAG: [[LOC_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] @@ -92,30 +92,30 @@ void usages() { // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD4]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOB_CAST4]]) - foo(USMDEV); - // CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMDEV_CAST4]]) - foo2(USMDEV); - // CHECK-DAG: [[USMDEV_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD5]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMDEV_CAST5]]) - foo3(USMDEV); - // CHECK-DAG: [[USMDEV_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD6]] to i32 addrspace(1)* - // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMDEV_CAST6]]) - foo(USMHOST); - // CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD4]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[USMHOST_CAST4]]) - foo2(USMHOST); - // CHECK-DAG: [[USMHOST_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD5]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[USMHOST_CAST5]]) - foo3(USMHOST); - // CHECK-DAG: [[USMHOST_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD6]] to i32 addrspace(1)* - // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[USMHOST_CAST6]]) + foo(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBDEV_CAST4]]) + foo2(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD5]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBDEV_CAST5]]) + foo3(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD6]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[GLOBDEV_CAST6]]) + foo(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST4:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD4]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR]](i32 addrspace(4)* [[GLOBHOST_CAST4]]) + foo2(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST5:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD5]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_PTR2]](i32 addrspace(4)* [[GLOBHOST_CAST5]]) + foo3(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD6:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST6:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD6]] to i32 addrspace(1)* + // CHECK-DAG: call spir_func void @[[GLOB_PTR]](i32 addrspace(1)* [[GLOBHOST_CAST6]]) foo(LOC); // CHECK-DAG: [[LOC_LOAD3:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_PTR]](i32 addrspace(3)* [[LOC_LOAD3]]) @@ -134,12 +134,12 @@ void usages() { tmpl(GLOB); // CHECK-DAG: [[GLOB_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: call spir_func void [[GLOB_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(1)* [[GLOB_LOAD4]]) - tmpl(USMDEV); - // CHECK-DAG: [[USMDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: call spir_func void [[USMDEV_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(11)* [[USMDEV_LOAD4]]) - tmpl(USMHOST); - // CHECK-DAG: [[USMHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: call spir_func void [[USMHOST_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(12)* [[USMHOST_LOAD4]]) + tmpl(GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: call spir_func void [[GLOBDEV_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(11)* [[GLOBDEV_LOAD4]]) + tmpl(GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD4:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: call spir_func void [[GLOBHOST_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(12)* [[GLOBHOST_LOAD4]]) tmpl(LOC); // CHECK-DAG: [[LOC_LOAD5:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOC]] // CHECK-DAG: call spir_func void [[LOC_TMPL:@[a-zA-Z0-9_]+]](i32 addrspace(3)* [[LOC_LOAD5]]) @@ -152,8 +152,8 @@ void usages() { } // CHECK-DAG: define linkonce_odr spir_func void [[GLOB_TMPL]](i32 addrspace(1)* % -// CHECK-DAG: define linkonce_odr spir_func void [[USMDEV_TMPL]](i32 addrspace(11)* % -// CHECK-DAG: define linkonce_odr spir_func void [[USMHOST_TMPL]](i32 addrspace(12)* % +// CHECK-DAG: define linkonce_odr spir_func void [[GLOBDEV_TMPL]](i32 addrspace(11)* % +// CHECK-DAG: define linkonce_odr spir_func void [[GLOBHOST_TMPL]](i32 addrspace(12)* % // CHECK-DAG: define linkonce_odr spir_func void [[LOC_TMPL]](i32 addrspace(3)* % // CHECK-DAG: define linkonce_odr spir_func void [[PRIV_TMPL]](i32* % // CHECK-DAG: define linkonce_odr spir_func void [[GEN_TMPL]](i32 addrspace(4)* % @@ -163,10 +163,10 @@ void usages2() { // CHECK-DAG: [[PRIV:%[a-zA-Z0-9_]+]] = alloca i32* __attribute__((opencl_global)) int *GLOB; // CHECK-DAG: [[GLOB:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(1)* - __attribute__((opencl_usm_device)) int *USMDEV; - // CHECK-DAG: [[USMDEV:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(11)* - __attribute__((opencl_usm_host)) int *USMHOST; - // CHECK-DAG: [[USMHOST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(12)* + __attribute__((opencl_global_device)) int *GLOBDEV; + // CHECK-DAG: [[GLOBDEV:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(11)* + __attribute__((opencl_global_host)) int *GLOBHOST; + // CHECK-DAG: [[GLOBHOST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(12)* __attribute__((opencl_constant)) int *CONST; // CHECK-DAG: [[CONST:%[a-zA-Z0-9_]+]] = alloca i32 addrspace(2)* __attribute__((opencl_local)) int *LOCAL; @@ -180,14 +180,14 @@ void usages2() { // CHECK-DAG: [[GLOB_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(1)*, i32 addrspace(1)** [[GLOB]] // CHECK-DAG: [[GLOB_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(1)* [[GLOB_LOAD]] to i32 addrspace(4)* // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOB_CAST]]) - bar(*USMDEV); - // CHECK-DAG: [[USMDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[USMDEV]] - // CHECK-DAG: [[USMDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[USMDEV_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMDEV_CAST]]) - bar(*USMHOST); - // CHECK-DAG: [[USMHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[USMHOST]] - // CHECK-DAG: [[USMHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[USMHOST_LOAD]] to i32 addrspace(4)* - // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[USMHOST_CAST]]) + bar(*GLOBDEV); + // CHECK-DAG: [[GLOBDEV_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(11)*, i32 addrspace(11)** [[GLOBDEV]] + // CHECK-DAG: [[GLOBDEV_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(11)* [[GLOBDEV_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBDEV_CAST]]) + bar(*GLOBHOST); + // CHECK-DAG: [[GLOBHOST_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(12)*, i32 addrspace(12)** [[GLOBHOST]] + // CHECK-DAG: [[GLOBHOST_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(12)* [[GLOBHOST_LOAD]] to i32 addrspace(4)* + // CHECK-DAG: call spir_func void @[[RAW_REF]](i32 addrspace(4)* dereferenceable(4) [[GLOBHOST_CAST]]) bar2(*LOCAL); // CHECK-DAG: [[LOCAL_LOAD:%[a-zA-Z0-9]+]] = load i32 addrspace(3)*, i32 addrspace(3)** [[LOCAL]] // CHECK-DAG: [[LOCAL_CAST:%[a-zA-Z0-9]+]] = addrspacecast i32 addrspace(3)* [[LOCAL_LOAD]] to i32 addrspace(4)* diff --git a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp index c6db01ecb5940..8dd54d3db23b8 100644 --- a/clang/test/SemaSYCL/address-space-parameter-conversions.cpp +++ b/clang/test/SemaSYCL/address-space-parameter-conversions.cpp @@ -14,8 +14,8 @@ void tmpl(T *t){} void usages() { __attribute__((opencl_global)) int *GLOB; - __attribute__((opencl_usm_device)) int *USMDEV; - __attribute__((opencl_usm_host)) int *USMHOST; + __attribute__((opencl_global_device)) int *GLOBDEV; + __attribute__((opencl_global_host)) int *GLOBHOST; __attribute__((opencl_private)) int *PRIV; __attribute__((opencl_local)) int *LOC; int *NoAS; @@ -23,13 +23,13 @@ void usages() { bar(*GLOB); bar2(*GLOB); - bar(*USMDEV); - bar2(*USMDEV); - bar3(*USMDEV); + bar(*GLOBDEV); + bar2(*GLOBDEV); + bar3(*GLOBDEV); - bar(*USMHOST); - bar2(*USMHOST); - bar3(*USMHOST); + bar(*GLOBHOST); + bar2(*GLOBHOST); + bar3(*GLOBHOST); bar(*PRIV); bar2(*PRIV); @@ -42,12 +42,12 @@ void usages() { foo(GLOB); foo2(GLOB); - foo(USMDEV); - foo2(USMDEV); - foo3(USMDEV); - foo(USMDEV); - foo2(USMHOST); - foo3(USMHOST); + foo(GLOBDEV); + foo2(GLOBDEV); + foo3(GLOBDEV); + foo(GLOBDEV); + foo2(GLOBHOST); + foo3(GLOBHOST); foo(PRIV); foo2(PRIV); foo(NoAS); @@ -56,18 +56,18 @@ void usages() { foo2(LOC); tmpl(GLOB); - tmpl(USMDEV); - tmpl(USMHOST); + tmpl(GLOBDEV); + tmpl(GLOBHOST); tmpl(PRIV); tmpl(NoAS); tmpl(LOC); (void)static_cast(GLOB); (void)static_cast(GLOB); - (void)static_cast(USMDEV); - (void)static_cast(USMDEV); - (void)static_cast(USMHOST); - (void)static_cast(USMHOST); + (void)static_cast(GLOBDEV); + (void)static_cast(GLOBDEV); + (void)static_cast(GLOBHOST); + (void)static_cast(GLOBHOST); // FIXME: determine if we can warn on the below conversions. int *i = GLOB; void *v = GLOB; From 2ae8d89ff7b215ea05fc4102daefdb5776c4d1df Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Wed, 3 Jun 2020 12:46:54 +0300 Subject: [PATCH 10/11] Remove renaming artifacts Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 6 ++++-- clang/include/clang/Basic/Attr.td | 4 ++-- clang/include/clang/Basic/AttrDocs.td | 2 +- clang/lib/AST/ItaniumMangle.cpp | 4 ++-- clang/lib/AST/MicrosoftMangle.cpp | 4 ++-- clang/test/CodeGenCXX/mangle-address-space.cpp | 8 ++++---- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 92b75c86d0e76..9c37beb79878a 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -480,8 +480,10 @@ class Qualifiers { // Otherwise in OpenCLC v2.0 s6.5.5: every address space except // for __constant can be used as __generic. (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || - // For USM extension we define global_device and global_host address - // spaces, which are a subset of __global. + // We also define global_device and global_host address spaces, + // to distinguish global pointers allocated on host to pointers + // allocated on device, which are a subset of __global. + // FIXME: add a reference to spec when ready (A == LangAS::opencl_global && (B == LangAS::opencl_global_device || B == LangAS::opencl_global_host)) || // Consider pointer size address spaces to be equivalent to default. diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 56f8da06ae7ac..4d88180124972 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1296,12 +1296,12 @@ def OpenCLGlobalAddressSpace : TypeAttr { def OpenCLGlobalDeviceAddressSpace : TypeAttr { let Spellings = [Clang<"opencl_global_device">]; - let Documentation = [OpenCLUSMAddressSpacesDocs]; + let Documentation = [OpenCLGlobalAddressSpacesDocs]; } def OpenCLGlobalHostAddressSpace : TypeAttr { let Spellings = [Clang<"opencl_global_host">]; - let Documentation = [OpenCLUSMAddressSpacesDocs]; + let Documentation = [OpenCLGlobalAddressSpacesDocs]; } def OpenCLLocalAddressSpace : TypeAttr { diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 7f37406cc87ef..1a7bca252912b 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3559,7 +3559,7 @@ scope) variables and static local variable as well. }]; } -def OpenCLUSMAddressSpacesDocs : Documentation { +def OpenCLGlobalAddressSpacesDocs : Documentation { let Category = DocOpenCLAddressSpaces; let Heading = "[[clang::opencl_global_device]], [[clang::opencl_global_host]]"; let Content = [{ diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 0874c741f72f2..99a93e3984f43 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2393,10 +2393,10 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals, const DependentAddressSp ASString = "CLglobal"; break; case LangAS::opencl_global_device: - ASString = "CLUSMDevice"; + ASString = "CLDevice"; break; case LangAS::opencl_global_host: - ASString = "CLUSMHost"; + ASString = "CLHost"; break; case LangAS::opencl_local: ASString = "CLlocal"; diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 65a7a723aaa6d..7e6cf7bdd2be0 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1824,10 +1824,10 @@ void MicrosoftCXXNameMangler::mangleAddressSpaceType(QualType T, Extra.mangleSourceName("_ASCLglobal"); break; case LangAS::opencl_global_device: - Extra.mangleSourceName("_ASCLUSMDevice"); + Extra.mangleSourceName("_ASCLDevice"); break; case LangAS::opencl_global_host: - Extra.mangleSourceName("_ASCLUSMHost"); + Extra.mangleSourceName("_ASCLHost"); break; case LangAS::opencl_local: Extra.mangleSourceName("_ASCLlocal"); diff --git a/clang/test/CodeGenCXX/mangle-address-space.cpp b/clang/test/CodeGenCXX/mangle-address-space.cpp index cf1afc4564556..71bfb68b9a4ab 100644 --- a/clang/test/CodeGenCXX/mangle-address-space.cpp +++ b/clang/test/CodeGenCXX/mangle-address-space.cpp @@ -66,11 +66,11 @@ __constant float *ocl_f1(char __generic const *p) { return 0;} // WINOCL-LABEL: define {{.*}}float* @"?ocl_f2@@YAPEAU?$_ASCLgeneric@$$CAM@__clang@@QEAU?$_ASCLgeneric@$$CBD@2@@Z" __generic float *ocl_f2(__generic char const * const p) { return 0;} -// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU9CLUSMHost14ocl_OpaqueType -// WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLUSMHost@$$CAUocl_OpaqueType@@@__clang@@@Z" +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f3PU6CLHost14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f3@@YAXPEAU?$_ASCLHost@$$CAUocl_OpaqueType@@@__clang@@@Z" void ocl_f3(ocl_OpaqueTypePtrH) {} -// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU11CLUSMDevice14ocl_OpaqueType -// WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLUSMDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" +// CHECKOCL-LABEL: define {{.*}}void @_Z6ocl_f4PU8CLDevice14ocl_OpaqueType +// WINOCL-LABEL: define {{.*}}void @"?ocl_f4@@YAXPEAU?$_ASCLDevice@$$CAUocl_OpaqueType@@@__clang@@@Z" void ocl_f4(ocl_OpaqueTypePtrD) {} #endif From 8e704d94dc1723e5bc7dd23b5b750b8278902a77 Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Wed, 3 Jun 2020 14:33:15 +0300 Subject: [PATCH 11/11] Fix grammar Signed-off-by: Dmitry Sidorov --- clang/include/clang/AST/Type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 9c37beb79878a..146aaffd2ec9d 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -481,7 +481,7 @@ class Qualifiers { // for __constant can be used as __generic. (A == LangAS::opencl_generic && B != LangAS::opencl_constant) || // We also define global_device and global_host address spaces, - // to distinguish global pointers allocated on host to pointers + // to distinguish global pointers allocated on host from pointers // allocated on device, which are a subset of __global. // FIXME: add a reference to spec when ready (A == LangAS::opencl_global && (B == LangAS::opencl_global_device ||