Author: Alex Richardson Date: 2022-12-16T11:28:19Z New Revision: c4c23527d6c919bfd781fae0f7a82b9271b6429e
URL: https://github.com/llvm/llvm-project/commit/c4c23527d6c919bfd781fae0f7a82b9271b6429e DIFF: https://github.com/llvm/llvm-project/commit/c4c23527d6c919bfd781fae0f7a82b9271b6429e.diff LOG: [ASTContext] Avoid duplicating address space map. NFCI ASTContext was holding onto a pointer to the Clang->LLVM address space map which is stored inside TargetInfo. Instead of doing this, we can forward to TargetInfo instead. This change will allow us to eventually remove getTargetAddressSpace() from ASTContext and only have this information in TargetInfo. Reviewed By: rjmccall Differential Revision: https://reviews.llvm.org/D138316 Added: Modified: clang/include/clang/AST/ASTContext.h clang/lib/AST/ASTContext.cpp clang/lib/Basic/TargetInfo.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index 64cdd63db009f..f45c84406d2a2 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -613,9 +613,6 @@ class ASTContext : public RefCountedBase<ASTContext> { std::unique_ptr<CXXABI> ABI; CXXABI *createCXXABI(const TargetInfo &T); - /// The logical -> physical address space map. - const LangASMap *AddrSpaceMap = nullptr; - /// Address space map mangling must be used with language specific /// address spaces (e.g. OpenCL/CUDA) bool AddrSpaceMapMangling; diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 8887789555afb..c2491f872a58e 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -930,39 +930,6 @@ ParentMapContext &ASTContext::getParentMapContext() { return *ParentMapCtx.get(); } -static const LangASMap *getAddressSpaceMap(const TargetInfo &T, - const LangOptions &LOpts) { - if (LOpts.FakeAddressSpaceMap) { - // 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 - 5, // opencl_global_device - 6, // opencl_global_host - 7, // cuda_device - 8, // cuda_constant - 9, // cuda_shared - 1, // sycl_global - 5, // sycl_global_device - 6, // sycl_global_host - 3, // sycl_local - 0, // sycl_private - 10, // ptr32_sptr - 11, // ptr32_uptr - 12, // ptr64 - 13, // hlsl_groupshared - }; - return &FakeAddrSpaceMap; - } else { - return &T.getAddressSpaceMap(); - } -} - static bool isAddrSpaceMapManglingEnabled(const TargetInfo &TI, const LangOptions &LangOpts) { switch (LangOpts.getAddressSpaceMapMangling()) { @@ -1293,7 +1260,6 @@ void ASTContext::InitBuiltinTypes(const TargetInfo &Target, this->AuxTarget = AuxTarget; ABI.reset(createCXXABI(Target)); - AddrSpaceMap = getAddressSpaceMap(Target, LangOpts); AddrSpaceMapMangling = isAddrSpaceMapManglingEnabled(Target, LangOpts); // C99 6.2.5p19. @@ -12244,10 +12210,7 @@ uint64_t ASTContext::getTargetNullPointerValue(QualType QT) const { } unsigned ASTContext::getTargetAddressSpace(LangAS AS) const { - if (isTargetAddressSpace(AS)) - return toTargetAddressSpace(AS); - else - return (*AddrSpaceMap)[(unsigned)AS]; + return getTargetInfo().getTargetAddressSpace(AS); } bool ASTContext::hasSameExpr(const Expr *X, const Expr *Y) const { diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp index f735f58c7b8c2..45e2f4a7a5dad 100644 --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -24,6 +24,30 @@ using namespace clang; static const LangASMap DefaultAddrSpaceMap = {0}; +// The fake address space map must have a distinct entry for each +// language-specific address space. +static const LangASMap FakeAddrSpaceMap = { + 0, // Default + 1, // opencl_global + 3, // opencl_local + 2, // opencl_constant + 0, // opencl_private + 4, // opencl_generic + 5, // opencl_global_device + 6, // opencl_global_host + 7, // cuda_device + 8, // cuda_constant + 9, // cuda_shared + 1, // sycl_global + 5, // sycl_global_device + 6, // sycl_global_host + 3, // sycl_local + 0, // sycl_private + 10, // ptr32_sptr + 11, // ptr32_uptr + 12, // ptr64 + 13, // hlsl_groupshared +}; // TargetInfo Constructor. TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) { @@ -487,6 +511,9 @@ void TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) { if (Opts.MaxBitIntWidth) MaxBitIntWidth = Opts.MaxBitIntWidth; + + if (Opts.FakeAddressSpaceMap) + AddrSpaceMap = &FakeAddrSpaceMap; } bool TargetInfo::initFeatureMap( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits