mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[TargetMachine] Drop implied dso_local for an edge case (extern_weak + non-pic + hidden)
This does not deserve special handling. The code should be added to Clang instead if deemed useful. With this simplification, we can additionally delete the PIC extern_weak special case.
This commit is contained in:
parent
2a17ab7e6e
commit
43af914fd3
@ -143,16 +143,6 @@ bool TargetMachine::shouldAssumeDSOLocal(const Module &M,
|
||||
if (TT.isOSBinFormatCOFF() || TT.isOSWindows())
|
||||
return true;
|
||||
|
||||
// Most PIC code sequences that assume that a symbol is local cannot
|
||||
// produce a 0 if it turns out the symbol is undefined. While this
|
||||
// is ABI and relocation depended, it seems worth it to handle it
|
||||
// here.
|
||||
if (isPositionIndependent() && GV->hasExternalWeakLinkage())
|
||||
return false;
|
||||
|
||||
if (!GV->hasDefaultVisibility())
|
||||
return true;
|
||||
|
||||
if (TT.isOSBinFormatMachO()) {
|
||||
if (RM == Reloc::Static)
|
||||
return true;
|
||||
|
@ -7,8 +7,9 @@ define i32 @t() nounwind readonly {
|
||||
entry:
|
||||
; CHECK: LCPI0_0:
|
||||
; CHECK-NEXT: .long _x
|
||||
;; .long _y can be used if @y is dso_local.
|
||||
; CHECK: LCPI0_1:
|
||||
; CHECK-NEXT: .long _y
|
||||
; CHECK-NEXT: .long L_y$non_lazy_ptr
|
||||
|
||||
%0 = load i32, i32* @x, align 4 ; <i32> [#uses=1]
|
||||
%1 = load i32, i32* @y, align 4 ; <i32> [#uses=1]
|
||||
|
@ -6,8 +6,10 @@
|
||||
|
||||
define i32 @t() nounwind readonly {
|
||||
entry:
|
||||
;; movl _y, %eax can be used if @y is dso_local.
|
||||
; X32: _t:
|
||||
; X32: movl _y, %eax
|
||||
; X32: movl L_y$non_lazy_ptr, %eax
|
||||
; X32-NEXT: movl (%eax), %eax
|
||||
|
||||
; X64: _t:
|
||||
; X64: movq _y@GOTPCREL(%rip), %rax
|
||||
|
Loading…
Reference in New Issue
Block a user