diff options
author | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-07-20 19:21:11 +0000 |
---|---|---|
committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-07-20 19:21:11 +0000 |
commit | 37ceedeabdc8dbc4c9ae2e6c467590c27ddde29a (patch) | |
tree | e1f049fa91fe0586fa733743a3e494766ac16c5f /clang/lib/CodeGen | |
parent | d3f047a38f997856e03ebe0b4d326789f7252dbd (diff) | |
download | bcm5719-llvm-37ceedeabdc8dbc4c9ae2e6c467590c27ddde29a.tar.gz bcm5719-llvm-37ceedeabdc8dbc4c9ae2e6c467590c27ddde29a.zip |
[OpenCL] AMDGCN target will generate images in constant address space
Allows AMDGCN target to generate images (such as %opencl.image2d_t) in constant address space.
Images will still be generated in global address space by default.
Added tests to existing opencl-types.cl in test\CodeGenOpenCL.
Patch by Aaron En Ye Shi.
Differential Revision: https://reviews.llvm.org/D22523
llvm-svn: 276161
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGOpenCLRuntime.cpp | 3 | ||||
-rw-r--r-- | clang/lib/CodeGen/TargetInfo.cpp | 10 | ||||
-rw-r--r-- | clang/lib/CodeGen/TargetInfo.h | 3 |
3 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGOpenCLRuntime.cpp b/clang/lib/CodeGen/CGOpenCLRuntime.cpp index 38aebea18ed..c0af6deae2d 100644 --- a/clang/lib/CodeGen/CGOpenCLRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenCLRuntime.cpp @@ -15,6 +15,7 @@ #include "CGOpenCLRuntime.h" #include "CodeGenFunction.h" +#include "TargetInfo.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/GlobalValue.h" #include <assert.h> @@ -35,7 +36,7 @@ llvm::Type *CGOpenCLRuntime::convertOpenCLSpecificType(const Type *T) { llvm::LLVMContext& Ctx = CGM.getLLVMContext(); uint32_t ImgAddrSpc = - CGM.getContext().getTargetAddressSpace(LangAS::opencl_global); + CGM.getTargetCodeGenInfo().getOpenCLImageAddrSpace(CGM); switch (cast<BuiltinType>(T)->getKind()) { default: llvm_unreachable("Unexpected opencl builtin type!"); diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 0777779e136..be97d648e88 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -375,6 +375,11 @@ TargetCodeGenInfo::getDependentLibraryOption(llvm::StringRef Lib, unsigned TargetCodeGenInfo::getOpenCLKernelCallingConv() const { return llvm::CallingConv::C; } + +unsigned TargetCodeGenInfo::getOpenCLImageAddrSpace(CodeGen::CodeGenModule &CGM) const { + return CGM.getContext().getTargetAddressSpace(LangAS::opencl_global); +} + static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays); /// isEmptyField - Return true iff a the field is "empty", that is it @@ -6832,6 +6837,7 @@ public: void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const override; unsigned getOpenCLKernelCallingConv() const override; + unsigned getOpenCLImageAddrSpace(CodeGen::CodeGenModule &CGM) const override; }; } @@ -6868,6 +6874,10 @@ unsigned AMDGPUTargetCodeGenInfo::getOpenCLKernelCallingConv() const { return llvm::CallingConv::AMDGPU_KERNEL; } +unsigned AMDGPUTargetCodeGenInfo::getOpenCLImageAddrSpace(CodeGen::CodeGenModule &CGM) const { + return CGM.getContext().getTargetAddressSpace(LangAS::opencl_constant); +} + //===----------------------------------------------------------------------===// // SPARC v8 ABI Implementation. // Based on the SPARC Compliance Definition version 2.4.1. diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h index e46382596af..64a082b4bbf 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -220,6 +220,9 @@ public: /// Get LLVM calling convention for OpenCL kernel. virtual unsigned getOpenCLKernelCallingConv() const; + + /// Get LLVM Image Address Space for OpenCL kernel. + virtual unsigned getOpenCLImageAddrSpace(CodeGen::CodeGenModule &CGM) const; }; } // namespace CodeGen |