diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-08 22:42:30 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-08 22:42:30 +0000 |
| commit | 953e1a48f02031be36094d5bfaf2685cf130bd02 (patch) | |
| tree | 6cc3fb579f362928718a30208bbd81e93c7b9332 /llvm/test | |
| parent | 4bbe428cc5d734ac53af9821e6dc0c280d1eeac4 (diff) | |
| download | bcm5719-llvm-953e1a48f02031be36094d5bfaf2685cf130bd02.tar.gz bcm5719-llvm-953e1a48f02031be36094d5bfaf2685cf130bd02.zip | |
Utils: Keep distinct MDNodes distinct in MapMetadata()
Create new copies of distinct `MDNode`s instead of following the
uniquing `MDNode` logic.
Just like self-references (or other cycles), `MapMetadata()` creates a
new node. In practice most calls use `RF_NoModuleLevelChanges`, in
which case nothing is duplicated anyway.
Part of PR22111.
llvm-svn: 225476
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Linker/Inputs/distinct.ll | 13 | ||||
| -rw-r--r-- | llvm/test/Linker/distinct.ll | 37 |
2 files changed, 50 insertions, 0 deletions
diff --git a/llvm/test/Linker/Inputs/distinct.ll b/llvm/test/Linker/Inputs/distinct.ll new file mode 100644 index 00000000000..07ae224d28a --- /dev/null +++ b/llvm/test/Linker/Inputs/distinct.ll @@ -0,0 +1,13 @@ +@global = linkonce global i32 0 + +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} + +!0 = !{} +!1 = !{!0} +!2 = !{i32* @global} +!3 = distinct !{} +!4 = distinct !{!0} +!5 = distinct !{i32* @global} +!6 = !{!3} +!7 = !{!4} +!8 = !{!5} diff --git a/llvm/test/Linker/distinct.ll b/llvm/test/Linker/distinct.ll new file mode 100644 index 00000000000..c8e5c89eb09 --- /dev/null +++ b/llvm/test/Linker/distinct.ll @@ -0,0 +1,37 @@ +; RUN: llvm-link %s %S/Inputs/distinct.ll -o - -S | FileCheck %s + +; Test that distinct nodes from other modules remain distinct. The @global +; cases are the most interesting, since the operands actually need to be +; remapped. + +; CHECK: @global = linkonce global i32 0 +@global = linkonce global i32 0 + +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !0, !1, !2, !9, !10, !11, !12, !13, !14} +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} + +; CHECK: !0 = !{} +; CHECK-NEXT: !1 = !{!0} +; CHECK-NEXT: !2 = !{i32* @global} +; CHECK-NEXT: !3 = distinct !{} +; CHECK-NEXT: !4 = distinct !{!0} +; CHECK-NEXT: !5 = distinct !{i32* @global} +; CHECK-NEXT: !6 = !{!3} +; CHECK-NEXT: !7 = !{!4} +; CHECK-NEXT: !8 = !{!5} +; CHECK-NEXT: !9 = distinct !{} +; CHECK-NEXT: !10 = distinct !{!0} +; CHECK-NEXT: !11 = distinct !{i32* @global} +; CHECK-NEXT: !12 = !{!9} +; CHECK-NEXT: !13 = !{!10} +; CHECK-NEXT: !14 = !{!11} +; CHECK-NOT: ! +!0 = !{} +!1 = !{!0} +!2 = !{i32* @global} +!3 = distinct !{} +!4 = distinct !{!0} +!5 = distinct !{i32* @global} +!6 = !{!3} +!7 = !{!4} +!8 = !{!5} |

