[IRMover] Set Address Space for moved global values
authorTeresa Johnson <tejohnson@google.com>
Tue, 5 Nov 2019 22:00:58 +0000 (14:00 -0800)
committerTeresa Johnson <tejohnson@google.com>
Wed, 6 Nov 2019 00:32:48 +0000 (16:32 -0800)
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

llvm/lib/Linker/IRMover.cpp
llvm/test/Linker/addrspace.ll [new file with mode: 0644]

index 1cef0e8..1b17d82 100644 (file)
@@ -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()),
diff --git a/llvm/test/Linker/addrspace.ll b/llvm/test/Linker/addrspace.ll
new file mode 100644 (file)
index 0000000..713aa01
--- /dev/null
@@ -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
+}