mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-21 06:30:16 +00:00
Linker: Copy over function metadata attachments
Update `lib/Linker` to handle `Function` metadata attachments. The attachments stick with the function body. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235786 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ae3211466a
commit
8efc190690
@ -1205,6 +1205,13 @@ bool ModuleLinker::linkFunctionBody(Function &Dst, Function &Src) {
|
|||||||
++DI;
|
++DI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy over the metadata attachments.
|
||||||
|
SmallVector<std::pair<unsigned, MDNode *>, 8> MDs;
|
||||||
|
Src.getAllMetadata(MDs);
|
||||||
|
for (const auto &I : MDs)
|
||||||
|
Dst.setMetadata(I.first, MapMetadata(I.second, ValueMap, RF_None, &TypeMap,
|
||||||
|
&ValMaterializer));
|
||||||
|
|
||||||
// Splice the body of the source function into the dest function.
|
// Splice the body of the source function into the dest function.
|
||||||
Dst.getBasicBlockList().splice(Dst.end(), Src.getBasicBlockList());
|
Dst.getBasicBlockList().splice(Dst.end(), Src.getBasicBlockList());
|
||||||
|
|
||||||
|
13
test/Linker/Inputs/metadata-function.ll
Normal file
13
test/Linker/Inputs/metadata-function.ll
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
define weak void @foo() !weak !0 {
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @baz() !baz !0 {
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @b() !b !0 {
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
!0 = !{!"b"}
|
26
test/Linker/metadata-function.ll
Normal file
26
test/Linker/metadata-function.ll
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
; RUN: llvm-link %s %S/Inputs/metadata-function.ll -S | FileCheck %s
|
||||||
|
; RUN: llvm-link %S/Inputs/metadata-function.ll %s -S | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK-DAG: define weak void @foo() !weak ![[B:[0-9]+]] {
|
||||||
|
define linkonce void @foo() !linkonce !0 {
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK-DAG: define void @bar() !bar ![[A:[0-9]+]] {
|
||||||
|
define void @bar() !bar !0 {
|
||||||
|
call void @baz()
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK-DAG: define void @baz() !baz ![[B]] {
|
||||||
|
declare void @baz()
|
||||||
|
|
||||||
|
; CHECK-DAG: define void @a() !a ![[A]] {
|
||||||
|
; CHECK-DAG: define void @b() !b ![[B]] {
|
||||||
|
define void @a() !a !0 {
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK-DAG: ![[A]] = !{!"a"}
|
||||||
|
; CHECK-DAG: ![[B]] = !{!"b"}
|
||||||
|
!0 = !{!"a"}
|
Loading…
x
Reference in New Issue
Block a user