forked from OSchip/llvm-project
When generating llvm.used, we may need an addrspacecast instead of a bitcast.
Summary: This is especially important for targets that use multiple address spaces, and commonly place global variables in address spaces other than zero. Fixes PR22383 Test Plan: New test case added: llvm-used.cu Reviewers: jingyue Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7345 llvm-svn: 227861
This commit is contained in:
parent
2f746d4c94
commit
f37f3d35eb
clang
|
@ -935,8 +935,8 @@ static void emitUsed(CodeGenModule &CGM, StringRef Name,
|
|||
UsedArray.resize(List.size());
|
||||
for (unsigned i = 0, e = List.size(); i != e; ++i) {
|
||||
UsedArray[i] =
|
||||
llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*List[i]),
|
||||
CGM.Int8PtrTy);
|
||||
llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
|
||||
cast<llvm::Constant>(&*List[i]), CGM.Int8PtrTy);
|
||||
}
|
||||
|
||||
if (UsedArray.empty())
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: %clang_cc1 -emit-llvm %s -o - -fcuda-is-device -triple nvptx64-unknown-unknown | FileCheck %s
|
||||
|
||||
|
||||
// Make sure we emit the proper addrspacecast for llvm.used. PR22383 exposed an
|
||||
// issue where we were generating a bitcast instead of an addrspacecast.
|
||||
|
||||
// CHECK: @llvm.used = appending global [1 x i8*] [i8* addrspacecast (i8 addrspace(1)* bitcast ([0 x i32] addrspace(1)* @a to i8 addrspace(1)*) to i8*)], section "llvm.metadata"
|
||||
__attribute__((device)) __attribute__((__used__)) int a[] = {};
|
Loading…
Reference in New Issue