mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[IRMover] Set Address Space for moved global values
Summary: Set Address Space when creating a new function (from another). Fix PR41154. Patch by Ehud Katz <ehudkatz@gmail.com> Reviewers: tejohnson, chandlerc Reviewed By: tejohnson Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69361
This commit is contained in:
parent
9413ba8b9d
commit
1c2dd6d975
@ -654,9 +654,9 @@ AttributeList IRLinker::mapAttributeTypes(LLVMContext &C, AttributeList Attrs) {
|
||||
Function *IRLinker::copyFunctionProto(const Function *SF) {
|
||||
// If there is no linkage to be performed or we are linking from the source,
|
||||
// bring SF over.
|
||||
auto *F =
|
||||
Function::Create(TypeMap.get(SF->getFunctionType()),
|
||||
GlobalValue::ExternalLinkage, SF->getName(), &DstM);
|
||||
auto *F = Function::Create(TypeMap.get(SF->getFunctionType()),
|
||||
GlobalValue::ExternalLinkage,
|
||||
SF->getAddressSpace(), SF->getName(), &DstM);
|
||||
F->copyAttributesFrom(SF);
|
||||
F->setAttributes(mapAttributeTypes(F->getContext(), F->getAttributes()));
|
||||
return F;
|
||||
@ -695,7 +695,8 @@ GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV,
|
||||
else if (SGV->getValueType()->isFunctionTy())
|
||||
NewGV =
|
||||
Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())),
|
||||
GlobalValue::ExternalLinkage, SGV->getName(), &DstM);
|
||||
GlobalValue::ExternalLinkage, SGV->getAddressSpace(),
|
||||
SGV->getName(), &DstM);
|
||||
else
|
||||
NewGV =
|
||||
new GlobalVariable(DstM, TypeMap.get(SGV->getValueType()),
|
||||
|
12
test/Linker/addrspace.ll
Normal file
12
test/Linker/addrspace.ll
Normal file
@ -0,0 +1,12 @@
|
||||
; RUN: llvm-link %s -S | FileCheck %s
|
||||
|
||||
@G = addrspace(2) global i32 256
|
||||
; CHECK: @G = addrspace(2) global i32
|
||||
|
||||
@GA = alias i32, i32 addrspace(2)* @G
|
||||
; CHECK: @GA = alias i32, i32 addrspace(2)* @G
|
||||
|
||||
define void @foo() addrspace(3) {
|
||||
; CHECK: define void @foo() addrspace(3)
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user