forked from OSchip/llvm-project
[OpenCL] Defines helper function for OpenCL default address space
Helper function `getDefaultOpenCLPointeeAddrSpace()` introduced to `ASTContext` class. It returns default OpenCL address space depending on language version and enabled features. If generic address space is supported, the helper function returns value `LangAS::opencl_generic`. Otherwise, value `LangAS::opencl_private` is returned. Code refactoring changes performed in several suitable places. Differential Revision: https://reviews.llvm.org/D109874
This commit is contained in:
parent
69921f6f45
commit
32b994bca6
|
@ -1362,6 +1362,12 @@ public:
|
|||
/// Get address space for OpenCL type.
|
||||
LangAS getOpenCLTypeAddrSpace(const Type *T) const;
|
||||
|
||||
/// Returns default address space based on OpenCL version and enabled features
|
||||
inline LangAS getDefaultOpenCLPointeeAddrSpace() {
|
||||
return LangOpts.OpenCLGenericAddressSpace ? LangAS::opencl_generic
|
||||
: LangAS::opencl_private;
|
||||
}
|
||||
|
||||
void setcudaConfigureCallDecl(FunctionDecl *FD) {
|
||||
cudaConfigureCallDecl = FD;
|
||||
}
|
||||
|
|
|
@ -3779,11 +3779,8 @@ Expr::isNullPointerConstant(ASTContext &Ctx,
|
|||
// has non-default address space it is not treated as nullptr.
|
||||
// (__generic void*)0 in OpenCL 2.0 should not be treated as nullptr
|
||||
// since it cannot be assigned to a pointer to constant address space.
|
||||
if ((Ctx.getLangOpts().OpenCLVersion >= 200 &&
|
||||
Pointee.getAddressSpace() == LangAS::opencl_generic) ||
|
||||
(Ctx.getLangOpts().OpenCL &&
|
||||
Ctx.getLangOpts().OpenCLVersion < 200 &&
|
||||
Pointee.getAddressSpace() == LangAS::opencl_private))
|
||||
if (Ctx.getLangOpts().OpenCL &&
|
||||
Pointee.getAddressSpace() == Ctx.getDefaultOpenCLPointeeAddrSpace())
|
||||
Qs.removeAddressSpace();
|
||||
|
||||
if (Pointee->isVoidType() && Qs.empty() && // to void*
|
||||
|
|
|
@ -1430,7 +1430,7 @@ NamedDecl *Sema::getCurFunctionOrMethodDecl() {
|
|||
|
||||
LangAS Sema::getDefaultCXXMethodAddrSpace() const {
|
||||
if (getLangOpts().OpenCL)
|
||||
return LangAS::opencl_generic;
|
||||
return getASTContext().getDefaultOpenCLPointeeAddrSpace();
|
||||
return LangAS::Default;
|
||||
}
|
||||
|
||||
|
|
|
@ -3894,8 +3894,9 @@ static bool AdjustFunctionParmAndArgTypesForDeduction(
|
|||
// "lvalue reference to A" is used in place of A for type deduction.
|
||||
if (isForwardingReference(QualType(ParamRefType, 0), FirstInnerIndex) &&
|
||||
Arg->isLValue()) {
|
||||
if (S.getLangOpts().OpenCL && !ArgType.hasAddressSpace())
|
||||
ArgType = S.Context.getAddrSpaceQualType(ArgType, LangAS::opencl_generic);
|
||||
if (S.getLangOpts().OpenCL && !ArgType.hasAddressSpace())
|
||||
ArgType = S.Context.getAddrSpaceQualType(
|
||||
ArgType, S.Context.getDefaultOpenCLPointeeAddrSpace());
|
||||
ArgType = S.Context.getLValueReferenceType(ArgType);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -2092,9 +2092,7 @@ static QualType deduceOpenCLPointeeAddrSpace(Sema &S, QualType PointeeType) {
|
|||
!PointeeType->isSamplerT() &&
|
||||
!PointeeType.hasAddressSpace())
|
||||
PointeeType = S.getASTContext().getAddrSpaceQualType(
|
||||
PointeeType, S.getLangOpts().OpenCLGenericAddressSpace
|
||||
? LangAS::opencl_generic
|
||||
: LangAS::opencl_private);
|
||||
PointeeType, S.getASTContext().getDefaultOpenCLPointeeAddrSpace());
|
||||
return PointeeType;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue