mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 02:07:16 +00:00
99ee897f54
Summary: This reverts commit r251965. Restore "Move metadata linking after lazy global materialization/linking." This restores commit r251926, with fixes for the LTO bootstrapping bot failure. The bot failure was caused by references from debug metadata to otherwise unreferenced globals. Previously, this caused the lazy linking to link in their defs, which is unnecessary. With this patch, because lazy linking is complete when we encounter the metadata reference, the materializer created a declaration. For definitions such as aliases and comdats, it is illegal to have a declaration. Furthermore, metadata linking should not change code generation. Therefore, when linking of global value bodies is complete, the materializer will simply return nullptr as the new reference for the linked metadata. This change required fixing a different test to ensure there was a real reference to a linkonce global that was only being reference from metadata. Note that the new changes to the only-needed-named-metadata.ll test illustrate an issue with llvm-link -only-needed handling of comdat groups, whereby it may result in an incomplete comdat group. I note this in the test comments, but the issue is orthogonal to this patch (it can be reproduced without any metadata at head). Reviewers: dexonsmith, rafael, tra Subscribers: tobiasvk, joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D14447 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252320 91177308-0d34-0410-b5e6-96231b3b80d8
40 lines
1.1 KiB
LLVM
40 lines
1.1 KiB
LLVM
; 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
|
|
; Add an external reference to @global so that it gets linked in.
|
|
@alias = alias i32, i32* @global
|
|
|
|
; 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}
|