diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2013-11-15 02:19:52 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2013-11-15 02:19:52 +0000 |
commit | 00e65b2afe5861942dcfbb5e18e6aab187125276 (patch) | |
tree | 68deddabcb2d92f3e36ebcdeae9c30054b00481b /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 4c56c2263431daef2ce89638c6dfa726d4637c4d (diff) | |
download | llvm-00e65b2afe5861942dcfbb5e18e6aab187125276.zip llvm-00e65b2afe5861942dcfbb5e18e6aab187125276.tar.gz llvm-00e65b2afe5861942dcfbb5e18e6aab187125276.tar.bz2 |
Fix test failures after addrspacecast added.
Bitcasts between address spaces are no longer allowed.
llvm-svn: 194765
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index da54de0..f5fdfdb 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1557,6 +1557,9 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, return Entry; // Make sure the result is of the correct type. + if (Entry->getType()->getAddressSpace() != Ty->getAddressSpace()) + return llvm::ConstantExpr::getAddrSpaceCast(Entry, Ty); + return llvm::ConstantExpr::getBitCast(Entry, Ty); } @@ -1607,9 +1610,9 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, } if (AddrSpace != Ty->getAddressSpace()) - return llvm::ConstantExpr::getBitCast(GV, Ty); - else - return GV; + return llvm::ConstantExpr::getAddrSpaceCast(GV, Ty); + + return GV; } @@ -1802,7 +1805,8 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { // Strip off a bitcast if we got one back. if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) { assert(CE->getOpcode() == llvm::Instruction::BitCast || - // all zero index gep. + CE->getOpcode() == llvm::Instruction::AddrSpaceCast || + // All zero index gep. CE->getOpcode() == llvm::Instruction::GetElementPtr); Entry = CE->getOperand(0); } |