[OpenCL] Make sure we put string literals in the constant address space.

llvm-svn: 194717
This commit is contained in:
Joey Gouly
2013-11-14 18:26:10 +00:00
parent dba2692865
commit 561bba2e9f
5 changed files with 38 additions and 4 deletions

View File

@@ -2625,11 +2625,16 @@ static llvm::GlobalVariable *GenerateStringLiteral(StringRef str,
llvm::Constant *C =
llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false);
// OpenCL v1.1 s6.5.3: a string literal is in the constant address space.
unsigned AddrSpace = 0;
if (CGM.getLangOpts().OpenCL)
AddrSpace = CGM.getContext().getTargetAddressSpace(LangAS::opencl_constant);
// Create a global variable for this string
llvm::GlobalVariable *GV =
new llvm::GlobalVariable(CGM.getModule(), C->getType(), constant,
llvm::GlobalValue::PrivateLinkage,
C, GlobalName);
llvm::GlobalVariable *GV = new llvm::GlobalVariable(
CGM.getModule(), C->getType(), constant,
llvm::GlobalValue::PrivateLinkage, C, GlobalName, 0,
llvm::GlobalVariable::NotThreadLocal, AddrSpace);
GV->setAlignment(Alignment);
GV->setUnnamedAddr(true);
return GV;