diff options
author | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-08-03 20:38:06 +0000 |
---|---|---|
committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-08-03 20:38:06 +0000 |
commit | 99444cb86099d3bf60145d8fc1ddfa43522ea63e (patch) | |
tree | 20e70e29031d0fcf65d4d64f9dffa433c6be64d3 /clang/lib/CodeGen | |
parent | 803568866c9e0d9049d731628ac0233591e7c8f6 (diff) | |
download | bcm5719-llvm-99444cb86099d3bf60145d8fc1ddfa43522ea63e.tar.gz bcm5719-llvm-99444cb86099d3bf60145d8fc1ddfa43522ea63e.zip |
[OpenCL] Fix size of image type
The size of image type is reported incorrectly as size of a pointer to address space 0, which causes error when casting image type to pointers by __builtin_astype.
The fix is to get image address space from TargetInfo then report the size accordingly.
Differential Revision: https://reviews.llvm.org/D22927
llvm-svn: 277647
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGOpenCLRuntime.cpp | 4 | ||||
-rw-r--r-- | clang/lib/CodeGen/TargetInfo.cpp | 9 | ||||
-rw-r--r-- | clang/lib/CodeGen/TargetInfo.h | 3 |
3 files changed, 2 insertions, 14 deletions
diff --git a/clang/lib/CodeGen/CGOpenCLRuntime.cpp b/clang/lib/CodeGen/CGOpenCLRuntime.cpp index e4541d59c25..8983fdeafbc 100644 --- a/clang/lib/CodeGen/CGOpenCLRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenCLRuntime.cpp @@ -35,8 +35,8 @@ llvm::Type *CGOpenCLRuntime::convertOpenCLSpecificType(const Type *T) { "Not an OpenCL specific type!"); llvm::LLVMContext& Ctx = CGM.getLLVMContext(); - uint32_t ImgAddrSpc = - CGM.getTargetCodeGenInfo().getOpenCLImageAddrSpace(CGM); + uint32_t ImgAddrSpc = CGM.getContext().getTargetAddressSpace( + CGM.getTarget().getOpenCLImageAddrSpace()); 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 2d1fa65c476..fa1b58ddd52 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -401,10 +401,6 @@ 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 @@ -6883,7 +6879,6 @@ 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; }; } @@ -6920,10 +6915,6 @@ 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 64a082b4bbf..e46382596af 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -220,9 +220,6 @@ 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 |