From b36e3a8bac3ee95a5a67ab0acb6ef2a2602226a7 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Tue, 5 Nov 2019 14:00:58 -0800 Subject: [PATCH] [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 Reviewers: tejohnson, chandlerc Reviewed By: tejohnson Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69361 --- llvm/lib/Linker/IRMover.cpp | 9 +++++---- llvm/test/Linker/addrspace.ll | 12 ++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 llvm/test/Linker/addrspace.ll diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp index 1cef0e8..1b17d82 100644 --- a/llvm/lib/Linker/IRMover.cpp +++ b/llvm/lib/Linker/IRMover.cpp @@ -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(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()), diff --git a/llvm/test/Linker/addrspace.ll b/llvm/test/Linker/addrspace.ll new file mode 100644 index 0000000..713aa01 --- /dev/null +++ b/llvm/test/Linker/addrspace.ll @@ -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 +} -- 2.7.4